Centos7搭建rsync+inotify远程同步
rsync的客户端服务器:系统为centos7 ,安装rsync+inotify
rsync服务端服务器:系统为centos7 ,只安装rsync即可
注意:在服务器上实际操作时,配置文件里的注释最好全删掉
rsync服务端服务器安装rsync
关闭防火墙和selinux
# 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#关闭selinux
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
getenforce 0
#检查是否已安装 rsync
rpm -qa|grep rsync
# 没有就安装
#yum -y install rsync
配置rsyncd.conf文件
vim /etc/rsyncd.conf
# 拥有模块对应路径的读写权限的系统用户
uid = root
gid = root
use chroot = no ##禁锢在源目录默认端口
ignore errors #表示出现错误忽视错误
#address = 192.168.x.x ##监听地址(本机的IP)
port 873 ##监听端口
log file = /var/log/rsyncd.log ##日志文件位置,启动rsync后自动产生,无需提前创建
pid file = /var/run/rsyncd.pid ##进程ID位置
lock file=/var/run/rysnc.lock #支持max connections参数的锁文件
motd file=/etc/rsyncd.motd #rsync启动时保存欢迎信息的文件
[files] ##共享模块名称
path=/usr/local/app/kjqk/files ##源目录的实际路径
comment= this a test module #注释
read only=no #是否为只读
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #同步时不再压缩的文件类型
list=no #不显示rsync服务端资源列表
max connections=200 #最大连接数
timeout=600 #超时时间
auth users=tom #授权用户(这个是虚拟的用户,与系统用户无关,与secrets file指定的认证文件配置内容对应),可以设置多个,用英文逗号隔开
secrets file=/etc/rsync.pass #用户认证配置文件,里面存放用户名称和密码,必须手动创建这个文件
hosts allow=10.10.10.80,10.10.10.111 #允许访问的客户机地址。可以设置多个,用英文逗号隔开
创建用户认证文件
rsync服务端认证文件的格式为:<虚拟用户名>:<密码>
如果配置多个用户,各写一行
用户名tom,密码passwd110
echo 'tom:passwd110' > /etc/rsync.pass
# 检查一下
cat /etc/rsync.pass
设置文件权限
chmod 600 /etc/rsync*
# 检查一下
ll /etc/rsync*
启动rsync服务并设置开机自启动
# 启动
systemctl start rsyncd
# 设置开机自启
systemctl enable rsyncd
# 查看运行状态
systemctl status rsyncd
在rsync客户端服务器安装rsync+inotify
关闭防火墙与SELINUX
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
# 关闭 selinux
sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/sysconfig/selinux
setenforce 0
安装rsync
yum -y install rsync
创建认证密码文件
echo 'passwd110' > /etc/rsync.pass
# 检查一下
cat /etc/rsync.pass
设置文件权限,只设置文件所有者具有读取、写入的权限
chmod 600 /etc/rsync.pass
# 检查一下
ll /etc/rsync.pass
在rsync客户端服务器上进行测试
rsync 命令格式:rsync [OPTION]... SRC DEST
添加测试文件
` touch /usr/local/app/kjqk/files/{a,b,c,d}.test
本机路径/usr/local/app/kjqk/files下的内容(不包含files这一级) 同步到 rsync服务端[email protected]在/etc/rsyncd.conf配置的模块files对应的路径下
rsync -avH --port=873 --progress /usr/local/app/kjqk/files/ [email protected]::files/ --password-file=/etc/rsync.pass
在目标服务器上查看对应路径下,如果出现刚才本机上添加的文件,说明数据同步成功
安装inotify-tools工具,实时触发rsync同步
# 检查服务器内核是否支持inotify
ll /proc/sys/fs/inotify/
如果有这三个max开头的文件则表示服务器内核支持inotify
-rw-r--r-- 1 root root 0 7月 4 15:14 max_queued_events
-rw-r--r-- 1 root root 0 7月 4 15:14 max_user_instances
-rw-r--r-- 1 root root 0 7月 4 15:14 max_user_watches
安装
yum -y install make gcc gcc-c++
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar zxf inotify-tools-3.14.tar.gz && cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-3.14
make && make install
配置inotify
-
修改环境变量PATH
vim /etc/profile
export PATH=$PATH:/usr/local/-3.14/bin
source /etc/profile -
导出inotify库文件
echo "/usr/local/-3.14/lib" > /etc/ld.so.conf.d/inotify.conf
ldconfig
-
导出inotify头文件
ln -s /usr/local/-3.14/include/ /usr/include/inotify
-
修改inotify内核参数(默认inotify参数太小)
# /etc/sysctl.conf
sysctl -w fs.inotify.max_queued_events=9999999
sysctl -w fs.inotify.max_user_watches=99999999
sysctl -w fs.inotify.max_user_instances=65535
测试
# 执行这个命令后,在打开一个此服务器的shell终端 或者 别的方式 在 /var/tests目录下添加文件,回到执行这个命令的终端看有没有输出内容,有输出就ok
inotifywait -mrq -e modify,create,move,delete /var/tests/
写同步脚本
/usr/local/inotify-3.14/inotify_rsync.sh
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /usr/local/app/kjqk/files"
RSYNC_CMD=" rsync -avH --port=873 --progress /usr/local/app/kjqk/files/ [email protected]::files/ --password-file=/etc/rsync.pass"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
$RSYNC_CMD
done
检查脚本
bash -x /usr/local/inotify-3.14/inotify_rsync.sh
启动脚本
nohup bash /usr/local/inotify-3.14/inotify_rsync.sh &
ps -ef|grep inotify
设置脚本开机自动启动
chmod +x /etc/rc.d/rc.local
ll /etc/rc.d/rc.local
echo 'nohup /bin/bash /usr/local/inotify-3.14/inotify_rsync.sh' >> /etc/rc.d/rc.local
tail /etc/rc.d/rc.local
随便在目录files里边建点文件,到目标服务器上查看是否把新生成的文件自动传上去了