lsyncd+rsync实现实时自动同步
本文来自己网络
本示例所需要的软件是:lsyncd与rsync
一般rsync软件是通过crond这支后台进行(计划任务)来实现自动同步数据,如今已有更好的开源软件来代替使用crond了,那就是lsyncd( Live Syncing (Mirror) Daemon),它的工作原理:监视本地(rsync client)的目录,当源数据有文件或目录更新时,更新本地文件或目录到远端机器(rsync server),保持实时文件同步,但是它更新数据时需要远端rsync server运行rsync demon
一、配置环境
系统版本CentOS 6.5
客户端(目标):rsync(接收同步资源服务器)
服务端(源):lsyncd(发送资源服务器)
二、客户端安装
1. 安装rsync
1.1.1.yum install rsync
默认情况下rsync已安装检查安装
rpm qa|grep rsync
如果没有,运行以下命令安装:
#yum install rsync
1.1.2.检查rsync 运行状态
chkconfig --list rsync
rsync off (默认为开启)
1.1.3.在xinetd配置中打开rsync服务
[root@node2 ~]# vi /etc/xinetd.d/rsync
disable = no ## 默认yes 改成 no
1.1.4.再次检查rsync状态
chkconfig --list rsync
rsync on(已开启服务)
1.1.5. 确认xinetd服务开启
[root@node2 ~]# chkconfig --level 345 xinetd on
启动xinetd
[root@node2 ~]# service xinetd start
Starting xinetd: [ OK ]
2、配置rsyncd
2.1.编辑配置文件
root@node2 ~]#mkdir /data/logs/sync/ -p
root@node2 ~]# vi /etc/rsyncd.conf
log file = /data/logs/sync/rsyncd.log
pid file = /data/logs/sync/rsyncd.pid
lock file = /var/run/rsync.lock
use chroot = yes
[www]
path = /data/www
hosts allow = 192.168.0.211 (服务端ip)
uid = www
gid = www
read only = false
2.2.重启服务
service xinetd restart
2.3确认873端口监听
[root@node2 ~]# netstat -anp | grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 3169/xinetd
2.4建立资源同步目录
mkdir /data/www –p
chown www:www /data/www
三、服务器端安装
1、安装lsyncd:
1.1.安装lsyncd
需要lua支持。
安装服务:lsyncd(注意:阿里云yum源epel有该服务,没有的话需要安装(yum -y install epel-release)
yum install lua lsyncd
1.2建立配置文件lsyncd.conf
[root@node1~]#mkdir /data/logs/sync/ -p
[root@node1~]# vi /etc/lsyncd.conf
settings {
logfile = "/data/logs/sync/lsyncd.log",
statusFile = "/data/logs/sync/lsyncd.stat",
statusInterval =1,
}
sync{
default.rsync,
source="/data/www/",
target="192.168.0.212::www",
exclude = { ".*", "*.log" },
excludeFrom="/etc/rsync_exclude.lst",
init=false,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true
}
}
说明:
/data/www/ #要实时同步的目录
192.168.0.212 #要实时同步到的远端机器即接收服务器地址。
www #对应server端192.168.0.211的rsync的tag
exclude = { ".*", "*.log" } #排除不需要同步的文件
excludeFrom="/etc/rsync_exclude.lst",#设置排除不需要同步的文件的列表,可以不需要同步的文件,文件夹写在rsync_exclude.lst中,文件夹目录相对于:/data/www
如果要同步多台就在这个文件中每同步一台加一项如下:
sync{
default.rsync,
source="/data/www/",
target="192.168.0.212::www",
init=galse,
rsyncOps={"-avz","--delete"}
}
sync{
default.rsync,
source="/www/html/",
target="192.168.0.213::www",
init=galse,
rsyncOps={"-avz","--delete"}
}
1.3设置不需要同步的文件或文件夹
# vim /etc/rsync_exclude.lst
conf
app/log
1.4建立资源同步目录
mkdir /data/www -p
1.5配置max_user_watches
echo 65535000 > /proc/sys/fs/inotify/max_user_watches
echo fs.inotify.max_user_watches=65535000 >> /etc/sysctl.conf
1.6启动lsyncd
[root@node1~]# /etc/init.d/lsyncd start 或service lsyncd start
确认lsyncd是否启动
[root@node1~]# /etc/rc.d/init.d/lsyncd status 或service lsyncd status
lsyncd (pid 21125) is running...
把lsyncd加入到随机器启动当中
[root@node1~]# chkconfig lsyncd on
2.同步测试
在服务器端(192.168.0.211)上的目录/data/wwwx下新建文件test-server
[root@node1 www]#cd /data/www
[root@node1 www]# touch test-server
[root@node1 www]# ll
total 0
-rw-r--r-- 1 root root 0 Jan 23 14:52 test-server
[root@node1 www]#
查看日志,观察同步过程
[root@node1 www]# tail -f /data/logs/sync/lsyncd.log
Sat Jan 23 14:56:13 2016 Normal: Calling rsync with filter-list of new/modified files/dirs
/test-server
/
sending incremental file list
./
test-server
sent 130 bytes received 30 bytes 13.91 bytes/sec
total size is 0 speedup is 0.00
Sat Jan 23 14:56:24 2016 Normal: Finished a list after exitcode: 0
如上,server端新增加的文件test-server已经被同步到客户端上
在客户端192.168.0.212查看:
root@node2 www]# ll
total 0
-rw-r--r-- 1 www www 0 Jan 23 14:55 test-server
[root@node2 www]#
注意:lsyncd只同步lsyncd服务启动后,所配置目录/data/www 所发生的更新,所以配置之前请保证需要同步的两边一致。
四、服务器端和客户端互相同步
参照如上配置,在客户端部署服务器端(也就是lsyncd)相关设置,在服务器部署原来的客户端相关配置(也就是rsync)
北丐洪七公--Jeff
Dignity comes from strength, strength comes from struggle!
本文版权归作者和博客园共有,欢迎转载,未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。