在Ubuntu下实现GitLab高可用性,可采用主从复制架构或共享存储架构,以下是具体步骤及关键配置:
在所有节点上执行:
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce
编辑/etc/gitlab/gitlab.rb
:
external_url 'http://gitlab-primary.example.com'
postgresql['enable'] = true
redis['enable'] = true
gitaly['enable'] = true
运行sudo gitlab-ctl reconfigure
重启服务。
在从节点上执行:
sudo apt-get install gitlab-ce
# 停止服务并清空数据
sudo gitlab-ctl stop
sudo rm -rf /var/opt/gitlab/postgresql/data/*
# 从主节点复制数据(需通过rsync或pg_basebackup)
# 示例:rsync -avz /var/opt/gitlab/postgresql/data/ user@主节点IP:/var/opt/gitlab/postgresql/data/
编辑/etc/gitlab/gitlab.rb
,关闭数据库和缓存服务:
postgresql['enable'] = false
redis['enable'] = false
添加Gitaly配置(指向主节点):
gitaly['listen_addr'] = '0.0.0.0:8075'
gitaly['token'] = 'your-secret-token' # 需与主节点一致
运行sudo gitlab-ctl reconfigure
。
在负载均衡服务器上编辑/etc/nginx/nginx.conf
:
upstream gitlab {
server 主节点IP:80;
server 从节点IP:80 backup; # 从节点设为backup
}
server {
listen 80;
server_name gitlab.example.com;
location / {
proxy_pass http://gitlab;
proxy_set_header Host $host;
}
}
重启Nginx:sudo systemctl restart nginx
。
wal_level = hot_standby
等参数)。若需多节点同时处理读写,可使用NFS/Ceph共享存储:
sudo apt-get install nfs-kernel-server
sudo nano /etc/exports
# 添加:/srv/gitlab *(rw,sync,no_subtree_check)
sudo exportfs -a
sudo apt-get install nfs-common
sudo mount -t nfs 共享存储IP:/srv/gitlab /var/opt/gitlab/git-data
/etc/gitlab/gitlab.rb
中git_data_dirs
指向共享路径。option httpchk
)或第三方工具(如Keepalived)实现主节点故障时自动切换。sudo gitlab-rake gitlab:backup:create
,并存储到异地。git clone
测试仓库读写是否正常。参考来源: