一、负载均衡配置前的准备工作
curl、openssh-server、postfix(用于邮件通知)等基础依赖;安装负载均衡器(如Nginx、HAProxy)。二、选择并配置负载均衡器 负载均衡器的作用是将流量分发到多个GitLab实例,常见选项为Nginx和HAProxy:
sudo yum install -y epel-release && sudo yum install -y nginxsudo apt update && sudo apt install -y nginx/etc/nginx/conf.d/gitlab.conf),添加upstream块定义后端GitLab实例组,并配置server块监听端口、转发请求:upstream gitlab {
server gitlab1.example.com; # GitLab实例1的域名/IP
server gitlab2.example.com; # GitLab实例2的域名/IP
# 可添加更多实例
}
server {
listen 80;
server_name gitlab.example.com; # 负载均衡器的域名
location / {
proxy_pass http://gitlab; # 转发到upstream组
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;
}
}
可选优化:
health_check指令(Nginx Plus)或第三方模块,自动剔除故障实例。ip_hash指令(如upstream gitlab { ip_hash; server ...; })。sudo systemctl start nginx
sudo systemctl enable nginx
sudo yum install -y haproxysudo apt update && sudo apt install -y haproxy/etc/haproxy/haproxy.cfg),定义frontend(监听端口)和backend(后端实例组):global
daemon
maxconn 256
defaults
mode http
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
frontend http-in
bind *:80
default_backend servers
backend servers
balance roundrobin # 轮询算法(可选:leastconn最少连接、source源IP哈希)
server server1 gitlab1.example.com:80 check # 检查实例健康状态
server server2 gitlab2.example.com:80 check
sudo systemctl start haproxy
sudo systemctl enable haproxy
三、配置GitLab实例适配负载均衡 每台GitLab实例需调整配置,确保能协同工作并正确处理转发请求:
external_url:
编辑/etc/gitlab/gitlab.rb,设置统一的访问地址(负载均衡器的域名/IP):external_url 'http://gitlab.example.com'
unicorn['listen_address'] = "0.0.0.0:8080" # Unicorn端口(默认8080,可自定义)
gitlab_rails['gitlab_shell_ssh_port'] = 2222 # SSH端口(默认22,需与负载均衡器配置一致)
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
四、配置数据库与缓存高可用 GitLab的数据库(PostgreSQL)和缓存(Redis)需支持高可用,避免单点故障:
gitlab-db-primary)和从服务器(如gitlab-db-secondary),实现数据同步。
postgresql.conf(wal_level = replica)、pg_hba.conf(允许从服务器连接),创建复制用户。recovery.conf(指向主服务器),启动复制。external_url需指向PostgreSQL主服务器,或通过PgBouncer等连接池管理连接。redis.conf(requirepass设置密码)。sentinel.conf(监控主节点、设置密码)。external_url需指向Redis Sentinel集群,或通过Twemproxy等代理管理连接。五、验证负载均衡配置
sudo systemctl status nginxsudo systemctl status haproxyhttp://gitlab.example.com),通过日志确认请求被分发到不同GitLab实例:# 查看Nginx访问日志
tail -f /var/log/nginx/access.log
# 查看HAProxy统计页面(需开启stats)
curl http://localhost:1936/stats
sudo gitlab-ctl stop),验证负载均衡器是否自动剔除故障实例并将流量分发到其他实例。六、高级优化(可选)