共计 7090 个字符,预计需要花费 18 分钟才能阅读完成。
Rsync 的文件同步实现
一、rsync 简介
Rsync(remote synchronize)是一个远程数据同步工具,简要的概括就是主机于主机之间的文件目录数据的一个同步。
总的来说是一个容错、可靠、高效的文件同步工具。
二、环境需求(虚拟机上面搭建的环境)
系统:ceotos 6.5 内核:2.6.32-431.el6.x86_64
主机 A:192.168.0.244/24
主机 B:192.168.0.144/24
rsync-3.1.2.tar.gz
三、搭建 rsync
rsync 在主机 A 上面配置:
注意:rsync 最重要的 2 个文件 1、rsyncd.conf 配置文件
2、rsyncd.password 用户密码文件
其他的 rsyncd.motd 这些是次要的,这只是一个显示页面信息,类似于访问一个服务器的时候提示的一些广告似的信息。
本次操作中我在主机 A 的 etc 目录下面直接创建了上面三个文件。
-rw-r--r-- 1 root root 443 Aug 16 10:49 /etc/rsyncd.conf | |
-rw-r--r-- 1 root root 252 Aug 16 10:44 /etc/rsyncd.motd | |
-rw-r--r-- 1 root root 18 Aug 16 10:44 /etc/rsyncd.password |
rsync.passwd:
nowview:nowcaster
rsync.motd:(打广告了)
***************************************** | |
* * | |
* Rsync * | |
* * | |
* * | |
***************************************** |
rsyncd.conf: 这里我只是主要测试这个文件同步的功能,你们需要其他更多的功能的话,可以自行添加相关参数模块即可,可以参考:
http://www.linuxidc.com/Linux/2015-10/123842.htm
uid = nowview | |
gid = nowview | |
max connections = 200 | |
timeout = 300 | |
pid file = /var/run/rsyncd.pid | |
lock file = /var/run/rsync.lock | |
log file = /var/log/rsyncd.log | |
motd file = /etc/rsyncd.motd | |
[ | ]|
path = /home/backup | |
ignore errors | |
read only = false | |
list = false | |
hosts allow = * | |
hosts deny = 0.0.0.0/32 | |
auth users = nowview | |
secrets file = /etc/rsyncd.password | |
exclude = www/ GR068/ | |
comment = loading..... |
找一下 rsync 的主程序,一般安装在了 /usr/local/bin/rsync
cp -a /usr/local/bin/rsync /usr/bin/rsync 放到 bin 下面
下面使用 daemon 启动 rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
ps 看一下进程,rsync 的默认端口是 873
[root@主机 A -144 home]# ps -ef |grep rsync | |
root 5835 1 0 10:51 ? 00:00:00 /usr/bin/rsync --daemon --config=/etc/rsyncd.conf | |
root 5864 1323 0 11:08 pts/1 00:00:00 grep --color rsync |
[root@主机 A -144 home]# netstat -lantup |grep 873 | |
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5835/rsync | |
tcp 0 0 :::873 :::* LISTEN 5835/rsync |
继续。。。
想开机启动的话,把
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf 添加到 /etc/rc.d/rc.local 下面即可 注意:1、这个 rsyncd.passwd 文件 的所属组是 root 如果你的当前用户比如是 rsync 那就是改成 rsync 即可
chown rsync.rsync /etc/rsyncd.password
2、rsyncd.passwd 的权限改为 600 否则密码无法访问
[ | ]|
[ | ]|
-rw------- 1 root root 18 Aug 16 10:44 /etc/rsyncd.password | |
[ | ]
在主机 A 添加 nowview 用户
useradd nowview
以上在主机 A 配置全部完毕!
四、测试
下面在主机 B 上面进行测试。
曾经在测试的时候出现过形形色色的问题(粗心 –),我把这些问题归纳在一起。
注意:1、为了方便测试,我就把主机 A 和主机 B 的防火墙直接关闭掉,如果你对这方面有要求的话,就直接把 873 这个端口从两边打通即可。
2、主机 B 不用再做任何的配置和操作,只要保持连通性即可。除非你想免去密码访问,每次都输入密码使你心烦,那就在 etc 下面跟主机 A 一样创建一个密码文档,注意了。这个密码文档只需要填写密码即可。这个密码文档一样是 600 权限!
下面做简单的访问
[root@主机 B -244 ~]# rsync -avzp nowview@192.168.0.144:: | |
***************************************** | |
* * | |
* Rsync * | |
* * | |
* * | |
***************************************** |
下面测试,免除密码访问
rsync -avzp --delete nowview@192.168.0.144::backup /backup244/ --password-file=/etc/rsyncd.password
在主机 B 的根目录下面已经创建了 backup244 的备份目录了,现在把主机共享 A 模块(即 /home/backup 目录下的文档,全部备份过来 backup244 目录,免除密码访问,以及有删改的对应主机 A 的删改)
效果如下
主机 A 上面的 20 个文件
[root@主机 A -144 backup]# pwd | |
/home/backup | |
[root@主机 A -144 backup]# for a in `seq 20`;do touch $a.txt;done #创建 20 个文件 | |
[root@主机 A -144 backup]# ll | |
total 0 | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 10.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 11.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 12.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 13.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 14.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 15.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 16.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 17.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 18.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 19.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 1.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 20.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 2.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 3.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 4.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 5.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 6.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 7.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 8.txt | |
-rw-r--r-- 1 root root 0 Aug 16 14:33 9.txt |
主机 B 的效果如下
[root@主机 B -244 /]# rsync -avzp --delete nowview@192.168.0.144::backup /backup244/ --password-file=/etc/rsyncd.password | |
***************************************** | |
* * | |
* Rsync * | |
* * | |
* * | |
***************************************** | |
receiving incremental file list | |
deleting 7897798798798789797/ | |
deleting GGGGGGGGG | |
deleting 4564656566 | |
./ | |
1.txt | |
10.txt | |
11.txt | |
12.txt | |
13.txt | |
14.txt | |
15.txt | |
16.txt | |
17.txt | |
18.txt | |
19.txt | |
2.txt | |
20.txt | |
3.txt | |
4.txt | |
5.txt | |
6.txt | |
7.txt | |
8.txt | |
9.txt | |
sent 410 bytes received 988 bytes 2796.00 bytes/sec | |
total size is 0 speedup is 0.00 | |
[root@主机 B -244 /]# ls /backup244/ | |
10.txt 12.txt 14.txt 16.txt 18.txt 1.txt 2.txt 4.txt 6.txt 8.txt | |
11.txt 13.txt 15.txt 17.txt 19.txt 20.txt 3.txt 5.txt 7.txt 9.txt |
可以看到,全部文件备份过来了。
(-azvp 参数是什么意思,参考上面的文档,有详细解析)
下面从主机 B 推数据推到服务器上面去(上面的是从主机 A 拉数据过来主机 B)
主机 A 的 /home/backup 目录为空目录
[ | ]|
total 0 | |
[ | ]|
/home/backup |
主机 B 下面有一个文件和一个目录
[ | ]|
总用量 8 | |
-rw-r--r--. 1 root root 1857 7 月 21 13:55 OO.txx | |
drwxr-xr-x 2 root root 4096 7 月 21 14:04 Work | |
[ | ]|
116K Work/ | |
[ | ]|
/home/backYYY |
下面开始推:
[ | ]|
[ | ]
可以看到主机 A 上面的 /home/backup 目录下的情况变化
[ | ]|
/home/backup | |
[ | ]|
total 8 | |
-rw-r--r-- 1 root root 1857 Jul 21 13:55 OO.txx | |
drwxr-xr-x 2 root root 4096 Jul 21 14:04 Work | |
[ | ]|
116K Work/ | |
[ | ]
基本上 rsync 的推拉数据同步测试完毕。
#################################################################
五、总结
报错主要常见种类与解决:
1、rsync: chgrp “/Work/.yum.conf.VOzf5y” (in backup) failed: Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1039) [sender=3.0.6]
这是在客户端(主机 B)备份的时候会出现,文件权限的问题。
解决:把 uid 跟 gid 的改成 root 这是最快解决的途径,要不就是调一下配置文件参数,读写那里。
2、@ERROR: auth failed on module rsync
rsync error: error starting client-server protocol
这种情况其实不仅仅是密码错误会报错,好多情况下它都会报。
解决:检查下面几点:(1)检查配置文件的参数 secrets file 名称有没有打错,密码文件路径有没有错,密码格式主配置的是:用户名:密码 的格式,客户端的只有一个密码没有用户名。
(2)检查服务器有没有配置 auth users = 用户,没配置用户的配置上,共享模块 backup 的路径目录 /home/backup 这个 backup 的权限属性是不是对应 auth users 的用户的。
(3)、认真全面检查一遍配置文件,看到报错 client-server protocol 这个的,一般牵涉的很多问题都有可能
3、password file must not be other-accessible
continuing without password file
解决:密码文档的权限改为 600 有权限属性的最好改为改用户 auth users = 用户
4、No route to host
主机间端口不通啊
解决:要不把 iptables 关闭,要不两边打通 873 端口
5、@ERROR: invalid gid nobody
rsync error: error starting client-server protocol
配置文件报错 gid nobody
解决:这个 gid nobody 在配置文件里面不能这么写,改成所属用户或者直接改 root 吧
总结:一般搞清楚配置文件里面部署的权限,所属组的权限问题。基本上好少报错了,基本上都是权限在报错。其他报错就是粗心大意导致的了。
【上述有错误的地方,希望各位给予指出,感谢】
CentOS 6.5 rsync+inotify 实现数据实时同步备份 http://www.linuxidc.com/Linux/2016-11/137655.htm
rsync+inotify 实现数据的实时同步 http://www.linuxidc.com/Linux/2017-01/139778.htm
rsync+inotify 实现服务器之间文件实时同步详解 http://www.linuxidc.com/Linux/2016-11/137659.htm
Rsync 结合 Inotify 实时同步配置 http://www.linuxidc.com/Linux/2017-02/140877.htm
RSync 实现数据备份 http://www.linuxidc.com/Linux/2017-06/144913.htm
inotify+rsync 实现数据实时同步 http://www.linuxidc.com/Linux/2017-10/147901.htm
rsync+inotify 实现数据的实时备份 http://www.linuxidc.com/Linux/2016-11/137630.htm
rsync+inotify 实现数据自动同步 http://www.linuxidc.com/Linux/2017-03/141717.htm
使用 rsync 实现数据实时同步备份 http://www.linuxidc.com/Linux/2017-05/143462.htm
Rsync 的详细介绍:请点这里
Rsync 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-12/149183.htm