更新线上应用的时候,如果手动部署容易出错和遗漏,这里使用Linux自带的rsync功能,当应用在测试机测试ok,自动同步到正式机。这里我们把测试机称为Master,正式机称为Slave,应用从测试机同步到正式机,从Master同步到Slave。以下操作均在root账号下进行。
Master端配置:
1.vi /etc/rsyncd.conf
2.输入以下内容:
port = 873 uid = root gid = root use chroot = yes read only = yes #limit access to private LANs hosts allow = YOURS max connections =10 pid file = /var/run/rsyncd.pid log file = /var/log/rsyncd.log timeout = 300 [testlink] path = /tmp/rsyntest list = yes auth users = root uid = root gid = root exclude = *.xml *.properties *.log secrets file = /etc/rsyncd.pass read only = no
3.如果要排除某些文件可以在module节点下增加exclude = *.xml *.properties *.log 以空格分隔
4.mkdir -p /tmp/rsyntest
5.echo "this is test" > /tmp/rsyntest/test.test
6.echo "root:123456" > /etc/rsyncd.pass,这里root可以是其他Master的用户,但是必须是系统用户。
7.chmod 600 /etc/rsyncd.pass
8.启动rsync命令: rsync --daemon --config=/etc/rsyncd.conf;
停止rsync命令:cat /var/run/rsyncd.pid | xargs kill -9 && rm -rf /var/run/rsyncd.pid。
使用启动命令,启动Master的rsync服务。
9.记得在Master上对Slave机器开启iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -s SlaveIPS -j ACCEPT
Slave端配置测试
1.echo "123456" > /etc/rsyncd.pass
2.chmod 600 /etc/rsyncd.pass
3.cd /tmp/rsyntest
4.注意Slave端的/etc/rsyncd.pass只有密码,没有用户名root!!! 否则在 指定pass文件运行时,rsync -vrtup --delete --password-file=/etc/rsyncd.pass root@masterIP::testlink /tmp/rsyntest,会报以下错误:
@ERROR: auth failed on module testlink rsync error: error starting client-server protocol (code 5) at main.c(1527) [receiver=3.0.6]
在Master端的日志文件/var/log/rsyncd.log,有以下报错内容:
2012/04/09 15:07:48 [28566] name lookup failed for slaveIP: Name or service not known 2012/04/09 15:07:48 [28566] connect from UNKNOWN (slaveIP) 2012/04/09 15:07:48 [28566] auth failed on module testlink from unknown (slaveIP): password mismatch
5.如果Slave端的/etc/rsyncd.pass和Master端一样,则只能按照以下不指定pass文件的方式运行:
rsync -vrtup --delete root@masterIP::testlink /tmp/rsyntest 提示输入密码,输入/etc/rsyncd.pass中配置的密码123456,会有以下输出:
receiving incremental file list ./ test.test sent 80 bytes received 183 bytes 75.14 bytes/sec total size is 30 speedup is 0.11
6.同步完毕在Master和Slave的对应目录分别执行 ls -alR|grep "^[-d]"|wc,看看文件夹和文件数是否一致。
rsyncd.conf的配置说明和rsync命令详解:
http://hi.baidu.com/xc_hai/blog/item/0ee61e8e321017f2503d9288.html