Jenkins如何在Linux上实现负载均衡
导读:Jenkins在Linux上的负载均衡实现指南 一、总体架构与适用场景 推荐采用外部负载均衡器 + 多实例/主从的组合:用 Nginx/HAProxy 统一暴露 80/443,后端分发到多个 Jenkins Master 或 Master...
Jenkins在Linux上的负载均衡实现指南
一、总体架构与适用场景
- 推荐采用外部负载均衡器 + 多实例/主从的组合:用 Nginx/HAProxy 统一暴露 80/443,后端分发到多个 Jenkins Master 或 Master+Slave 节点,实现入口高可用与吞吐提升。
- 构建任务的实际并行与弹性由 Master-Slave(Agent) 承担;负载均衡器只负责 HTTP 接入与故障转移。
- 在 Kubernetes 环境中,可用 Service/Ingress 暴露 Master,配合 Kubernetes 插件动态创建 Pod 代理(Agent) 实现弹性伸缩与调度。
二、方案一 外部负载均衡器 + 多个Jenkins实例(入门与高可用)
- 部署多个实例
- 在不同主机或同一主机不同端口部署多个 Jenkins。
- 修改实例端口:
- Debian/Ubuntu:编辑 /etc/default/jenkins,设置 JENKINS_PORT=“8080/8081”。
- CentOS/RHEL:编辑 /etc/sysconfig/jenkins,设置 JENKINS_PORT=“8080/8081”。
- 启动服务:
sudo systemctl restart jenkins。
- 配置 Nginx 作为负载均衡器
- 安装:
sudo apt-get install nginx(Debian/Ubuntu)或yum install nginx(CentOS/RHEL)。 - 配置示例(/etc/nginx/sites-available/default 或 /etc/nginx/nginx.conf):
upstream jenkins { server 192.168.1.11:8080; server 192.168.1.12:8081; # 可按需增加权重、max_fails、fail_timeout 等 } server { listen 80; server_name yourdomain.com; location / { proxy_pass http://jenkins; 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; } } - 启用:
sudo systemctl restart nginx & & sudo systemctl enable nginx。
- 安装:
- 配置 HAProxy 作为负载均衡器
- 安装:
sudo apt-get install haproxy或yum install haproxy。 - 配置示例(/etc/haproxy/haproxy.cfg):
frontend jenkins_front bind *:80 default_backend jenkins_back backend jenkins_back balance roundrobin server jenkins1 192.168.1.11:8080 check server jenkins2 192.168.1.12:8081 check - 启用:
sudo systemctl restart haproxy & & sudo systemctl enable haproxy。
- 安装:
- 可选启用 HTTPS
- 使用 Certbot:
sudo apt-get install certbot python3-certbot-nginx - 获取并安装证书:
sudo certbot --nginx -d yourdomain.com(自动修改 Nginx 配置启用 SSL/TLS)。
- 使用 Certbot:
三、方案二 Master-Slave 分布式构建(提升构建并发)
- 在 Master 添加 Agent(Linux 节点)
- 准备:各节点安装 JDK,创建 Jenkins 工作目录(如 /data/jenkinsworkspace),确保 Master 可 SSH 登录到 Agent。
- Master 控制台:Manage Jenkins → Manage Nodes and Clouds → New Node,类型选 Permanent Agent,填写:
- Name/Labels(如:linux、docker)
- Remote root directory(如:/data/jenkinsworkspace)
- Number of executors(建议与 CPU 线程数匹配)
- Launch method:常用 Launch agent via SSH
- 凭据:选择 SSH Username with private key,填入私钥;首次连接按提示 Trust SSH Host Key。
- 保存后启动 Agent,状态显示 Connected 即成功。
- 运行与调度
- 在 Job 配置中使用 Restrict where this project can be run 或 agent { label ‘linux’ } 将任务调度到指定标签的 Agent。
- 通过增加 Agent 数量 与合理设置 executors,提升并发构建能力。
四、方案三 Kubernetes 上的弹性负载均衡(进阶)
- 暴露 Master
- 创建 Service(示例):
apiVersion: v1 kind: Service metadata: name: jenkins namespace: jenkins spec: selector: app: jenkins ports: - port: 8080 targetPort: 8080 - 应用:
kubectl apply -f jenkins-service.yaml - 获取初始密码:
kubectl exec -it $(kubectl get pod -n jenkins -l app=jenkins -o jsonpath='{ .items[0].metadata.name} ') -n jenkins cat /var/jenkins_home/secrets/initialAdminPassword
- 创建 Service(示例):
- 动态 Agent
- 在 Master 安装 Kubernetes 插件,配置 Kubernetes Cloud,定义 Pod 模板(容器镜像、JDK、Maven/Git 等工具)。
- 运行 Pipeline 时,按需自动创建 Agent Pod,任务结束自动回收,实现弹性伸缩与资源隔离。
五、关键注意事项与最佳实践
- 会话粘滞与 CSRF
- 建议开启 Sticky Session(如 Nginx
ip_hash或 HAProxystick-table)以避免表单提交与 WebSockets 会话中断;同时启用 CSRF 保护 与 安全代理头(已在示例中包含 X-Real-IP/X-Forwarded-For/X-Forwarded-Proto)。
- 建议开启 Sticky Session(如 Nginx
- 健康检查与故障转移
- 为后端配置 HTTP 健康检查 与 失败重试/超时,确保异常节点自动摘除;必要时为关键路径配置 主动/被动备机。
- 数据与一致性
- 多 Master 场景需统一 JENKINS_HOME 存储(如 NFS、块存储或对象存储)并谨慎处理 Jenkins 配置与插件 的一致性;更推荐 Active-Passive 高可用而非多 Master 写并发。
- 安全加固
- 仅暴露 80/443,禁用实例直连;使用 强认证、RBAC、代理白名单 与 审计日志;证书采用 Let’s Encrypt 或企业 CA 签发并自动续期。
- 监控与容量规划
- 监控 CPU/内存/磁盘 IO/网络、构建队列长度 与 Agent 利用率;按峰值与增长趋势规划 实例数 与 executors,避免资源争用。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Jenkins如何在Linux上实现负载均衡
本文地址: https://pptw.com/jishu/767957.html
