inotify+rsync 实现实时同步

实现实时同步(也就是源一变化,它就会触发同步)

inotify+rsync


 

源服务器:172.16.12.167

同步服务器:172.16.12.169


先操作同步服务器

1设置SELINUX

vi /etc/selinux/config #编辑防火墙配置文件

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存,退出

setenforce 0  #立即生效

2、开启防火墙tcp 873端口(Rsync默认端口)

vi /etc/sysconfig/iptables #编辑防火墙配置文件

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

:wq! #保存,退出

/etc/init.d/iptables restart #最后重启防火墙使配置生效

3安装Rsync服务端 

yum -y install rsync

4安装xinetd ,把服务托管给xinetd

yum install rsync xinetd #安装

vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync

disable = no #修改为no

:wq! #保存退出

service xinetd start 启动xinetd

创建rsyncd.conf配置文件

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass
motd file = /etc/rsyncd.Motd
[web]
path = /data/backup
comment = web
uid = root
gid = root
port=873
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = jerry
:wq! #保存退出


配置项说明

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启动时欢迎信息页面文件位置(文件内容自定义)

[web] #自定义名称

path =/data/backup#rsync服务端数据目录路径 此路径必须要在同步服务器中存在,不然会报

@ERROR: chdir failed
rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

comment = web #模块名称与[web]自定义名称相同

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 =jerry#执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开

hosts allow = 192.168.21.129  #允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开 可以不写

hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开 可以不写

 

5.创建用户认证文件

vi /etc/rsync.pass #配置文件,添加以下内容

jerry:123456  #格式,用户名:密码,可以设置多个,每行一个用户名:密码

:wq!  #保存,退出

chmod 600 /etc/rsyncd.conf  #设置文件所有者读取、写入权限

chmod 600 /etc/rsync.pass  #设置文件所有者读取、写入权限

service xinetd restart #重启xinetd

 





 在源服务器上操作:172.16.12.167

1设置SELINUX

vi /etc/selinux/config #编辑防火墙配置文件

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存,退出

setenforce 0  #立即生效

2、开启防火墙tcp 873端口(Rsync默认端口)

vi /etc/sysconfig/iptables #编辑防火墙配置文件

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

:wq! #保存,退出

/etc/init.d/iptables restart #最后重启防火墙使配置生效

3安装Rsync服务端 

yum -y install rsync

4安装xinetd ,把服务托管给xinetd

yum install rsync xinetd #安装

vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync

disable = no #修改为no

:wq! #保存退出

service xinetd start 启动xinetd

5、创建认证密码文件

vi /etc/passwd.txt  #编辑文件,添加以下内容

123456 #密码

:wq! #保存退出

 


 测试下RSYNC是否能同步


试源服务器172.16.12.167到同步服务器172.16.12.169之间的数据同步

mkdir /home/test/cheshi #在源服务器上创建测试文件夹,然后在源服务器运行下面命令

rsync -avH  --port=873 --progress --delete  /home/test jerry@172.16.12.169::web --password-file=/etc/passwd.txt 注意空隔,如果多一个空隔可能会报错。,本人在测试中,因为用户名和前面的目录有两个空隔,结果报用户名没有授权





安装Inotify-tools工具,实时触发rsync进行同步

是监控源服务器,所有在源服务器上安装inotify-tools

1、查看服务器内核是否支持inotify

ll /proc/sys/fs/inotify   #列出文件目录,出现下面的内容,说明服务器内核支持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

备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核

CentOS 5.X 内核为2.6.18,默认已经支持inotify

2、安装inotify-tools

yum install make  gcc gcc-c++  #安装编译工具

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

tar zxvf inotify-tools-3.14.tar.gz -C /usr/local/src #解压

cd /usr/local/src inotify-tools-3.14 #进入解压目录

./configure --prefix=/usr/local/inotify  #配置

make  #编译

make install  #安装

--安装完后,就会产生下面两个命令

/usr/local/bin/inotifywait

/usr/local/bin/inotifywatch

# /usr/local/bin/inotifywait --help

/usr/local/bin/inotifywait: error while loading shared libraries: libinotifytools.so.0: cannot open shared object file: No such file or directory

如果报错,找不到那个库,这个库实际上是在/usr/local/lib下的

解决方法

# echo /usr/local/lib/  > /etc/ld.so.conf.d/abc.conf

# ldconfig

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 /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

/usr/local/bin/inotifywait -mrq  -e modify,delete,create,attrib,move /home/test |while read events
do
                rsync -avH  --port=873 --progress --delete  /home/test jerry@172.16.12.169::web --password-file=/etc/passwd.txt
                echo "`date +'%F %T'`出现事件events" >> /var/log/rsync.log 2>&1
done

 

chmod +x /usr/local/inotify/rsync.sh   #添加脚本执行权限

脚本参数说明:


srcdir=/home/test  #源服务器同步目录

dstdir=web   #目标服务器rsync同步目录模块名称

rsyncuser=jerry  #目标服务器rsync同步用户名

rsyncpassdir=/etc/passwd.txt  #目标服务器rsync同步用户的密码在源服务器的存放路径

dstip="172.16.12.169"  #目标服务器ip,多个ip用空格分开

/tmp/rsync.log  #脚本运行日志记录


可以运行下rsync.sh执行下,看是否能成功执行

 

6、设置脚本开机自动执行

vi /etc/rc.d/rc.local  #编辑,在最后添加一行

 nohup  /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本

:wq!  #保存退出

--使用nohup挂起到后台执行,终端关闭,这个进程也不会被关闭

7、测试inotify实时触发rsync同步脚本是否正常运行

在源服务器172.16.12.167上创建文件

mkdir /home/test

重新启动源服务器:172.16.12.167

等系统启动之后,查看两台目标服务器172.16.12.169的/data/backup下是否有test文件夹

 

至此,Linux下Rsync+Inotify-tools实现数据实时同步完成。

转载于:https://my.oschina.net/bibo/blog/719190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值