menu

精英意识会让人走向孤独

忘记社区密码或者保密贴查看密码的,请给我留言,并留联系方式。

Avatar

使用rsync进行远程数据同步

好多个月了,写的东西一直都是公司内部资料,今天写的内容终于可以对外公布了。

使用Rsync进行数据同步

首先安装Rsync,比如在Redhat Fedora Linux上或者RHEL AS3上:

rpm -ivh rsync-2.5.7-5.3E.i386.rpm

安装完成。

rsync客户端和服务器端都是同一个执行文件,只不过加的参数不一样。

例如,服务器A是192.168.0.100,服务器B是192.168.0.101,例如将101上的/www/downloads/new目录下的文件同步到192.168.0.100的/www/download目录下,则100上运行rsync作为服务器端,101做为客户端。

首先把192.168.0.100服务器端的配置文件建立起来。

vi /etc/rsyncd.conf

内容如下:

uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[downloads]
path = /www/downloads/
ignore errors
read only = false
list = false
hosts allow = 192.168.0.101/24
hosts deny = 0.0.0.0/32
auth users = backup
secrets file = /etc/rsyncd.pwd

找个配置文件中,uid和gid指明了运行身份,chroot表示连接后自动切换目录,read only=false是允许别的客户端向本机的服务器端上传。host allow和deny是限制连接地址。auth user是认证用户名,secrets file = /etc/rsyncd.pwd是表示认证用户名的时候到这里读取密码。

接下来编辑密码文件:

vi /etc/rsyncd.pwd

backup:123456

设置密码文件权限700:(权限不对会登陆不上)

chmod 700 /etc/rsyncd.pwd

然后启动rsync服务:

/usr/bin/rsync --daemon

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

echo "/usr/bin/rsync --daemon" >> /etc/rc.d/rc.local

注意一下iptables必须允许rsync的873端口被连接。

现在到192.168.0.101的客户端上,命令格式如下:

rsync [-参数] 源地址路径 目标地址路径

例如将101上的/www/downloads/new目录下的文件同步到192.168.0.100的/www/downloads目录中。

则创建执行脚本:

vi /root/rsync.sh

rsync -vrtL --progress \
    /www/downloads/new/* \
    backup@192.168.0.100::downloads \
    --password-file=/root/rsync.pwd

-v参数表示显示输出结果,r表示保持属性,t表示保持时间,L表示软link视作普通文件。

创建客户端的密码文件:

vi /root/rsync.pwd

123456

注意:客户端的密码脚本不带用户名。

设置密码文件权限700:(权限不对会登陆不上)

chmod /root/rsync.pwd

将客户端脚本加入定期任务:

echo "00 3 * * * root /usr/prima/etc/rsync.sh" >> /etc/crontab

则每天凌晨3点运行同步。

现在可以直接运行 /root/rsync.sh 观看效果。

简单的rsync配置完成。

-------------

Linux/Unix下的东西用多了,就感觉这种配置方法的文章网上满地都是,但是真正能使用的不多,一般都是漏洞百出,恐怕也仅仅适合适用于作者的电脑了。

还是要靠自己学。

请问你的设置测试通过了吗?
password-file参数不起作用,每次同步都让输入密码,root身份的自动登陆当然好解决了,我想解决的是以普通身份登陆并同步数据的。一直没解决,请赐教。谢谢!!另外我一直糊涂于client和server,总感觉网络上说反了,问题是我亲自实验结果如下:server配置到a上,b是client,在b上运行命令同步,应该是a上的东西全部同步到b上。而你说的正好跟实际相反。也不知道是不是我糊涂了!

评论已关闭