本文主要是介绍基于rsync+inotify-tools 同步geo主从节点的artifacts文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 背景
- 2. 操作
- 2.1 geo主节点查看仓库的路径
- 2.2 安装 inotify-tools
- 2.3 主从免密
- 2.4 编写同步脚本
- 2.5 同步文件
- 3. 验证
1. 背景
由于某个repo的主从artifacts目录偏差非常严重(主节点100G,从节点10G),为了保证主从目录数据的一致性,通过rsync同步来实现。
此外,由于rsync仅仅是同步了主从节点的artifacts文件,其实际并未操作数据库,因为对数据库本身数据不会造成任何影响。
2. 操作
2.1 geo主节点查看仓库的路径
获取当前repo的hash路径:
Menu -> Admin -> Project -> Select Project-> Gitaly相对路径
eg:
Gitaly相对路径是**@hashed/4a/44/4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5.git**
则此项目的artifacts路径是:/var/opt/gitlab/gitlab-rails/shared/artifacts/4a/44/4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5
2.2 安装 inotify-tools
该工具可以实时监听某个目录的变化,同时触发rsync进行同步。
yum install -y inotify-tools
2.3 主从免密
ssh-keygen #一路回车即可
ssh-copy-id -i ~/.ssh/id_rsa.pub root@secondary_ip #输入从节点的密码即可
2.4 编写同步脚本
cd /usr/local/src/
cat inotify.sh
HOST_IP=10.100.0.2 #从节点ip
MONITOR_DIR=/var/opt/gitlab/gitlab-rails/shared/artifacts/4a/44/4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5 #主节点上repo的artifacts目录
DES=/var/opt/gitlab/gitlab-rails/shared/artifacts/4a/44/4a44dc15364204a80fe80e9039455cc1608281820fe2b24f1e5233ade6af1dd5 #从节点上的目标路径
USE=root
CMD=/usr/bin/inotifywait
${CMD} -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib ${MONITOR_DIR} | while read files
do
/opt/gitlab/embedded/bin/rsync -avzP ${MONITOR_DIR}/ --delete --timeout=100 ${USE}@${HOST_IP}:$DES
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
2.5 同步文件
cd /usr/local/src/
nohup bash inotify.sh &
tail -f nohup.out #查看同步的文件信息
3. 验证
通过tree、du -sh等命令查看文件数量和大小。
这篇关于基于rsync+inotify-tools 同步geo主从节点的artifacts文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!