登录站点

用户名

密码

注册

查看日志|返回日志列表

Centos 7 rsync+inotify 实现数据实时同步

2018-01-10 09:54
  环境介绍:
  两台服务器分别为: 源服务器:192.168.0.1  目标服务器:192.168.0.2,从源服务器(192.168.0.1)的/wwwroot/目录下的所有的文件实时同步到目标服务器(192.168.0.2)的/www_bak/目录下,源服务器下需要安装rsync和inotify,源服务器做为主动端,实时的向目标服务器client端发送数据。
  安装步骤:
  一、首先安装目标服务器rsync,Centos7默认已经安装,如未安装请自行安装即可,可以做个检测:
      rpm -qa|grep rsync
     
1.后台服务的方式启动
vi /etc/xinetd.d/rsync
#default: off
# description: The rsync server is a good addition to an ftp server, as it \
# allows crc checksumming etc.
service rsync {
disable = no
flags  =IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
2.把rsycd加入到开机启动,注意--daemon参数,否则客户端会报告错误。
vi rc.local 
rsync --daemon --config=/etc/rsyncd.conf
3.创建配置文件,默认安装好rsync程序后,并不会自动创建rsync的主配置文件,需要手工来创建,其主配置文件为“/etc/rsyncd.conf”,创建该文件并插入如下内容:
vi  /etc/rsyncd.conf
#rsync通用配置文件,配置的注释不要写在配置后面,否则会有问题
uid = www
gid = www
use chroot = 0
port = 873
#允许ip访问设置,请根据实际需要进行配置,这里为了方便设为全网段 *,生产环境下为了安全请指定ip或ip段
hosts allow = 192.168.0.1
max connections = 1000
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
log format = %t %a %m %f %b
transfer logging = yes
syslog facility = local3
#方括号中为模块声明,对应命名,这里master_web对应了主web机配置,从服务器可都为[slave_web],方便inotify脚本配置
[slave_web]
#指定当前模块在rsync服务器上的同步路径,该参数是必须指定的
path = /www_bak/
#注释,可以同模块名一样,从服务器可都为slave_web
comment = slave_web
ignore errors
#是否允许客户端上传文件
read only = no
list = no
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块
auth users = rsync
#保存密码和用户名文件,需要自己生成
secrets file = /etc/rsyncd.passwd
4.创建密码文件
 vi /etc/rsyncd.passwd 内容为:
 rsync:123456
 并给予600权限,此步骤必须做,否则客户端无法链接。
 chmod 600 /etc/rsyncd.passwd

5.开放防火墙873端口
  #vi /etc/sysconfig/iptables #编辑防火墙配置文件
 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -ptcp --dport 873 -j ACCEPT
 重新启动防火墙,查看是否成功
 iptables -L -n 

二、安装源服务器rsync,方法与目标服务器相同
  1. 编辑rsync密码 vi/etc/rsyncd.passwd,内容为(与目标服务器设置密码相对应):
   123456
   并给予600权限
   chmod 600 /etc/rsyncd.passwd
  2.测试rsync
    vi /home/rsync.sh 内容为:
    src=/wwwroot/
    des=slave_web  #(此模块与服务器一致)
    user=rsync
    hostip="192.168.0.2"
   /usr/bin/rsync -vzrtopg --delete --progress  ${src} ${user}@${hostip}::${des}  --password-file=/etc/rsyncd.passwd
增加x权限
 chmod +x /home/rsync.sh
运行,根据对应的错误提示进行修改。
  三、安装源服务器inotify-tools
  1.下载并编译安装
  wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
   tar xvf inotify-tools-3.14.tar.gz
   cd inotify-tools-3.14
   ./configure
   make
   make install
  
 2.创建监听文件并实施同步
 vi /root/rsync.sh 内容为:
src=/wwwroot/
des=slave_web
user=rsync
host="192.168.0.1" #可以多ip同步
/usr/local/bin/inotifywait -mrq --exclude=data/logs  --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib $src | while read file
do
    for hostip in $host
    do
        rsync -vzrtopg --delete --progress  --exclude=.htaccess(排除不同步的文件夹及文件)  --exclude=data/logs/ ${src} ${user}@${hostip}::${des}  --password-file=/etc/rsyncd.passwd
        echo "${file} was rsynced" >> /tmp/rsync.log 2>&1
    done
done
  3.测试运行
    如报告错误inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory
  
解决方法:
32位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib/libinotifytools.so.0
64位系统:ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0
  4.加入开机启动
    vi rc.local ,内容为,后台挂起运行
   nohup sh /root/rsync.sh &

分享 1657 次阅读 | 0 个评论

留下脚印

评论