服务端:192.168.1.1
客户端:192.168.1.2
一、安装rsync
两种方式:源码安装和rpm安装
1.1源码安装
先去官网下载源码包
# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.1.1.tar.gz # tar zxvf rsync-3.1.1.tar.gz # cd rsync-3.1.1 # ./configure -prefix=/usr/local/rsync # make # make install # ln -s /usr/local/rsync/bin/rsync /usr/local/bin/rsync
1.2.server端配置文件
# vi /usr/local/rsync/rsyncd.conf pid file = /var/run/rsyncd.pid port = 873 pid = root gid = root use chroot = no max connections = 200 #最大连接数 timeout 600 #设置超时时间 lock file = /var/run/rsyncd.lock log file = /var/run/rsyncd.log secrets file = /usr/local/rsync/rsyncd.secrets #密码文件 motd file = /etc/rsyncd.motd [test] path = /test/ #rsync服务端数据目录路径 ignore errors read only = no #改为默认是yes,改为no才可以推送数据否则只能拉取数据 list = false #是否显示rsync服务端资源列表 hosts allow = * #hosts deny = 0.0.0.0/32 auth users root #该用户系统中存在且对后面指定的备份目录拥有权限 comment = ocpyang test
1.3.加载提示文件
#vi /usr/local/rsync/rsyncd.motd ++++++++++++++++++++++++++++++++++++ Wlecome to ocpyang rsync services ++++++++++++++++++++++++++++++++++++
1.4.指定rsync访问的密码,密码不需要和系统账号密码相同
# vi /usr/local/rsync/rsyncd.secrets root:snow01
1.5设置软连接和权限
# ln -s /usr/local/rsync/rsyncd.conf /etc/rsyncd.conf # ln -s /usr/local/rsync/rsyncd.motd /etc/rsyncd.motd # ln -s /usr/local/rsync/rsyncd.secrets /etc/rsyncd.secrets chmod 600 /usr/local/rsync/rsyncd.secrets chown root:root /usr/local/rsync/rsyncd.secrets
1.6启动rsync
# /usr/bin/rsync --daemon --config=/etc/rsyncd.conf 查看端口 # netstat -lntp | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 10689/rsync tcp 0 0 :::873
1.7设置开机启动
# echo "/usr/bin/rsync --daemon --config=/etc/rsyncd.conf" >> /etc/rc.d/rc.local # cat /etc/rc.d/rc.local #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local /usr/bin/rsync --daemon
1.8,命令
#pkill rsync --新建测试文件 #dd if=/dev/zero of=/test/t01.file bs=1M count=50
客户端配置:
2.1.新建客户端密码文件(客户端不带用户名)
#vi /etc/rsyncd.secrets snow01 设置权限 #chmod 600 /etc/rsyncd.secrets
2.2测试
客户端拉取服务端数据
#rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd.secrets root@192.168.1.1::test /test/
客户端推送数据到服务端
#rsync -avzP --delete --password-file=/etc/rsyncd.secrets /test/* root@192.168.1.1::test ++++++++++++++++++++++++++++++++++++ Wlecome to ocpyang rsync services ++++++++++++++++++++++++++++++++++++ sending incremental file list test/ test/a.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=3/5) test/t01.file 52,428,800 100% 127.80MB/s 0:00:00 (xfr#2, to-chk=2/5) test/t02.file 52,428,800 100% 64.60MB/s 0:00:00 (xfr#3, to-chk=1/5) test/t03.file 52,428,800 100% 43.33MB/s 0:00:01 (xfr#4, to-chk=0/5) sent 153,295 bytes received 96 bytes 102,260.67 bytes/sec total size is 157,286,400 speedup is 1,025.40
二、实现实时同步:
1.1、
利用计划任务同步
2.1、
使用inotify-tools工具,实时触发rsync进行同步
1、查看服务器内核是否支持inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
#ll /proc/sys/fs/inotify/ total 0 -rw-r--r-- 1 root root 0 Nov 23 23:54 max_queued_events -rw-r--r-- 1 root root 0 Nov 23 23:54 max_user_instances -rw-r--r-- 1 root root 0 Nov 23 23:54 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
一般5.x以上都支持5.x为2.6.18
2.安装inotify-tools
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar -xf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure --prefix=/usr/local/inotify # make && make install
3.设置系统环境变量,添加软连接
# echo "PATH=/usr/local/inotify/bin:$PATH" >>/etc/profile.d/inotify.sh # source /etc/profile.d/inotify.sh #使设置立即生效 # echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf # ln -s /usr/local/inotify/include /usr/include/inotify
4、修改inotify默认参数(inotify默认内核参数值太小)
查看系统默认参数值
sysctl -a | grep max_queued_events 结果是:fs.inotify.max_queued_events = 16384 sysctl -a | grep max_user_watches 结果是:fs.inotify.max_user_watches = 8192 sysctl -a | grep max_user_instances 结果是:fs.inotify.max_user_instances = 128 修改参数: sysctl -w fs.inotify.max_queued_events="99999999" sysctl -w fs.inotify.max_user_watches="99999999" sysctl -w fs.inotify.max_user_instances="65535" vi /etc/sysctl.conf #添加以下代码 fs.inotify.max_queued_events=99999999 fs.inotify.max_user_watches=99999999 fs.inotify.max_user_instances=65535 :wq! #保存退出
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /test -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/test为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
5、创建脚本,实时触发rsync进行同步
vi /usr/local/inotify/rsync.sh #编辑,添加以下代码
======================================
#!/bin/sh srcdir=/test/* dstdir=test excludedir=/usr/local/inotify/exclude.list rsyncuser=root rsyncpassdir=/etc/rsyncd.secrets dstip="192.168.1.1" for ip in $dstip do #rsync -avH --port=873 --progress --delete --exclude-from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir /usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete --exclude-from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --password-file==$rsyncpassdir done /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir | while read file do for ip in $dstip do #rsync -avH --port=873 --progress --delete --exclude-from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir #/usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete /test/* root@192.168.1.1::test --password-file=/root/rsyncd.secrets /usr/local/rsync-3.1.1/bin/rsync -avzP --port=873 --progress --delete --exclude-from=$excludedir $srcdir $rsyncuser@$ip::$dstdir --password-file==$rsyncpassdir echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1 done done
======================================
chmod +x /usr/local/inotify/rsync.sh #添加脚本执行权限
脚本参数说明:
srcdir=/test #源服务器同步目录
dstdir=test #目标服务器rsync同步目录模块名称
excludedir=/usr/local/inotify/exclude.list
#不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径;
#例如:不需要同步/test目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写
a/
b/b1/
rsyncuser=root #目标服务器rsync同步用户名
rsyncpassdir=/etc/passwd.secrets#目标服务器rsync同步用户的密码在源服务器的存放路径
dstip="192.168.1.1 192.168.1.1" #目标服务器ip,多个ip用空格分开
/tmp/rsync.log #脚本运行日志记录
6、设置脚本开机自动执行
vi /etc/rc.d/rc.local #编辑,在最后添加一行
sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本
:wq! #保存退出
7、测试inotify实时触发rsync同步脚本是否正常运行
如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。
至此,Linux下Rsync+Inotify-tools实现数据实时同步完成。
转载连接地址:
https://blog.csdn.net/zxh2075/article/details/52711945
https://×××w.osyunwei.com/archives/7435.html
转载于:https://blog.51cto.com/hellvenus/2321216