温馨提示×

如何在CentOS上实现Jenkins高可用

小樊
40
2025-11-16 03:26:00
栏目: 智能运维

在 CentOS 上实现 Jenkins 高可用的落地方案

一、总体架构与前置条件

  • 架构选型建议采用“Active/Standby 双 Master + 共享存储 + 外部负载均衡”来承载 Jenkins 控制器的故障切换,配合“分布式 Agent 集群”承载构建负载,避免单点。生产环境建议 Master 节点至少4 核 CPU、8GB 内存,更优为8 核 16GB+,并使用SSD降低 I/O 瓶颈。所有节点统一Java 版本(Jenkins 2.x 推荐 Java 11+),并确保节点间网络互通与时钟同步(NTP)。

二、共享数据与配置持久化

  • 选择一种“集中式、可被多实例挂载”的存储方案作为 Jenkins 主目录(JENKINS_HOME),常见有:NFS、CephFS、GlusterFS、云盘(如 CFS)。以 NFS 为例(两台 Master 均执行):
    • 安装 NFS 客户端:sudo yum install -y nfs-utils
    • 创建本地挂载点:sudo mkdir -p /var/lib/jenkins
    • 挂载共享目录(示例):sudo mount -t nfs 192.168.10.10:/data/jenkins /var/lib/jenkins
    • 开机自动挂载:将“192.168.10.10:/data/jenkins /var/lib/jenkins nfs defaults 0 0”写入 /etc/fstab
  • 权限与安全:
    • 建议运行 Jenkins 的系统用户为jenkins(UID/GID 一致),并确保共享目录对该用户可读写(如 chown -R jenkins:jenkins /var/lib/jenkins)。
    • 备份策略:对 JENKINS_HOME 做定期全量/增量备份(如每日 rsync 到备份服务器,或定时 tar 归档),并保留最近若干份历史版本以便回滚。

三、部署双 Master 与 Keepalived 故障切换

  • 安装与基础配置(两台 Master 均执行):
    • 安装 Jenkins(YUM 源方式):
      • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
      • sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
      • sudo yum install -y jenkins java-11-openjdk
    • 统一关键配置(/etc/sysconfig/jenkins):
      • 设置 JENKINS_HOME=/var/lib/jenkins(确保两节点一致)
      • 设置 JENKINS_PORT=8080(避免端口冲突,两台保持一致)
      • 可选:JENKINS_ARGS=“–httpListenAddress=127.0.0.1”(仅本地监听,由前端代理转发)
    • 启动服务:sudo systemctl enable --now jenkins
  • Keepalived 配置虚拟 IP(VIP)与健康检查(两台 Master 差异化配置):
    • 安装:sudo yum install -y keepalived
    • 示例配置 /etc/keepalived/keepalived.conf(MASTER1 与 MASTER2 的 state/priority/权重不同):
      • vrrp_instance VI_1 { state MASTER # MASTER2 改为 BACKUP interface eth0 # 按实际网卡名调整 virtual_router_id 51 priority 100 # MASTER2 设为 90 advert_int 1 unicast_src_ip 192.168.10.11 # 本机 IP unicast_peer { 192.168.10.12 } # 对端 IP virtual_ipaddress { 192.168.10.100/24 } track_script { jenkins_check } }
      • vrrp_script jenkins_check { script “/usr/bin/curl -f http://127.0.0.1:8080/login || exit 1” interval 5 weight -20 fall 3 rise 2 }
    • 启动:sudo systemctl enable --now keepalived
  • 说明:通过 VIP(如192.168.10.100)对外提供访问,Keepalived 负责主机故障时的自动漂移,共享存储确保切换后配置与任务不丢失

四、接入负载均衡与健康检查

  • 方案 A(四层高可用):在 VIP 前再加一层 LVS + Keepalived,实现更高可用与性能(可选,适合大规模或严格 SLA 场景)。
  • 方案 B(七层灵活转发):使用 Nginx/HAProxy 对 VIP 或两台 Master 做反向代理与健康检查,示例 Nginx 片段:
    • upstream jenkins { server 192.168.10.100:8080 max_fails=3 fail_timeout=30s;

      也可直连两台 Master:server 192.168.10.11:8080; server 192.168.10.12:8080;

      keepalive 32; } server { listen 80; 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; } }
  • 健康检查建议:对 /login/health 做 HTTP 探活,失败阈值与超时按实际网络与启动速度调整。

五、构建负载分摊与稳定性优化

  • 分布式 Agent 集群(多台构建机):
    • 在“Manage Jenkins → Manage Nodes and Clouds → New Node”创建 Agent,配置标签(Label)远程工作目录执行器数量等;连接方式可选:
      • SSH 启动:在 Master 上配置到 Agent 的免密登录,稳定且易于维护。
      • JNLP 启动:在 Agent 上运行 java -jar agent.jar -jnlpUrl http://jenkins/computer//slave-agent.jnlp,适合跨网段或防火墙受限环境。
    • 按业务类型为 Agent 打标签,Job 通过标签选择节点,提升资源利用率与并发能力。
  • 稳定性与性能要点:
    • 调整 JVM 堆大小(如 -Xms/-Xmx),避免 OOM;结合节点资源设置并发构建数上限,防止过载。
    • 定期更新/清理插件,移除未使用插件;必要时使用国内插件镜像源加速。
    • 定期清理旧构建与制品,避免磁盘被占满;对大仓库适当延长 Git Clone 超时
    • 建议接入监控告警(如 Prometheus + Grafana 采集 Jenkins 指标与系统指标),并设置日志轮转(logrotate)。

0