在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测试仓库读写是否正常。参考来源: