gitlab geo配置
geo是什么
参考gitlab中文官方文档docs.gitlab.cn/jh/administ…
Geo 是广泛分布的开发团队的解决方案,可作为灾难恢复策略的一部分提供热备份。Geo 提供极狐GitLab 实例的本地只读站点。这可以减少克隆和获取大型仓库所需的时间,从而加快开发速度。
环境准备
- 一台安装了gitlab且已经激活导入许可证的EE企业版linux服务器,作为主节点。
- 一台安装gitlab EE企业版的linux服务器,作为从节点。
- gitlab 需要是通过rpm linux安装包安装的,本文使用的是该方式安装的gitlab
- gitlab ee版本要新一些,最好是15往上,本文使用的是15版本配置且测试成功
- 配置过程中,我所用到的都是root账户ssh登录
配置
配置文档在docs.gitlab.cn/jh/administ…
本文配置的是单节点Geo站点
配置数据库复制
主节点配置
- 修改
/etc/gitlab/gitlab.rb的gitlab_rails['geo_node_name'] = '<site_name_here>'项,给站点取一个唯一名。例如:gitlab_rails['geo_node_name'] = 'master' - 执行
gitlab-ctl reconfigure命令激活配置 - 执行
gitlab-ctl set-geo-primary-node将节点设置为主要站点 - 执行
gitlab-ctl pg-password-md5 gitlab命令为gitlab数据库用户定义密码。过程中会输入一个密码1,记住此刻设置的密码1,同时会输出一个MD5哈希,把密码1和MD5哈希分别配置到/etc/gitlab/gitlab.rb的gitlab_rails['db_password']和postgresql['sql_user_password'] - 执行
gitlab-ctl pg-password-md5 gitlab_replicator命令为gitlab_replicator数据库复制用户定义密码。过程中会输入一个密码2,记住此刻设置的密码2,同时会输出一个MD5哈希,把MD5哈希配置到postgresql['sql_replication_password - 打开
x/etc/gitlab/gitlab.rb,添加roles(['geo_primary_role'])配置,修改postgresql['listen_address']为主节点的ipv4地址,修改postgresql['md5_auth_cidr_addresses']为[['<主节点ipv4地址>/32', '从节点ipv4地址/32']];配置gitlab_rails['auto_migrate'] = false - 执行
gitlab-ctl reconfigure命令激活配置 - 执行
gitlab-ctl restart postgresql重新启动postgresql服务 - 再次修改
/etc/gitlab/gitlab.rb配置gitlab_rails['auto_migrate'] = true - 执行
gitlab-ctl reconfigure命令激活配置 - 执行
netstat -nltp | grep 5432命令,能看到有postgres进程监听5432端口说明配置没问题,如果postgresql进程没起来,没监控5432端口,那后续的操作会有问题。 - 执行
cat ~gitlab-psql/data/server.crt命令,拿到证书内容,记住这个证书1.
至此主节点配置成功!
从节点配置
- 执行
gitlab-ctl stop puma命令停止应用服务器 - 执行
gitlab-ctl stop sidekiq命令停止sidekiq - 执行
gitlab-rake gitlab:tcp_check[<主节点ipv4地址>,5432]命令,检查是否能连接到主节点的 PostgreSQL 服务器,输出绿色TPC connection from xxx:xx to 主节点ipv4地址:5432 succeeded代表成功 - 执行
vim server.crt命令创建一个文件,将主节点配置中第12步拿到的证书1内容复制进文件 - 执行
install -D -o gitlab-psql -g gitlab-psql -m 0400 -T server.crt ~gitlab-psql/.postgresql/root.crt命令安装server.crt文件 - 执行
sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql --list -U gitlab_replicator -d "dbname=gitlabhq_production sslmode=verify-ca" -W -h <主节点ipv4地址>命令,测试gitlab-psql用户是否可以连接到主节点的数据库,正常会提示输入主节点配置中第5步设置的密码2,输入密码,能看到主节点的数据库列表,有列表打印说明配置正常 - 编辑
/etc/gitlab/gitlab.rb并添加或者修改以下配置项:
roles(['geo_secondary_role'])
postgresql['listen_address'] = '<从节点ipv4地址>'
postgresql['md5_auth_cidr_addresses'] = ['<从节点ipv4地址>/32']
# 下面这三项内容的配置和主节点保持一致即可
postgresql['sql_replication_password'] = '<md5_hash_of_your_password>' postgresql['sql_user_password'] = '<md5_hash_of_your_password>'
gitlab_rails['db_password'] = '<your_password_here>'
- 执行
gitlab-ctl reconfigure命令激活配置 - 执行
gitlab-ctl restart postgresql命令重新启动postgresql服务
至此从节点配置成功!
启动复制过程
- 以root身份在从节点上执行
gitlab-ctl replicate-geo-database --slot-name=slave --host=<主节点ipv4地址> --sslmode=verify-ca命令 salve是每个 Geo 次要站点自己唯一的复制槽名称,复制槽名称只能包含小写字母、数字和下划线字符。启动复制过程。过程中在确认是输入replicate, 然后正常会提示输入主节点配置中第5步设置的密码2,输入密码,正常会开始数据库备份,有百分比进度提示。说明该项配置完成。
至此数据库配置完成,如果在启动复制过程时报错,可以从/var/log/gitlab/postgresql/current看日志。我遇到的是postgresql服务没起来导致的错误,重启postgresql即可。另外还遇到一个很奇怪的报错,重启机器得以解决。
配置gitlab,设置主要站点和次要站点
配置快速查找授权 SSH 密钥
参考文档:docs.gitlab.cn/jh/administ…
- 使用
gitlab-sshd最方便,直接在主节点和从节点上修改/etc/gitlab/gitlab.rb文件,修改下面两项配置
gitlab_sshd['enable'] = true
gitlab_sshd['listen_address'] = '[::]:2222'
- 执行
gitlab-ctl reconfigure命令激活配置即可
配置从节点
- 在从节点上执行 mv /etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json.`date +%F` 命令, 会将节点原本的文件备份
- 在主节点上执行
scp /etc/gitlab/gitlab-secrets.json root@从节点ipv4:/etc/gitlab/命令,将主节点的文件拷贝到从节点 - 在从节点上执行
chown root:root /etc/gitlab/gitlab-secrets.json和chmod 0600 /etc/gitlab/gitlab-secrets.json命令修改文件权限 - 在从节点上执行
gitlab-ctl reconfigure和gitlab-ctl restart命令使更改生效
手动复制主节点的 SSH 主机密钥
- 在从节点上执行 find /etc/ssh -iname 'ssh_host_*' -exec cp {} {}.backup.`date +%F` \; 命令,备份所有主机密钥
- 在从节点上执行
scp root@主节点ipv4:/etc/ssh/ssh_host_*_key* /etc/ssh,从主节点复制 OpenSSH 主机密钥 - 在从节点上执行
chown root:root /etc/ssh/ssh_host_*_key*和chmod 0600 /etc/ssh/ssh_host_*_key命令,保证文件权限ok - 在主节点和从节点上执行
for file in /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done命令,如果输出一致,说明上述操作没有问题 - 在从节点上执行下面的命令,如果输出一致,说明ok
# This will print the fingerprint for private keys:
for file in /etc/ssh/ssh_host_*_key; do ssh-keygen -lf $file; done
# This will print the fingerprint for public keys:
for file in /etc/ssh/ssh_host_*_key.pub; do ssh-keygen -lf $file; done
- 执行
systemctl restart sshd.service重启sshd服务 - 编辑
/etc/gitlab/gitlab.rb文件,修改gitlab_rails['geo_node_name'] = '<site_name_here>'项,取一个唯一的geo节点名 - 执行
gitlab-ctl reconfigure命令激活配置
添加从节点
导航到主节点上的极狐GitLab 实例:
- 在左侧边栏中,选择 搜索或转到。
- 选择 管理中心。
- 在左侧边栏中,选择 Geo > 站点。
- 选择 添加站点。
- 在
/etc/gitlab/gitlab.rb中使用gitlab_rails['geo_node_name']填写 Name。它们必须始终每个字符完全匹配。 - 用
/etc/gitlab/gitlab.rb中的external_url填写 URL。这些值必须始终匹配,但如果一个以/结尾而另一个不以/结尾,则无关紧要。 - 可选。在 内部 URL(可选) 中,输入主站点的内部 URL。
- 可选。选择 次要 站点应复制哪些组或存储分片。留空表示复制所有内容。在选择性同步文档中阅读更多内容。
- 选择 保存更改,添加 次要 站点。
重新启动从节点服务
- 在从节点执行
gitlab-ctl restart重启服务 - 可以在主节点和从节点上执行
gitlab-rake gitlab:geo:check命令,检查配置项是否有啥问题
至此完成所有配置,登录从节点,可以看到当前处于一个次要的,只读的Geo站点,如需进行变更,必须访问主站点的提示
验证配置效果以及后续配置
参考官方文档步骤 6. 验证次要站点的正常运行
灾难恢复
当主节点故障时,可以把从节点提为主节点使用,方法参考官方文档docs.gitlab.cn/jh/administ…