rysnc--远程同步
rsync
一款快速增量备份工具
Remote Sync,远程同步
支持本地复制,或者与其他SSH、rsync主机同步, 功能类似于scp,但是要比scp丰富。
官方网站: http//:rsync.samba.org
特点
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时 间、软硬接等等,做到特殊权限即可安装。
3、快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的宽带。
4、安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。支持匿名传输,以方便进行网站镜像。
环境
操作系统:Centos 7us
目标服务器:192.168.232.10
源服务器:192.168.232.20
目的:把源服务器上/a目录实时同步到目标服务器的/b目录下。
关闭SELinux,关闭防火墙
vim /etc/selinux/config
->SELINUX=disabled
setenforce 0 #立即生效
systemctl stop/disable firewalld
安装rsync
yum -y install rsync xinetd
systemctl start rsyncd
#注意:两台服务器都需要做
源服务器:192.168.232.10
打开配置文件/etc/rsyncd.conf
创建rsync服务端数据⽬录路径和模块
mkdir /home_test
touch /home_test/home_test
创建用户认证文件
设置⽂件权限
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.pass
重启rsync
目标服务器192.168.232.20
创建密码⽂件
vim /etc/passwd.txt
123456 #密码
注意:这⾥的密码和客户端的密码是⼀样的
chmod 600 /etc/passwd.txt #设置⽂件权限,只设置⽂件所有者具有读取、写⼊权限
配置完成
rsync -avH --port=873 --progress --delete /home_test user1@192.168.232.10::home_test --password-file=/etc/passwd.txt
/home_test 是指服务端数据⽬录
user1 是客户端设置好的账号
home_test 是指客户端设置的模块名称
rsync 不能实时的去监测、同步数据,虽然它可以通过 linux 守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。可以使用 rsync+inotify 的组合来解决,可以实现数据的实时同步
安装Inotify-tools⼯具,实时触发rsync进⾏同步
1、查看服务器内核是否⽀持inotify (下⾯输出说明⽀持)
ll /proc/sys/fs/inotify
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
2、安装inotify-tools
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify
make && make install
设置系统环境变量,添加软连接
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
ln -s /usr/local/inotify/lib/libnotifytools.so.0 /usr/lib64
修改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"
参数说明
max_queued_events:
inotify队列最⼤度,如果值太⼩,会出现"** Event Queue Overflow **"错误,导致监控⽂件不准确
max_user_watches:
要同步的⽂件包含多少⽬录,可以⽤:find /home_test -
type d | wc -l 统计,必须保证max_user_watches值⼤于统
计结果(这⾥/home_test为同步⽂件⽬录)
max_user_instances:
每个⽤户创建inotify实例最⼤值
创建脚本,实时触发rsync进⾏同步
vim /usr/local/inotify/rsync.sh 图片.pngsh /usr/local/inotify/rsync.sh
图片.png
设置脚本开机自动执行
vim /etc/rc.d/rc.local #编辑,在最后添加⼀⾏
sh /usr/local/inotify/rsync.sh &
#设置开机自动在后台运行脚本
chmod +x /etc/rc.d/rc.local
systemctl enable /etc/rc.d/rc.local
错误排查
问题⼀: @ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因: 服务器端的⽬录不存在或⽆权限,创建⽬录并修正权限可解决问题。
问题⼆: @ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因: 服务器端该模块(tee)需要验证⽤户名密码,但客户端没有提供正确 的⽤户名密码,认证失败。 提供正确的⽤户名密码解决此问题。
问题三: @ERROR: Unknown module ‘tee_nonexists' rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因: 服务器不存在指定模块。提供正确的模块名或在服务器端修改成你要 的模块以解决问题。