阅读量:13
Linux版GitLab集群搭建步骤(以CentOS为例)
1. 基础环境准备
- 系统要求:选择CentOS 7/8等主流发行版,确保系统已更新至最新版本(
sudo yum update -y)。 - 硬件要求:每台服务器需满足CPU≥4核、内存≥8GB、磁盘≥100GB(生产环境建议更高配置)。
- 依赖安装:安装必要组件以支持GitLab运行:
sudo yum install -y curl policycoreutils-python openssh-server postfix wget - 网络与防火墙:确保服务器之间网络互通,配置防火墙允许HTTP(80)、HTTPS(443)、SSH(22)端口:
sudo firewall-cmd --permanent --zone=public --add-service=http sudo firewall-cmd --permanent --zone=public --add-service=https sudo firewall-cmd --permanent --zone=public --add-service=ssh sudo firewall-cmd --reload - SSH服务:启动并设置SSH开机自启,用于远程管理:
sudo systemctl enable sshd && sudo systemctl start sshd
2. 安装GitLab
- 添加GitLab官方仓库:通过脚本添加GitLab软件源,确保后续能获取最新版本:
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash - 安装GitLab社区版(CE):使用YUM安装GitLab(若需企业版,将
gitlab-ce替换为gitlab-ee):sudo EXTERNAL_URL="http://your-gitlab-domain.com" yum install -y gitlab-ce - 初始配置:修改
/etc/gitlab/gitlab.rb文件,设置GitLab对外访问的域名或IP(替换为实际地址):sudo vim /etc/gitlab/gitlab.rb # 修改以下行(取消注释并替换域名) external_url 'http://your-gitlab-domain.com' - 应用配置并启动:执行以下命令使配置生效并启动GitLab服务:
sudo gitlab-ctl reconfigure # 应用配置 sudo gitlab-ctl start # 启动服务 sudo gitlab-ctl status # 检查服务状态(确保所有服务正常运行)
3. 配置负载均衡器(实现流量分发)
- 安装Nginx:作为负载均衡器,分发请求到多个GitLab实例:
sudo yum install -y nginx - 配置Nginx上游节点:编辑Nginx配置文件(
/etc/nginx/conf.d/gitlab.conf),定义GitLab实例集群:upstream gitlab { server gitlab-node1.example.com; # GitLab实例1域名/IP server gitlab-node2.example.com; # GitLab实例2域名/IP server gitlab-node3.example.com; # GitLab实例3域名/IP } server { listen 80; server_name gitlab.yourdomain.com; # 负载均衡器对外域名 location / { proxy_pass http://gitlab; # 转发到上游集群 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } - 重启Nginx:使配置生效并设置开机自启:
sudo systemctl restart nginx sudo systemctl enable nginx
4. 配置高可用组件
4.1 数据库高可用(PostgreSQL主从复制)
- 安装PostgreSQL:在每台数据库服务器上安装PostgreSQL:
sudo yum install -y postgresql-server postgresql-contrib sudo postgresql-setup initdb # 初始化数据库 sudo systemctl start postgresql && sudo systemctl enable postgresql - 配置主从复制:
- 主库(Master):修改
postgresql.conf(listen_addresses = '*')和pg_hba.conf(允许从库IP访问),创建复制用户并导出数据:CREATE USER replicator WITH REPLICATION ENCRYPTED PASSWORD 'your_password'; - 从库(Slave):修改
recovery.conf(指定主库信息),启动从库同步:standby_mode = 'on' primary_conninfo = 'host=master_ip port=5432 user=replicator password=your_password'
- 主库(Master):修改
- 配置GitLab使用PostgreSQL集群:修改
/etc/gitlab/gitlab.rb,指向主库:gitlab_rails['db_adapter'] = 'postgresql' gitlab_rails['db_host'] = 'postgres-master.example.com' gitlab_rails['db_port'] = 5432 gitlab_rails['db_user'] = 'gitlab' gitlab_rails['db_password'] = 'your_password'
4.2 缓存高可用(Redis Sentinel)
- 安装Redis:在每台Redis服务器上安装Redis:
sudo yum install -y redis sudo systemctl start redis && sudo systemctl enable redis - 配置Redis Sentinel:创建Sentinel配置文件(
/etc/redis/sentinel.conf),指定主库信息和哨兵节点:sentinel monitor mymaster redis-master.example.com 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 - 配置GitLab使用Redis Sentinel:修改
/etc/gitlab/gitlab.rb:gitlab_rails['redis_sentinel_host'] = 'redis-sentinel.example.com' gitlab_rails['redis_sentinel_port'] = 26379 gitlab_rails['redis_sentinel_role'] = 'master'
5. 配置GitLab实例(多节点同步)
- 修改实例配置:在每台GitLab服务器上,编辑
/etc/gitlab/gitlab.rb,设置唯一实例ID和监听端口(避免冲突):external_url 'http://gitlab-node1.example.com' # 每台节点域名/IP不同 unicorn['listen_address'] = '0.0.0.0:8080' # 监听端口依次为8080、8081、8082 gitlab_rails['gitlab_shell_ssh_port'] = 2222 # SSH端口依次为2222、2223、2224 - 重新配置并重启:使配置生效并重启GitLab服务:
sudo gitlab-ctl reconfigure sudo gitlab-ctl restart
6. 验证集群功能
- 访问GitLab:通过负载均衡器域名(如
gitlab.yourdomain.com)访问GitLab Web界面,使用管理员账号(默认root)登录。 - 测试高可用:停止某台GitLab实例服务(
sudo gitlab-ctl stop),检查负载均衡器是否将流量分发到其他正常节点;恢复实例后,验证数据同步情况。 - 检查组件状态:通过GitLab控制台(
Admin Area > Monitoring > Background Jobs)查看后台任务是否正常运行,确认数据库、缓存连接无异常。
注意事项
- 共享存储(可选):若需跨节点共享Git仓库数据,可配置NFS或GlusterFS作为共享存储,挂载到
/var/opt/gitlab/git-data目录(修改/etc/gitlab/gitlab.rb中的git_data_dirs配置)。 - 备份策略:配置GitLab自动备份(
sudo vim /etc/gitlab/gitlab.rb中设置gitlab_rails['backup_keep_time'] = 604800,保留7天备份),定期测试备份恢复流程。 - 监控与告警:使用Prometheus+Granafa或Zabbix监控GitLab集群状态(如CPU、内存、磁盘使用率,服务可用性),设置告警规则及时处理故障。