gitlab主从复制
同步复制repo、数据库信息;
这么做的原因:
A、为什么不使用lsyncd同步pg,因为尝试之后,gitlab 502,所以分开,pg数据很少去更新;
B、为什么不pg主从,因为pg从库的权限是只读的,gitlab登录是update sql,所以无法登录,故而不做pg主从;
步骤
1、主库安装lsyncd
下载地址:
http://www.rpmfind.net/linux/rpm2html/search.php?query=lsyncd
# download
wget http://www.rpmfind.net/linux/epel/7/x86_64/Packages/l/lsyncd-2.2.2-1.el7.x86_64.rpm
# install
rpm -ivh lsyncd-2.2.2-1.el7.x86_64.rpm
2、设置lsyncd.conf
配置lsyncd配置信息
----
-- User configuration file for lsyncd.
--
-- Simple example for default rsync, but executing moves through on the target.
--
-- For more examples, see /usr/share/doc/lsyncd*/examples/
--
-- sync{default.rsyncssh, source="/var/www/html", host="localhost", targetdir="/tmp/htmlcopy/"}
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
-- 远程本地gitlab目录同步到备库,rsync+ssh
sync {
default.rsync,
source = "/var/opt/gitlab/",
target = "root@slaveIP:/var/opt/gitlab/",
-- 上面target,注意如果是普通用户,必须拥有写权限
-- 排除选项
exclude = { "backups" ,"gitlab-ci", "sockets", "gitlab.yml", "redis", "postmaster.pid","recovery.conf","postgresql.conf","pg_hba.conf","postgresql/**"},
maxDelays = 5,
delay = 20,
-- init = true,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
bwlimit = 500000,
rsh = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa -p 22 -o StrictHostKeyChecking=no"
-- 如果要指定其它端口,请用上面的rsh
}
}
-- 远程/etc/gitlab目录同步
sync {
default.rsync,
source = "/etc/gitlab",
target = "root@slaveIP:/etc/gitlab",
-- 上面target,注意如果是普通用户,必须拥有写权限
-- 排除选项
exclude = { "initial_root_passwordi","gitlab.rb"},
maxDelays = 5,
delay = 20,
-- init = true,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
bwlimit = 2000,
rsh = "/usr/bin/ssh -l root -i /root/.ssh/id_rsa -p 22 -o StrictHostKeyChecking=no"
-- 如果要指定其它端口,请用上面的rsh
}
}
3、同步pg数据
从库上设置定时任务
也可以主库上设置
# cat /opt/pg_syncd.sh
#!/bin/bash
step=30 # 间隔30s
for (( i = 0; i < 60; i=(i+step) ))
do
sudo rsync -avrz masterIP:/var/opt/gitlab/postgresql/data/* /var/opt/gitlab/postgresql/data/
sudo rsync -avz masterIP:/etc/gitlab/gitlab-secrets.json /etc/gitlab/
sleep $step
done
exit 0
# crontab
*/10 * * * * /usr/bin/sh /opt/pg_syncd.sh
4、启动lsyncd
切记不可设置为自启动,避免主从切换数据错乱
# lsyncd,切记不可设置为自启动,避免主从切换数据错乱
systemctl start lsyncd
5、验证
主:
从: