您的位置:首页 > 运维架构 > Linux

【2017/8/11】Linux7 rsync+inotify实现服务器之间文件实时同步

2017-08-11 19:43 1181 查看
参考:http://m.blog.csdn.net/linuxlsq/article/details/51768731

参考:http://blog.csdn.net/jerome_s/article/details/48014673

一、什么是rsync?

与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。

二、什么是inotify?

inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

三、配置

环境:用备份服务器去同步主服务器的文件。这个文件的路径/home/

主服务器192.168.158.111

0.放行端口873

firewall-cmd --permanent --zone=public --add-port=873/tcp

firewall-cmd --permanent --zone=public --add-port=873/udp

firewall-cmd --reload

1.rsync安装

tar -zxvf rsync-3.0.9.tar.gz 

cd rsync-3.0.9/

./configure --prefix=/usr/local/rsync

yum -y install gcc

./configure --prefix=/usr/local/rsync

make && make install

2.建立rsync密码认证文件

echo "password123" >/usr/local/rsync/rsync.passwd   

chmod 600 /usr/local/rsync/rsync.passwd

3.inotify安装

tar zxvf inotify-tools-3.14.tar.gz  

cd inotify-tools-3.14  

./configure --prefix=/usr/local/inotify  

make && make install

4.创建rsync复制脚本

vi /tmp/rsync.sh

#!/bin/bash  

host=192.168.158.112   #备份服务器的IP

src=/home/        #同步的路径

des=web        #模块名,对应rsyncd.conf里的

user=webuser 

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files  

do 

/usr/bin/rsync -vzrtopg --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des   

echo "${files} was rsynced" >>/data/logs/rsync.log 2>&1

done

chmod 764 /tmp/rsync.sh

echo "/tmp/rsync.sh" >> /etc/rc.local 

[root@111 home]# mkdir -p /data/logs

[root@111 home]# touch /data/logs/rsync.log

5.运行脚本(在备份服务器rsync启动后)

sh /tmp/rsync.sh &

6.查看或者重启

A.查看重启rsync

netstat -nutlp | grep :873 

然后kill pid再启动

B.查看重启inotify

ps -ef|grep inotify 

kill pid ,启动

备份服务器192.168.158.112

0.放行端口873

firewall-cmd --permanent --zone=public --add-port=873/tcp

firewall-cmd --permanent --zone=public --add-port=873/udp

firewall-cmd --reload

1.rsync安装

tar -zxvf rsync-3.0.9.tar.gz 

cd rsync-3.0.9/

./configure --prefix=/usr/local/rsync

yum -y install gcc

./configure --prefix=/usr/local/rsync

make && make install

2.建立rsync用户和密码认证文件

echo "webuser:password123" > /usr/local/rsync/rsync.passwd 

chmod 600 /usr/local/rsync/rsync.passwd

3.建立rsync配置文件

vi /usr/local/rsync/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 10

strict modes = yes

hosts allow = 192.168.158.111

port = 873

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[web]

path = /home/

ignore errors

read only = no

write only = no

list = false

auth users = webuser

secrets file = /usr/local/rsync/rsync.passwd

4.启动rsync

echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf" >> /etc/rc.local 

rsync --daemon --config=/usr/local/rsync/rsyncd.conf 

四、测试

A.创建同步

目前

[root@111 home]# ls

2  aaa  asd  xiao

[root@111 home]# 

[root@112 home]# ls

[root@112 home]# 

创建

[root@111 home]# touch 123

[root@111 home]# ls

123  2  aaa  asd  xiao

[root@111 home]# 

[root@112 home]# ls

123  2  aaa  asd  xiao

[root@112 home]# 

B.修改同步

目前

[root@111 home]# du 123

0 123

[root@111 home]# 

[root@112 home]# du 123

0 123

[root@112 home]# 

修改

[root@111 home]# echo xpf > 123

[root@111 home]# cat 123

xpf

[root@111 home]# 

[root@112 home]# cat 123

xpf

[root@112 home]# 

C.删除同步

目前

[root@111 home]# ls

123  2  aaa  asd  xiao

[root@111 home]# 

[root@112 home]# ls

123  2  aaa  asd  xiao

[root@112 home]# 

删除

[root@111 home]# rm -rf 123 2

[root@111 home]# ls

aaa  asd  xiao

[root@111 home]# 

[root@112 home]# ls

123  2  aaa  asd  xiao

[root@112 home]# 

这里发现备份服务器里的文件并没有同步被删除,这是我们一般要的效果。

但是如果想要删除同步的话,需要在/tmp/rsync.sh添加参数--delete

vi /tmp/rsync.sh

#!/bin/bash  

host=192.168.158.112 

src=/home/        

des=web 

user=webuser 

/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files  

do 

/usr/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des   

echo "${files} was rsynced" >>/data/logs/rsync.log 2>&1

done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: