• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

rsync+inotify实现文件实时同步(二)

Linux admin 3年前 (2016-07-11) 1243次浏览 0个评论 扫描二维码

SUA[4JKJ~P]2XC[D(N3VZMO

环境说明

主机名 IP 说明
server 172.16.10.10 服务端
client 172.16.10.100 客户端
1
2
3
4
[root@server ~]# uname -a
Linux server 2.6.32-573.22.1.el6.x86_64 #1 SMP Wed Mar 23 03:35:39 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[root@server ~]# cat /etc/redhat-release 
CentOS release 6.7 (Final)

配置 rsync 服务

rsync 服务端配置在172.16.10.10服务器上面。

安装 rsync 服务

1
[root@server ~]# yum -y install rsync

添加 rsync 服务的用户

1
2
3
[root@server ~]# useradd -M -s /sbin/nologin rsync
[root@server ~]# id rsync
uid=501(rsync) gid=501(rsync) groups=501(rsync)

创建/etc/rsyncd.conf 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[root@server ~]# vim /etc/rsyncd.conf
#rsync_config_______________start
uid = rsync                             #指定用户
gid = rsync                             #指定组
use chroot = no
max connections = 200                   #最大链接数
timeout = 300                           #超时时间
pid file = /var/run/rsyncd.pid          #PID 存放路径
lock file = /var/run/rsync.lock         #锁文件
log file = /var/log/rsyncd.log          #日志文件存放路径
[ansheng]                               #模块,链接的标签
path = /ansheng/                        #共享的路径
ignore errors                           #忽略错误
read only = false                       #只读为假,可写
list = false                            #不允许远程列表,不能看文件内容
hosts allow = 172.16.10.0/24            #允许
hosts deny = 0.0.0.0/32                 #拒绝
auth users = rsync_backup               #虚拟用户
secrets file = /etc/rsync.password      #密码文件存放路径 user:password
#rsync_config_______________end

生成密码文件

1
2
3
[root@server ~]# echo "rsync_backup:ansheng" > /etc/rsync.password
[root@server ~]# cat /etc/rsync.password
rsync_backup:ansheng

为密码文件设置权限

1
[root@server ~]# chmod 600 /etc/rsync.password

创建共享的目录并授权 rsync 管理

1
2
3
4
[root@server ~]# mkdir /ansheng
[root@server ~]# chown -R rsync.rsync /ansheng/
[root@server ~]# ll -d /ansheng/
drwxr-xr-x 2 rsync rsync 4096 Apr 26 14:19 /ansheng/

启动 rsync 服务并检查

1
2
3
4
5
6
7
8
9
10
[root@server ~]# rsync --daemon
[root@server ~]# ps -ef | grep "rsync" | grep -v "grep"
root       1155      1  0 14:20 ?        00:00:00 rsync --daemon
[root@server ~]# netstat -tulnp | grep 873
tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      1155/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1155/rsync
[root@server ~]# lsof -i :873
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rsync   1155 root    4u  IPv4  10943      0t0  TCP *:rsync (LISTEN)
rsync   1155 root    5u  IPv6  10944      0t0  TCP *:rsync (LISTEN)

加入开机自启动

1
2
3
[root@server ~]# echo "/usr/bin/rsync --daemon" >>/etc/rc.local
[root@server ~]# tail -1 /etc/rc.local 
/usr/bin/rsync --daemon

配置 rsync 客户端

客户端172.16.10.100配置 rsync 客户端实现推送功能。

生成链接服务器需要的密码文件

1
[root@client ~]# echo "ansheng" > /etc/rsync.password

设置密码文件权限

1
[root@client ~]# chmod 600 /etc/rsync.password

文件同步测试

拉取

1
[root@client ~]# rsync -avz rsync_backup@172.16.10.10::ansheng /rsync_client/ --password-file=/etc/rsync.password

推送

1
[root@client ~]# rsync -avz /tmp/ rsync://rsync_backup@172.16.10.10/ansheng/ --password-file=/etc/rsync.password

推送的时候排单个或多个文件

排除单个文件

1
[root@client ~]# rsync -avz --exclude=rsync_test.txt /tmp/ rsync_backup@172.16.10.10::ansheng --password-file=/etc/rsync.password

排除多个文件

1
[root@client ~]# rsync -avz --exclude={rsync_exclu.txt,rsync_test.txt} /tmp/ rsync_backup@172.16.10.10::ansheng  --password-file=/etc/rsync.password

完全同步

1
[root@client ~]# rsync -avz --delete /rsync_client/ rsync_backup@172.16.10.10::ansheng --password-file=/etc/rsync.password

完全同步会把服务端和本地端的文件保持一致

通道模式

一般配合 ssh key 使用

1
[root@client ~]# rsync -avzP -e 'ssh -p 22' /etc root@172.16.10.10:/tmp

rsync 客户端配置 inotify

inotify 监控 rsync 客户端上面的文件,一旦有变化就上传到 rsync 服务端。

查看当前系统是否支持 inotify

在开始安装 inotify-tools 前请先确认你的 Linux 内核是否啊到了 2.6.13,并且在编译时开启 CONFIG_INOTIFY 选项,也可以通过以下命令检测。

1
2
3
4
5
6
7
[root@client ~]# uname -r
2.6.32-573.22.1.el6.x86_64
[root@client ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Apr 26 14:42 max_queued_events
-rw-r--r-- 1 root root 0 Apr 26 14:42 max_user_instances
-rw-r--r-- 1 root root 0 Apr 26 14:42 max_user_watches

下载 inotify 源码包

1
2
[root@client ~]# cd /usr/local/src/
[root@client src]# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

编译安装 inotify

1
2
3
4
5
6
[root@client src]# tar xf inotify-tools-3.14.tar.gz 
[root@client src]# cd inotify-tools-3.14
[root@client inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14
[root@client inotify-tools-3.14]# make && make install
[root@client inotify-tools-3.14]# cd ../
[root@client src]# ln -s /usr/local/inotify-tools-3.14 /usr/local/inotify
1
2
3
4
5
6
7
[root@client src]# cd /usr/local/inotify
[root@client inotify]# ll
total 16
drwxr-xr-x 2 root root 4096 Apr 26 14:45 bin			#inotify 执行命令(二进制)
drwxr-xr-x 3 root root 4096 Apr 26 14:45 include		#inotify 程序所需用的头文件
drwxr-xr-x 2 root root 4096 Apr 26 14:45 lib			#动态链接的库文件
drwxr-xr-x 4 root root 4096 Apr 26 14:45 share			#帮助文档

脚本自动监控

当在/rsync_client目录下创建文件的时候会自动推送到 rsync 服务端

1
2
3
4
5
6
7
8
[root@client ~]# cat inotify.sh 
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq  --format '%w%f' -e create,close_write,delete /rsync_client \
|while read file
  do
    cd //rsync_client &&\
    rsync -az ./ --delete rsync_backup@172.16.10.10::ansheng --password-file=/etc/rsync.password
  don

Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明rsync+inotify 实现文件实时同步(二)
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!