此苹果非彼苹果
« »
2010 年 11 月 17 日LA/NMP

Linux下rsync同步服务的配置

以前配置过程中遇到的问题,怎么解决的都用红色标出来了。其它的没有什么困难的。

rsync官方网站:http://rsync.samba.org/

一、安装
这个过程很简单

1.下载最新版本 http://ftp.samba.org/ftp/rsync/rsync-3.0.7.tar.gz

2.开始安装

# tar zxvf rsync-3.0.7.tar.gz
# cd rsync-3.0.7
# ./configure –prefix=/usr/local/rsync
# make
# make install

3.顺利安装完成,麻烦的地方在后面的配置过程,详细参数可查看rsync资料.txt
rsync命令放在/usr/local/rsync/bin。用rsync命令可以去运行有rsync服务的服务器上抓取资料。

服务器端必须启动,客户端无须启动。且服务器端密码文件形式每行一个帐号:密码,客户端密码文件形式只有一个密码

二、配置

1.rsyncd.conf是rsync服务的主要配置文件,它控制rsync服务的各种属性,放在/etc/rsyncd.conf
下面是服务器端配置文件信息,参数说明见参考文件

# vi /etc/rsyncd.conf

#[global]
secrets file = /etc/rsyncd.secrets
motd file = /etc/rsyncd.motd
read only = yes
list = no
uid = nobody
gid = nobody
hosts allow = 110.119.120.2 #这里不限制哪个IP同步,去掉此配置,更多配置方式请查看官方安装文档,这里不再详细说明
max connections = 5
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
ignore errors
slp refresh = 300

#[modules]
[db_backup]
comment = ipple.net’s DB backup
path = /backup/db_backup
auth users = username

2.rsyncd.secrets

# vi /etc/rsyncd.secrets
#格式:帐号:密码 (每行一组,帐号和密码用:号分开)

username:12345

同时要修改文件属性为600 (只有该用户可读写):
# chmod 600 /etc/rsyncd.secrets

否则会提示错误信息
password file must not be other-accessible

3.rsyncd.motd

# vi /etc/rsyncd.motd

Welcome to use the rsync services!

4.启动服务(后面改为了用xinetd启动)
rsync –daemon –config=/etc/rsyncd.conf &

客户端运行角本
/usr/local/rsync/bin/rsync -vazu –progress –delete-after –password-file=/etc/rsyncd.pw username@110.119.120.1::db_backup /backup/db_backup

此处rsyncd.pw与服务器端rsyncd.secrets不同,注意区别,我指的是里面的帐号密码形式,这里用不同的名字区别开来了。

现在问题来了,在客户端以root用户权限手动运行的时候,不挂密码文件参数,手动输入密码,运行正常。如果挂密码文件参数,让它自动去密码文件验证密码的话,会提示密码错误。
# /usr/local/rsync/bin/rsync -vazu –progress –delete-after –password-file=/etc/rsyncd.pw username@110.119.120.1::db_backup /backup/db_backup

Welcome to use the rsync services!

@ERROR: auth failed on module db_backup
rsync error: error starting client-server protocol (code 5) at main.c(1504) [receiver=3.0.5]

匿名模块同步的话,也是正常的。然后判定肯定是密码文件处的权限验证问题。此时将密码文件的所有者和用户组改成服务器主配置文件里配置的用户和组为nobody
# chown nobody:nobody /etc/rsyncd.pw

注意,由于上面第2步操作的时候将密码文件权限改为了600,也就是只有该文件的用户才有可读写权限,现在是root帐户身份,会提示密码文件必须是所有者才能用。
# /usr/local/rsync/bin/rsync -vazu –progress –delete-after –password-file=/etc/rsyncd.pw username@110.119.120.1::db_backup /backup/db_backup

Welcome to use the rsync services!

password file must be owned by root when running as root
continuing without password file
Password:

密码输入正确的话,可以正常运行。

查了半天,终于发现问题蹊跷的地方,此机器上有个系统自带的较早版本的rsync服务,
# rpm -q rsync
rsync-2.6.8-36.8
#试了一下,此服务器系统红帽没有注册,不能使用yum,将旧版本卸载了
# rpm -e rsync

# vi /etc/xinetd.d/rsync

# default: off
# description: rsync file transfer daemon
service rsync
{
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/sbin/rsyncd
server_args = –daemon
disable = yes
}

查看一下它的服务文件目录在/usr/sbin/rsyncd

将server选项改成 /usr/local/rsync/bin/rsync
disable = no

# /etc/init.d/xinetd restart #重启服务

# chkconfig -l #检查rsync没有启动

把rsync加入自动启动脚本,开机后自动启动:

# echo ” /usr/local/rsync/bin/rsync –daemon” >> /etc/rc.d/rc.local

经过这几天不断的翻查,挑选资料终于又想到了问题的所在。由于网上好多资料,几乎是一个模子刻出来的,造成了很多困扰。原来rsync的服务器端与客户端密码文件的存储格式是不同的。服务器端是 user:pw 而客户端的只需一个pw。否则在用rsync命令中加上密码文件参数的时候就会提示验证用户失败。。。不知道rsync为什么要这么做。。。可能是客户端也无须启动,而那个从密码文件里读出来的密码只会直接拿出来发送去服务器端验证吧,而不会去比较客户端密码文件里是哪个用户名的密码吧。如果这样的话,服务器端多个同步任务不用一个帐号来做的话,那么客户端要建N个用户密码文件了。。。

现在可以交给系统自动执行了,shell角本见其它资料。

# crontab -e
30 5 * * * /script/rsync_db_backup.sh

在/etc/make.conf里面加入下面一句话试试
PORTAGE_RSYNC_INITIAL_TIMEOUT=45

同步的时候提示这个错误
rsync: failed to connect to 211.211.7.6: No route to host
rsync error: error in socket IO (code 10) at clientserver.c(83)

检查一下服务器端防火墙是否对873端口屏蔽了,可试着将防火墙关闭,看能否解决此问题。

———————————

11.18更新

今天早上来了,检查一下昨晚是否成功同步数据了,发现错误日志了。

@ERROR: Unknown module ‘db_backup’
rsync error: error starting client-server protocol (code 5) at main.c(1583) [receiver=3.0.7]
这是因为服务器端hosts allow 没有允许该主机访问,汗死。。同步另外一台怎么很正常呢。另外一台没有设置允许的IP就能正常同步呢。这要是本地路由重启了,上网IP就变了呀,还得去改服务器允许的IP,这可麻烦大了,还得再查查。
查了好多原因,终于找到了,查看了一下服务器端log文件,是被拒绝了。

日志信息 »

该日志于2010-11-17 15:48由 Apple 发表在LA/NMP分类下, 评论已关闭。 如果觉得这篇文章不错,可以分享给你的朋友们~ :)
返回顶部