GitLab Geo双节点单机部署指南
概述
本文详细介绍了如何在两个独立的单节点环境中部署GitLab Geo高可用方案。GitLab Geo是GitLab提供的分布式版本控制系统解决方案,可以实现跨地域的代码仓库镜像和灾难恢复。
前置条件
在开始部署前,请确保满足以下要求:
-
两个独立的GitLab站点:
- 一个作为主站点(primary site)
- 另一个作为从站点(secondary site)
- 两个站点可以采用不同规模的参考架构
-
许可证要求:
- 主站点必须拥有GitLab Premium或Ultimate许可证
- 一个许可证可覆盖所有从站点
-
系统要求:
- PostgreSQL 12或更高版本
- 确保所有站点满足Geo运行的基本要求
主站点配置
1. 基础配置
首先在主节点上进行以下配置:
sudo -i
编辑/etc/gitlab/gitlab.rb
文件,添加唯一站点标识:
gitlab_rails['geo_node_name'] = 'primary_site'
应用配置变更:
gitlab-ctl reconfigure
2. 设置主节点
执行以下命令将当前节点设为主节点:
gitlab-ctl set-geo-primary-node
3. 数据库密码配置
为数据库用户设置密码并生成MD5哈希:
gitlab-ctl pg-password-md5 gitlab
在配置文件中添加密码设置:
postgresql['sql_user_password'] = '<md5_hash>'
gitlab_rails['db_password'] = '<明文密码>'
4. 复制用户配置
为数据库复制用户设置密码:
gitlab-ctl pg-password-md5 gitlab_replicator
在配置文件中添加:
postgresql['sql_replication_password'] = '<md5_hash>'
5. 网络配置
配置PostgreSQL监听网络接口:
postgresql['listen_address'] = '<主站点IP>'
postgresql['md5_auth_cidr_addresses'] = ['<主站点IP>/32', '<从站点IP>/32']
6. 应用配置
临时禁用自动迁移:
gitlab_rails['auto_migrate'] = false
重新配置并重启服务:
gitlab-ctl reconfigure
gitlab-ctl restart postgresql
最后重新启用迁移:
gitlab_rails['auto_migrate'] = true
gitlab-ctl reconfigure
7. 证书准备
复制PostgreSQL的TLS证书以备从站点使用:
cat ~gitlab-psql/data/server.crt
从站点配置
1. 基础准备
登录从节点并停止相关服务:
sudo -i
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
2. 网络连通性测试
测试与主站点的连接:
gitlab-rake gitlab:tcp_check[<主站点IP>,5432]
3. 证书安装
创建并安装主站点的证书:
install -D -o gitlab-psql -g gitlab-psql -m 0400 -T server.crt ~gitlab-psql/.postgresql/root.crt
4. 数据库连接测试
测试数据库连接:
sudo -u gitlab-psql /opt/gitlab/embedded/bin/psql --list -U gitlab_replicator -d "dbname=gitlabhq_production sslmode=verify-ca" -W -h <主站点IP>
5. 角色配置
设置从节点角色:
roles(['geo_secondary_role'])
6. 数据库配置
添加数据库相关配置:
postgresql['listen_address'] = '<从站点IP>'
postgresql['md5_auth_cidr_addresses'] = ['<从站点IP>/32']
postgresql['sql_replication_password'] = '<复制密码MD5>'
postgresql['sql_user_password'] = '<数据库密码MD5>'
gitlab_rails['db_password'] = '<数据库明文密码>'
应用配置变更:
gitlab-ctl reconfigure
gitlab-ctl restart postgresql
数据库复制
1. 准备复制
选择一个唯一的复制槽名称,例如secondary_site
。
2. 执行复制
gitlab-ctl replicate-geo-database --slot-name=secondary_site --host=<主站点IP> --sslmode=verify-ca
后续配置
1. SSH密钥快速查找
配置SSH密钥快速查找功能,这对Geo是必需的。
2. 密钥文件复制
手动复制/etc/gitlab/gitlab-secrets.json
文件从主节点到所有从节点。
3. SSH主机密钥复制
复制主站点的SSH主机密钥到从站点:
find /etc/ssh -iname 'ssh_host_*' -exec cp {} {}.backup.`date +%F` \;
注意事项
- 每个从站点必须使用唯一的复制槽名称
- 认证由主站点处理,不要在从站点设置自定义认证
- 任何需要管理员权限的变更都应在主站点进行
- PostgreSQL升级需要特别小心,建议禁用自动升级
通过以上步骤,您就完成了GitLab Geo在两个单节点环境中的部署。这种配置可以提供跨地域的代码仓库镜像,增强系统的可用性和灾难恢复能力。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考