rsync是Unix下的一款应用软件,它能同步更新两处计算机的档案与目录,rsync可拷贝/显示目录属性,以及拷贝档案,并可选择性的压缩以及递归拷贝。
好,闲话少说,现在开始讨论rsync在CentOS等Linux系统下的搭建过程
首先,安装 xinetd 和 rsync 包,Centos系统就这点好,可以直接yum安装
yum install xinetd -y
1. 安装完成后,编辑如下配置文件
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
这里只需要改动一处,将disable默认的yes改为no
2. 创建rsync的配置文件,默认安装后,是没有rsyncd.conf文件的,需要新建,一般都是建立在/etc下
vim /etc/rsyncd.conf
[WebModel]
path = /opt/data/www
auth users = guest
uid = root
gid = root
secrets file = /etc/rsyncd.secrets
read only = no
max connections = 10
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
上述只是一个很简单的配置,详细的配置大家可以查询资料进行扩充,不过以上配置已经可以满足基本的需求了
path:需要同步的目录,【WebModel】对外同步,供客户端调用的模块名,auth users:验证用户,多个用户请用逗号隔开,uid gid 启动后的用户及用户组,一般保持默认root即可,secrets file 认证用户密码存放的位置,我们后面会编辑这个文件。readonly 关闭只读选项,max connections 客户端的最大链接数,最后的三项就是Log和pid了。
3. 编辑客户端使用的密码文件
vim /etc/rsyncd.secrets
guest:yourpassword (即用户名:密码的方式)
给文件赋权
chown root:root /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets (这里注意,该文件的权限必须为600)
4. 启动 xinetd 服务
/etc/init.d/xinetd start
5. 添加防火墙 IPtables 规则,开放 873 端口对外访问(873为rsync的默认端口)
iptables -I INPUT -s remote_ip -p tcp --dport 873 -j ACCEPT
至此,服务端设置完毕,现在开始设置客户端
1. 客户端默认已经安装了rsync,如果尚未安装,执行以下命令进行安装
yum install rsync -y
2. 执行同步:
/usr/bin/rsync -vzrtop --delete guest@localip::WebModel /opt/data/www/ (localip 即你安装rsync服务端的IP)
这里会提示你输入密码,输入你在服务端创建的 rsyncd.secrets 中的密码即可,如果想省去输入密码的麻烦,可以做如下操作:
/usr/bin/rsync -vzrtop --delete guest@localip::WebModel /opt/data/www --password-file=/etc/rsyncd.scrt
这样我们创建 /etc/rsyncd.scrt 文件,并将上面 /etc/rsyncd.secrets 中的密码输入,注:只输入密码,不要用户名
同时,赋予密码文件0600权限,只允许属主访问 chmod 0600 /etc/rsyncd.scrt
3. 好了,此时服务端和客户端就设置完毕了,你可以设置一个定时任务,让客户端定时去服务端同步数据
crontab -e
01 00 * * */usr/bin/rsync -vzrtop --delete guest@localip::WebModel /opt/data/www/ --password-file=/etc/rsyncd.scrt
这里表示每天的0点01分同步服务端数据
可能会遇到的问题:
问题一:
@ERROR: chroot failed rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器端的目录不存在或无权限。
创建目录并修正权限可解决问题。
问题二:
@ERROR: auth failed on module tee rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:服务器端该模块(tee)需要验证用户名密码,但客户端没有提供正确的用户名密码,认证失败
问题三:
@ERROR: Unknown module ‘tee_nonexists’ rsync error: error starting client-server protocol (code 5) at main.c(1522) [receiver=3.0.3]
原因:
服务器不存在指定模块。
提供正确的模块名或在服务器端修改成你要的模块以解决问题。
问题四:
rsync: link_stat "." (in *** ) failed: Permission denied (13)
*** 是指你同步的某一个文件夹模块的名字,一般在服务端进行同步时会碰到,这个问题是因为一些Linux的SELinux默认开启了Enforce模式,将其关闭即可 直接执行getenforce 0 , 问题即可解决。