一、主从架构(Master-Slave)配置
主从架构是Jenkins高可用的基础模式,Master节点负责任务调度、监控,Slave节点(Agent)执行具体构建任务。通过分布式构建将负载分散到多个Slave,避免单节点过载。
sudo apt update && sudo apt install -y openjdk-11-jdk jenkins安装Jenkins,启动服务并设置开机自启(sudo systemctl enable --now jenkins)。首次登录后,在Manage Jenkins -> Configure Global Security中启用远程访问(如设置随机端口50000)。docker run -d --name jenkins-slave -v /usr/local/jenkins:/usr/local/jenkins bolingcavalry/openjdk-with-sshpass:8u232 java -jar /usr/local/jenkins/agent.jar -jnlpUrl http://<Master-IP>:8080/computer/<slave-name>/slave-agent.jnlp -secret <Secret> -workDir "/usr/local/jenkins"(需替换Master IP、Slave名称及Secret,Secret从Master的Agent配置页面获取);②界面添加:在Master的Manage Jenkins -> Manage Nodes中选择“Permanent Agent”,填写节点名称、标签(如linux)、并发数,保存后通过SSH协议连接Slave(需提前配置SSH密钥认证)。二、负载均衡与故障转移
负载均衡器将流量分发到多个Jenkins实例(Master或Slave),当某个实例故障时,自动将请求转移到健康节点,确保服务连续性。
sudo apt install nginx),编辑/etc/nginx/sites-available/jenkins,添加upstream jenkins { server <Master-IP>:8080; server <Slave-IP>:8080; }(可添加多个节点),然后配置server { listen 80; location / { proxy_pass http://jenkins; } },启用配置(sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/)并重启Nginx(sudo systemctl restart nginx)。sudo apt install haproxy),编辑/etc/haproxy/haproxy.cfg,添加frontend jenkins { bind *:8080; default_backend jenkins_servers; } backend jenkins_servers { balance roundrobin; server jenkins1 <Master-IP>:8080; server jenkins2 <Slave-IP>:8080; },重启HAProxy(sudo systemctl restart haproxy)。三、共享存储(数据一致性保障)
共享存储确保所有Master/Slave节点访问相同的Jenkins工作目录(/var/jenkins_home)和配置,避免数据丢失或冲突。常用方案为NFS(网络文件系统):
sudo apt install nfs-kernel-server),编辑/etc/exports添加/var/jenkins_home *(rw,sync,no_root_squash)(允许所有节点读写),执行sudo exportfs -a使配置生效,重启NFS服务(sudo systemctl restart nfs-server)。sudo apt install nfs-common),创建本地目录(sudo mkdir -p /usr/local/jenkins),挂载共享目录(sudo mount -t nfs <Master-IP>:/var/jenkins_home /usr/local/jenkins),添加开机自动挂载(编辑/etc/fstab添加<Master-IP>:/var/jenkins_home /usr/local/jenkins nfs defaults 0 0)。四、容器化部署(动态扩缩容与高可用)
容器化部署(如Docker Compose或Kubernetes)可实现Jenkins实例的快速扩缩容、动态调度,提升高可用性。
docker-compose.yml文件,内容如下:version: '3'
services:
jenkins-master:
image: jenkinsci/blueocean
ports:
- "8080:8080"
- "50000:50000"
volumes:
- jenkins-data:/var/jenkins_home
jenkins-slave:
image: bolingcavalry/jenkins-agent
environment:
- JENKINS_URL=http://jenkins-master:8080
- JENKINS_SECRET=<Secret>
- JENKINS_AGENT_NAME=slave-node
volumes:
- /usr/local/jenkins:/usr/local/jenkins
volumes:
jenkins-data:
启动集群(docker-compose up -d),通过修改docker-compose.yml(如增加jenkins-slave服务副本数)动态扩展Slave节点。/var/jenkins_home),StatefulSet管理Jenkins Agent(动态扩缩容),通过Service暴露Master节点,实现负载均衡和自动故障恢复。五、监控与告警(及时发现故障)
监控系统实时跟踪Jenkins集群的健康状态(如Master节点CPU/内存使用率、Slave节点在线状态、任务队列长度),当检测到异常时触发告警,便于快速响应。
jenkins_job_status、jenkins_node_online),Grafana创建仪表盘展示这些指标,Alertmanager配置告警规则(如“Master节点CPU使用率超过80%持续5分钟”则发送邮件/Slack告警)。六、备份与恢复(数据安全保障)
定期备份Jenkins关键数据(配置文件、作业配置、构建产物、插件),确保故障后可快速恢复。
/var/jenkins_home目录(包含所有配置和构建数据)、/etc/default/jenkins(Jenkins配置文件)、/var/lib/jenkins(插件和依赖)。rsync或tar命令定期备份到远程存储(如NFS、云存储OSS),例如:rsync -avz /var/jenkins_home user@backup-server:/backup/jenkins/。七、故障切换流程
当Master节点故障时,通过以下流程快速切换到备用节点: