您的位置:首页 > 其它

利用rsync搭建服务器之间文件同步

2011-05-25 17:16 316 查看
由于外网运行系统需要同时好几台机器提供服务,这样就有个问题是程序代码发布后,这些服务器怎么能比较及时的更新代码。这样就需要一个服务器之间文件同步的机制。在Unix下有一个比较好的工具rsync。具体场景为代码发布程序到服务器A,其他服务器B、C、D需要比较及时的从服务器A获取更新的代码。

整体架构是服务器A当做rsync server,其他几个服务器B、C、D定时与服务器A进行文件同步。(这些服务器的操作系统都是freeBSD)

第一步:搭建rsync server

1、安装 rsync 。采用ports方式安装,具体是在/usr/ports/net/rsync/ ,在该目录下make install。

2、配置rsync server,假定IP地址为:192.168.1.92

1)、创建目录/etc/rsyncd

2)、在/etc/rsyncd下创建三个文件:

rsyncd.conf(rsyncd的配置文件),其中配置文件的说明可以查看这个rsync.conf

rsyncd.secrets(rsyncd的认证文件),该文件的属性是600

rsyncd.motd (rsyncd的登录时候欢迎信息)。

具体rsyncd.conf配置如下:

# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid #rsyncd的运行的ID号
port = 873 #rsyncd监听的端口号,
address = 192.168.1.92 #rsyncd的IP地址
uid = root #rsyncd运行的用户
gid = wheel #rsyncd运行的用户所属的组

use chroot = yes
read only = yes #只读

#limit access to private LANs
hosts allow=192.168.1.111/255.255.255.0 #允许那些IP地址可以访问这个rsyncd服务
hosts deny=* #拒接那些IP链接,*表示拒绝所有,这个与hosts allow一起判断

max connections = 5 #最大链接数
motd file = /etc/rsyncd/rsyncd.motd #欢迎界面内容

#This will give you a separate log file
#log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync
#transfer logging = yes

log format = %t %a %m %f %b #log的格式
syslog facility = local3
timeout = 300

[home92] #模块,rsyncd采用模块方式来管理同步的目录,client端只需要指出需要同步的模块名称即可。
path = /home/test #同步时的目录
list=yes #是否允许list
ignore errors #忽略所有同步过程中的错误
auth users = waden #认证的用户(必须是服务器A的系统用户)
secrets file = /etc/rsyncd/rsyncd.secrets #waden的密码,最好不要和系统用户的密码一致。格式是用户:密码
comment = home 92
exclude = cryptmod/ et_security/ #该目录下/home/test不同步的目录

3)、启动rsync, 需要按照daemon方式启动,/usr/local/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

4)、可以通过命令rsync --list-only waden@192.168.1.92 查看rsync服务器提供那些文件同步服务。

2、搭建rsync的client端。

1)、安装rsync

2)、执行命令rsync -avzP --delete waden@192.168.1.92::home92 /home/waden

解释一下:-avzP

-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件;

-z 传输时压缩;
-P 传输进度;
-v 传输时的进度等信息

--delete: 表示在被同步的目录下的文件在服务器A同步目录没有的话,就要被删除

waden@192.168.1.92::home92 @之前的表示账号,接下里是服务器A的地址,然后是需要同步的模块

执行上述命令,会出现一个输入密码的提示,输入在A服务器rsyncd.secrets的密码

3)、为了自动能同步,需要设置一个密码文件,这样就不需要有提示输入密码的提示了。具体参数是:

--password-file=rsync.password

其中rsync.password文件的属性必须是600

为了能自动定时去执行同步的命令,只需要写个同步命令的脚本,然后放到crontab中定时去执行就可以了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: