介绍
为了实现组件的高可用,比如gitlab或者禅道,一般会在不同机器分别安装gitlab,它们公用一个外接的数据库。但是gitlab在本地还会有一些数据生成,这些数据在各个gitlab之间也需要保持一致,可以采用rsync实现不同机器之间的文件同步。
安装
以禅道双节点为例,所有安装了禅道客户端的机器安装rsync,命令:
yum install -y rsync
主节点配置
切换到主禅道所在机器,修改rsync配置文件/etc/rsyncd.conf:
uid = nobody
gid = nobody
use chroot = no
max connections = 3
pid file = /var/run/rsyncd.pid
log file=/var/log/rsyncd.log
lock file=/var/run/rsyncd.lock
secrets file=/etc/rsync.pass
[forzbox] # 自定义模块名,可多个
path = /opt/zbox/app/zentaoep/www/data/upload/1 # 要同步的目录
comment = BACKUP CLIENT IS zbox
ignore errors
read only = yes
list = no
# 以下两项是socket连接认证
auth users = forzbox
secrets file = /etc/rsync.pass
这里配置的同步方式是通过rsync进程来复制数据的方式,还有别的同步方式后续会说到。还有一些配置项,如主机权限,目录筛选等可以自行百度。
主节点创建认证文件/etc/rsync.pass,填写内容为用户名密码,用户名是上边配置文件中自定义的,密码是自己定的,注意格式,且这个认证文件的权限要为600:
forzbox:pass123
从节点配置
从节点也创建认证文件/etc/rsync.pass,内容为密码即可,权限为600:
pass123
启动
主从节点启动服务:
systemctl start rsyncd && systemctl enable rsyncd
如果是启用了防火墙,还需要配置端口,默认是873。
从节点配置定时任务进行每5分钟自动同步(这里采用的同步方式是:从节点通过rsync进程拉取主节点的数据到本地),crontab -e
之后:
*/5 * * * * rsync -vzrtp --progress --delete --password-file=/etc/rsync.pass forzbox@192.168.178.129::forzbox /opt/zbox/app/zentaoep/www/data/upload/1 >> /root/crontab.log 2>&1
上述命令参数说明:
v
:显示详细信息z
:传输过程中对数据进行压缩r
:递归t
:保留修改时间属性p
:保留文件权限属性--progress
:显示数据传输的进度信息--password-file=FILE
:指定密码文件--delete
:删除那些仅在目标路径中存在的文件(源路径中不存在)
3种同步方式
rsync的同步方式有3种。
本地复制
rsync [选项] SRC... [DEST]
选项为参数,SRC表示原路径,DEST表示目标路径,下同。
通过shell远程复制
-
下载数据
rsync [选项] [user@]HOST:SRC... [DEST]
不加
user@
表示用root用户进行登陆远程主机下载数据到本地的DEST路径。 -
上传数据
rsync [选项] SRC... [user@]HOST:DEST
这里的SRC表示本地数据,DEST表示远端主机目录。
通过rsync进程远程复制
-
下载数据
rsync [选项] [user@]HOST::SRC [DEST]
这里双冒号后的SRC表示远端服务端的模块名。
rsync [选项] rsync://[user@]HOST[:port]/SRC [DEST]
这里的SRC表示实际的同步目录名,这种方式可以指定端口。
-
上传数据
rsync [选项] SRC [user@]HOST::DEST
上传本地客户端数据到远端服务端的DEST模块名指定的路径。
rsync [选项] SRC rsync://[user@]HOST[:port]/DEST
这里的DEST表示实际的同步目录名,这种方式可以指定端口。
参考:
https://www.cnblogs.com/regit/p/8074221.html