rsync+inotify实现在Linux上文件实时同步
首先下载好两个工具:
rsync地址: http://rsync.samba.org/download.html
inotify-tools: http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
这次的实验主要有两台机器,172.16.54.114和172.16.54.115,我们把115做为源服务器,114做为目标服务器
主要是把115上/home/md中的所有数据实时同步到114上的/home/md中
1,先关闭防火墙
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
setenforce 0 #立即生效
2,查看端口是否被占用(直接在命令行输入)及安装
netstat –apn | grep 873
安装rsync,在两台服务器上都要进行这个步骤
首先将下载的包解压
tar -xzvf rsync-3.1.0.tar.gz
解压后进入目录
./configure --prefix=/usr/local/rsync
#说明安装在/usr/local/rsync目录中
在这一步之前要安装相对就的gcc和gcc-c++
make
make install
安装完毕
chkconfig rsync on #随系统启动
这个只在114上做
创建rsync配置文件rsync.conf
vi /etc/rsyncd.conf #创建配置文件,添加以下代码
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid #pid文件的存放位置
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.pass #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd #rsync启动时欢迎信息页面文件位置(文件内容自定义)
[md] #自定义名称
path = /home/md/ #rsync服务端数据目录路径
comment = md #模块名称
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
port=873 #默认端口
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = md #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 172.16.54.114 #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
#hosts deny = 218.234.1.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开(这个比较随便,也可以没有)
:wq! #保存,退出
创建用户认证文件
vi /etc/rsync.scrt #配置文件,添加以下内容
md:123456 #格式为 用户:密码,如果是多个,可以一行一个
:wq! #保存,退出
chmod 600 /etc/rsyncd.conf #设置文件所有者读取、写入权限
chmod 600 /etc/rsync.scrt #设置文件所有者读取、写入权限
在此,我们普及一个问题,我们先进入/etc/xinetd.d文件中,可以看到rsync这个文件,说明rsync是由xinetd管理,可以通过xinetd来启动rsync
/etc/init.d/xinetd start #启动
service xinetd stop #停止
service xinetd restart #重新启动
------------------------只在114上进行的到此为止--------------------
以下只到115上进行
vi /etc/rsync.scrt #编辑文件,添加以下内容
123456 #密码
:wq! #保存退出
chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可
inotify-tools下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
上传inotify-tools-3.14.tar.gz到/usr/local/src目录下
cd /usr/local/src
tar zxvf 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"
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/www.osyunwei.com -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/www.osyunwei.com为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
5、创建脚本,实时触发rsync进行同步
vi /usr/local/inotify/rsync.sh #编辑,添加以下代码
#!/bin/sh
srcdir=/home/md/
dstdir=buspos
rsyncuser=buspos
rsyncpassdir=/etc/rsync.scrt
dstip="172.16.54.114"
for ip in $dstip
do
rsync -avH --port=873 --progress --delete $srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir //次数的password-file是服务端的密码文件
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 $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 #添加脚本执行权限
6、设置脚本开机自动执行
vi /etc/rc.d/rc.local #编辑,在最后添加一行
sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本
:wq! #保存退出
启动脚本
nohup . /usr/local/inotify/rsync.sh &
关闭了窗口也没事,已在后台运行下次开机自动启动
也可以参照此博客:http://dl528888.blog.51cto.com/2382721/771533
还有这个,建议参考这个文档:http://ixdba.blog.51cto.com/2895551/580280/