rsync可以用作来linux服务器之间的文件or文件夹同步用,具体不一样介绍(原理我也不大懂O_O),在此的需求是同步keepalived两台nginx配置
在这里,我使用 192.168.1.48 做rsync服务器,192.168.1.47做客户端连接
1.检查 rsync xinetd 进程
检查是否有 rsync xinetd
1 [root@192.168.1.48 ~]$rpm -qa|grep rsync 2 rsync-3.0.6-9.el6_4.1.x86_64 3 [root@192.168.1.48 ~]$rpm -qa|grep xinetd 4 xinetd-2.3.14-40.el6.x86_64
如无
rsync
则yum install rsync
如无xinetd 则
yum install
xinetdnetstat -ntpl|grep 873 查看是否有873端口,rsync默认使用873端口
安装完xinetd ,启动 service xinetd restart
如果服务器开启了防火墙,必须保证端口能穿过防火墙
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT
2.设置启动方式
首先要选择服务器启动方式
- 对于负荷较重的 rsync 服务器应该使用独立运行方式
- 对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式
2.1 以 xinetd 运行 rsync 服务
CentOS 默认以 xinetd 方式运行 rsync 服务。
rsync 的 xinetd 配置文件 在 /etc/xinetd.d/rsync。要配置以 xinetd 运行的 rsync 服务需要执行如下的命令:
可以在 vi /etc/xinetd.d/rsync 中, 将 disable=no;
然后 service xinetd restart
xinetd读取的配置文件是 /etc/rsyncd.conf
chkconfig rsync on
service xinetd restart
注意此时无单独的rsync进程存在
2.2 独立运行 rsync 服务
最简单的独立运行 rsync 服务的方法是执行如下的命令,需先暂停2.1的xinetd:
# /usr/bin/rsync --daemon
您可以将上面的命令 (/usr/bin/rsync --daemon --config=/etc/rsyncd.conf) 写到/etc/rc.local 文件以便在每次启动服务器时运行 rsync 服务。当然,您也可以写一个脚本在开机时自动启动 rysnc 服务。
此时,通过telnet 192.168.1.48 873 可以通则为已开启服务
3.新增配置文件
touch /etc/rsyncd.secrits /etc/rsyncd.motd /etc/rsyncd.conf
rsync的主要有以下三个配置文件
- rsyncd.conf (主配置文件)
- rsyncd.secrits (密码文件) #rsyncd服务的密码文件权限必须是600
- rsyncd.motd (rysnc服务器信息) #非必需,连接上rsyncd显示的欢迎信息
rsyncd.secrets的内容格式为: 用户名:密码 使用:分割 (该账号密码与系统账号密码不相干,这是给客户端连接时使用的密码)
- vi /etc/rsyncd.conf 简单配置如下,相应的配置说明可以参考:
vi /etc/rsyncd.conf
log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock uid = root gid = root max connections = 5 motd file = /etc/rsyncd.motd [zc] path = /zcy uid = root gid = root list=yes ignore errors auth users = root #对应到secrets file设置的用户密码 secrets file = /etc/rsyncd.secrits
1 ####################################################################################################### 2 #******进程相关全局配置****** 3 ###################################################################################################### 4 # = 后面的值可根据自己的实际情况更改 5 # pid file 守护进程pid文件 6 # port 守护进程监听端口,可更改,由xinetd允许rsyncd时忽略此参数 7 # address 守护进程监听ip,由xinetd允许rsyncd时忽略此参数 8 pid file = /usr/local/var/run/rsyncd.pid 9 port = 873 10 address = 192.168.1.2 #rsyncd 守护进程运行系统用户全局配置,也可在具体的块中独立配置, 11 uid = root 12 gid = root 13 #允许 chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下#chroot为yes时必须使用root权限,且不能备份path路径外的链接文件 14 use chroot = yes #只读 15 read only = no #只写 16 write only = no #允许访问rsyncd服务的ip,ip端或者单独ip之间使用空格隔开 17 hosts allow = 192.168.0.1/255.255.255.0 198.162.145.1 10.0.1.0/255.255.255.0 #不允许访问rsyncd服务的ip,*是全部(不涵盖在hosts allow中声明的ip,注意和hosts allow的先后顺序) 18 hosts deny = * 19 #客户端最大连接数 20 max connections = 5#欢迎文件路径,可选的#motd file = /etc/rsyncd/rsyncd.motd#日志相关 21 # log file 指定rsync发送消息日志文件,而不是发送给syslog,如果不填这个参数默认发送给syslog 22 # transfer logging 是否记录传输文件日志 23 # log format 日志文件格式,格式参数请google 24 # syslog facility rsync发送消息给syslog时的消息级别, 25 # timeout连接超时时间 26 log file = /usr/local/logs/rsyncd.log 27 transfer logging = yes 28 log format = %t %a %m %f %b 29 syslog facility = local3 30 timeout = 300 31 32 ###################################################################################################### 33 #******模块配置(多个)****** 34 ###################################################################################################### 35 #模块 模块名称必须使用[]环绕,比如要访问data1,则地址应该是data1user@192.168.1.2::data1 36 [data1] 37 #模块根目录,必须指定 38 path=/home/username 39 #是否允许列出模块里的内容 40 list=yes 41 #忽略错误 42 ignore errors 43 #模块验证用户名称,可使用空格或者逗号隔开多个用户名 44 auth users = data1user 45 #模块验证密码文件 可放在全局配置里 46 secrets file=/etc/rsyncd/rsyncd.secrets 47 #注释 48 comment = some description about this moudle 49 #排除目录,多个之间使用空格隔开 50 exclude = test1/ test2/
- vi /etc/rsyncd.secrets 账号配置如下:
root:123456 zcy:123456
4.客户端连接同步数据
在192.168.1.47端运行如下命令
rsync -avzP --password-file=/etc/rsyncd.secretes root@192.168.1.48::zc /zcy/
参数 a的意思就是 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件,这个参数很常用
-a 参数,相当于-rlptgoD,
-r 是递归 -l 是链接文件,意思是拷贝链接文件;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-p 表示保持文件原有权限;
-t 保持文件原有时间;
-g 保持文件原有用户组;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-o 保持文件原有属主;
-D 相当于块设备文件;
-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息,和-P有点关系
--password-file= 为密码文件路径,客户端的/etc/rsyncd.secretes 仅需填写密码即可,账号已经 指定 root@192.168.1.48::zc
root 为账号 ,该帐号在服务器端的 rsyncd.secretes 设置,可以随意指定而不需要 跟系统账号一致
zc :对应的模块,模块在服务器端已设置好,这里仅需访问该模块,即可访问对应path目录
/zcy/:同步下来的文件需要放到哪个本地目录下
如果没有 --delete 选项,源服务器上已删除的部分再执行下一次周期任务时依然会继续保留在目标服务器上,目标服务器只同步源服务器新增的部分
增加 --delete 选项会将源和目标服务器上有差异的部分删除掉
在 crontab -e 下添加
0 12 * * * rsync -avzLP --password-file=/etc/rsyncd.secretes root@192.168.1.48::zc /zcy/
每天中午12点同步
5.使用出现的问题
问题: rsync: failed to connect to 192.168.1.47: Connection refused (111)
解决:还未开启rsync服务,参考步骤2开启即可
问题: @ERROR: access denied to zc from unknown (192.168.1.47)
解决: 这是由于 我设置 hosts allow 时,设置成了 0/24 导致失败,修改成 192.168.1.0/24 后问题解决
问题: @ERROR: auth failed on module zc
我是由于 secrets file文件已经文件里面的内容写错导致的。修改之后即可使用
关于这个auth失败的问题,有以下可能的情况:
1、密码输入错误:
请再次确认你登录用户的密码无误
2、secrets file格式错误:
secrets file的文件格式是 upload:123456
表示upload用户的rsync密码是123456
3、配置文件写错:
最坑爹的一个,看看自己模块配置下面的auth users、secrets file有没写错
4、secrets file权限问题
服务端的secrets file权限必须是600,
可以使用chmod 600 /home/user/test/rsync/etc/test.pass
5、secrets file文件拥有者与rsync运行者
服务端rsync服务是以什么用户运行,则必须保证secrets file文件拥有者必须是同一个
假设root运行rsync --daemon,则secrets file的owner也必须是root
6、如果是以--password-file=file的方式附带密码
确保客户端密码文件格式无误,与服务端的密码文件不同,
客户端的不用加上用户名,即直接是 123456
7、可以尝试使用本地存在的用户名作为auth users
这个是在网上看到的,没实践过,不过如果都没办法,可尝试一下,
密码不要跟本地用户的系统密码一样就行了。
问题:rsync: opendir "/." (in zc) failed: Permission denied
解决:检查selinux设置,如果是Enforcing,改为disable
并 setenforce 0(修改为允许模式)
#getenforce(查看selinux状态)
/etc/sysconfig/selinux(保证重启生效)
摘自:http://www.365dw.cn/401.html
参考:
www.cnblogs.com/zhenhui/p/5715840.html