当多台服务器使用负载均衡等解决方案时,各服务器代码同步又是另一个问题,这时使用 rsync 是一个常用的方案。这里以两台服务器为例
主服务器 A :192.168.0.2
辅服务器 B :192.168.0.3
安装配置 rsync
安装 rsync 并查看版本信息
yum install rsync
rsync -version
启动和停止 rsync
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
ps -ef|grep rsync
kill 12521
配置主服务器 A, 首先简单配置下 rsync,使用命令 vi /etc/rsyncd.conf
#运行rsync守护进程用户和组
uid = nobody
gid = nobody
#允许最大连接数 就是预序多少台服务器链接
max connections = 4
#只读模式
read only = true
#预序链接的ip 多个用逗号隔开
#hosts allow = 202.207.177.180
# 现在是允许所有的服务器都能连
hosts allow = *
transfer logging = true
log format = %h %o %f %l %b
#日志文件
log file = /var/log/rsyncd.log
slp refresh = 300
#进程文件位置
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
[test]
#A服务器需要做镜像的目录
path = /www/wwwroot/test
read only = false
#允许的认证用户
auth users = root
#密码文件位置
secrets file = /etc/rsyncd.password
注意:注释“#”不能放在配置项的后面,错误示例 “
secrets file = /etc/rsyncd.password #密码文件位置
”
接着设置上面配置文件中的密码文件 vim rsyncd.password
添加【user:password】格式的内容如:root:123456
,并设置 600 权限,这点非常重要
chmod -R 600 rsyncd.password
配置辅服务器 B,这里只需要添加密码文件 vim rsyncd.password
添加【password】格式的内容如:123456
添加开机启动,防止服务器重启或者宕机修复好之后,需要手动重启服务
vi /etc/rc.local
/usr/bin/rsync --daemon --config=/ect/rsyncd.conf #开机自动运行
代码同步
配置好了 rsync,现在就来实现服务器 B 从服务器 A 同步代码,执行以下命令
rsync -vzrtopg --progress root@192.168.0.2::test /www/wwwroot/test --password-file=/etc/rsyncd.password
root
对应服务器 A 配置文件 rsyncd.conf 中的 auth users = root
192.168.0.2
应服务器 A 的 ip
test
对应服务器 A 配置文件 rsyncd.conf 中的 [test]
/www/wwwroot/test
是服务器 B 存放同步代码的目录
/etc/rsyncd.password
是服务器 B 的密码文件
以上命令执行一次,同步一次,需要用到 crontab 计划任务来做到实时同步,新建 shell 脚本 vim /root/rsyncd.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
#间隔的秒数,不能大于60
step=1
for (( i = 0; i < 60; i=(i+step) )); do
$(rsync -vzrtopg --progress root@192.168.0.2::test /www/wwwroot/test --password-file=/etc/rsyncd.password)
sleep $step
done
exit 0
然后在服务器 B 添加 crontab 定时任务, 执行 crontab -e
* * * * * sh /root/rsyncd.sh > /dev/null 2>&1
OK,大功告成,赶紧去试试吧!
参考: https://blog.csdn.net/oljuydfcg/article/details/91639416