前置环境准备
在开始配置高可用GitLab之前,需要准备至少两台运行Linux系统的服务器,推荐选择CentOS 7及以上版本或者Ubuntu 18.04及以上版本,两台服务器需要处于同一内网环境,且网络互通。同时需要准备一个虚拟IP地址,用于高可用服务的统一访问入口,还需要确保服务器有足够的磁盘空间用于存储代码数据,建议单台服务器磁盘空间不低于100G。

依赖软件安装
首先在两台服务器上都需要安装基础依赖软件,以CentOS系统为例,执行以下命令安装所需依赖:
# 安装基础依赖 yum install -y curl policycoreutils openssh-server openssh-clients postfix # 启动ssh服务并设置开机自启 systemctl enable sshd systemctl start sshd # 启动postfix邮件服务并设置开机自启,GitLab需要邮件服务发送通知 systemctl enable postfix systemctl start postfix
GitLab基础服务部署
接下来在两台服务器上分别部署GitLab服务,首先添加GitLab的官方仓库,然后安装GitLab社区版。安装过程中需要指定服务器的域名或者IP地址,这里先暂时填写各自服务器的实际IP,后续高可用配置会统一修改为虚拟IP。
安装GitLab
执行以下命令添加仓库并安装GitLab:
# 添加GitLab仓库 curl -fsSL https://packages.gitlab.com/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/gitlab-archive-keyring.gpg echo "deb [signed-by=/usr/share/keyrings/gitlab-archive-keyring.gpg] https://packages.gitlab.com/gitlab/gitlab-ce/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gitlab_gitlab-ce.list # 更新软件源并安装GitLab apt-get update apt-get install -y gitlab-ce # 初始化GitLab配置,此处先填写当前服务器IP gitlab-ctl reconfigure
验证基础服务
安装完成后,通过浏览器访问服务器的IP地址,能正常打开GitLab的登录页面则说明基础服务部署成功。默认的管理员账号是root,初始密码存储在/etc/gitlab/initial_root_password文件中,登录后可以先修改管理员密码,创建测试项目验证代码推送、拉取功能是否正常。
高可用组件配置
GitLab的高可用配置核心是通过Keepalived实现虚拟IP的漂移,同时结合DRBD或者共享存储实现数据同步,这里以Keepalived+DRBD的方案为例进行配置,确保两台服务器的GitLab数据保持一致,当主节点故障时虚拟IP自动漂移到备节点,服务自动恢复。
DRBD数据同步配置
首先在两台服务器上安装DRBD软件,然后配置DRBD资源,将两台服务器的指定磁盘分区作为DRBD的存储设备,实现数据实时同步。以下是DRBD的配置示例:
# 安装DRBD
yum install -y drbd84-utils kmod-drbd84
# 加载DRBD内核模块
modprobe drbd
# 编辑DRBD配置文件,路径为/etc/drbd.d/gitlab.res
resource gitlab {
protocol C;
on server1 {
device /dev/drbd0;
disk /dev/sdb1; # 替换为实际的数据磁盘分区
address 192.168.0.101:7788; # 主节点IP和端口
meta-disk internal;
}
on server2 {
device /dev/drbd0;
disk /dev/sdb1; # 替换为实际的数据磁盘分区
address 192.168.0.102:7788; # 备节点IP和端口
meta-disk internal;
}
}
# 初始化DRBD资源
drbdadm create-md gitlab
# 启动DRBD服务
systemctl start drbd
# 在主节点上设置为主设备
drbdadm primary --force gitlab
# 格式化DRBD设备
mkfs.ext4 /dev/drbd0
# 挂载DRBD设备到GitLab的数据目录
mount /dev/drbd0 /var/opt/gitlab
Keepalived虚拟IP配置
安装Keepalived服务,配置虚拟IP的漂移规则,主节点优先级高于备节点,当主节点故障时自动切换到备节点。以下是Keepalived的配置示例:
# 安装Keepalived
yum install -y keepalived
# 编辑主节点配置文件,路径为/etc/keepalived/keepalived.conf
global_defs {
router_id gitlab_ha_1
}
vrrp_instance VI_1 {
state MASTER
interface eth0 # 替换为实际网卡名称
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100 # 虚拟IP地址
}
}
# 编辑备节点配置文件,priority设置为90,state设置为BACKUP
global_defs {
router_id gitlab_ha_2
}
vrrp_instance VI_1 {
state BACKUP
interface eth0 # 替换为实际网卡名称
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.100 # 虚拟IP地址
}
}
# 启动Keepalived服务并设置开机自启
systemctl enable keepalived
systemctl start keepalived
GitLab配置调整
修改GitLab的配置文件/etc/gitlab/gitlab.rb,将external_url修改为虚拟IP地址,同时配置GitLab的数据目录为DRBD挂载的目录,然后重新加载配置:
# 编辑gitlab.rb配置文件 external_url 'http://192.168.0.100' # 虚拟IP地址 gitlab_rails['gitlab_data_dir'] = "/var/opt/gitlab" # 重新加载配置 gitlab-ctl reconfigure # 重启GitLab服务 gitlab-ctl restart
故障切换验证
配置完成后,通过虚拟IP访问GitLab服务,能正常打开页面则说明配置生效。接下来可以模拟主节点故障,关闭主节点的GitLab服务或者关机,观察虚拟IP是否自动漂移到备节点,通过虚拟IP访问服务是否正常,验证高可用切换功能是否生效。
验证步骤
- 在主节点执行gitlab-ctl stop命令停止GitLab服务
- 在备节点执行ip addr命令查看虚拟IP是否已经漂移到备节点
- 通过浏览器访问虚拟IP,确认GitLab服务可以正常访问,之前创建的项目和数据都存在
- 恢复主节点服务后,虚拟IP会自动回到主节点,服务恢复正常
常见问题与优化
在配置过程中可能会遇到DRBD数据同步延迟、Keepalived切换不生效等问题,可以通过查看/var/log/messages日志排查问题。为了提升服务稳定性,可以定期备份GitLab数据,同时可以配置GitLab的监控告警,及时发现服务异常。如果团队规模较大,还可以考虑增加GitLab的Sidekiq队列服务和PostgreSQL数据库的冗余配置,进一步提升整体服务的可用性。