在现代 IT 架构中,集群技术已经成为保障服务稳定性、提升系统吞吐量的核心方案。无论是企业级应用的高可用需求,还是大数据场景的分布式计算,集群都扮演着至关重要的角色。本文将以 CentOS 7 为例,带你一步步搭建一个可用于生产环境的高可用集群,涵盖从环境准备到集群验证的全流程。
一、集群基础:你需要知道的核心概念
在开始实操前,我们先明确几个关键概念,避免后续操作中出现理解偏差:
- 集群(Cluster):由多台服务器(节点)组成的逻辑整体,对外呈现单一系统的特性
- 高可用(HA):通过冗余设计,确保服务在单节点故障时自动切换,减少停机时间
- 心跳检测:节点间通过网络交换状态信息,用于判断对方是否存活
- 资源:集群管理的对象,如 IP 地址、数据库服务、文件系统等
- ** fencing(隔离)**:当节点故障时,防止故障节点继续占用资源的安全机制
本文将搭建基于 Pacemaker+Corosync 的高可用集群,这是 Linux 环境中最成熟的开源高可用解决方案之一,支持几乎所有主流服务的高可用配置。
二、环境准备:集群搭建的前提条件
2.1 硬件与系统规划
我们需要至少 2 台服务器(生产环境建议 3 台及以上),配置如下:
| 节点名称 | IP 地址 | 角色 | 最低配置 |
|---|---|---|---|
| node1 | 192.168.1.100 | 主节点 / 备用节点 | 2 核 4G,50G 硬盘 |
| node2 | 192.168.1.101 | 备用节点 / 主节点 | 2 核 4G,50G 硬盘 |
操作系统统一使用 CentOS 7.9,确保所有节点系统版本一致,避免兼容性问题。
2.2 网络配置
-
设置静态 IP(所有节点):
bash
# 编辑网络配置文件(不同系统可能路径不同) vi /etc/sysconfig/network-scripts/ifcfg-ens33 # 关键配置项 BOOTPROTO=static IPADDR=192.168.1.100 # 对应节点IP NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=114.114.114.114 ONBOOT=yes -
配置主机名与 hosts 映射:
bash
# 设置主机名 hostnamectl set-hostname node1 # node2节点对应设置为node2 # 配置hosts文件 cat >> /etc/hosts << EOF 192.168.1.100 node1 192.168.1.101 node2 EOF -
测试节点连通性:
bash
ping node2 -c 3 # 在node1执行 ping node1 -c 3 # 在node2执行
2.3 系统环境优化
-
时间同步(集群节点时间差需控制在几秒内):
bash
# 安装chrony服务 yum install -y chrony systemctl enable --now chronyd # 查看同步状态 chronyc sources -
关闭不必要的服务:
bash
# 关闭防火墙(生产环境建议按需开放端口) systemctl stop firewalld systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config -
配置免密登录(集群管理需要):
bash
# 在node1生成密钥 ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa # 分发密钥到所有节点 ssh-copy-id node1 ssh-copy-id node2
三、集群部署:Pacemaker+Corosync 实战
3.1 安装集群组件
在所有节点执行以下命令安装必要组件:
bash
# 安装高可用组件
yum install -y pacemaker corosync pcs fence-agents resource-agents
# 启动pcsd服务(用于集群管理)
systemctl enable --now pcsd
# 设置hacluster用户密码(集群管理用户)
echo "123456" | passwd --stdin hacluster
3.2 集群初始化
在 node1 节点执行集群创建操作:
bash
# 认证集群节点
pcs cluster auth node1 node2 -u hacluster -p 123456 --force
# 创建集群(集群名称为mycluster)
pcs cluster setup --name mycluster node1 node2
# 启动集群服务
pcs cluster start --all
# 设置集群开机自启
pcs cluster enable --all
# 查看集群状态
pcs status
正常情况下,你会看到类似以下输出:
plaintext
Cluster name: mycluster
Stack: corosync
Current DC: node1 (version 1.1.23-1.el7_9.1-9acf116022) - partition with quorum
Last updated: Sun Nov 2 15:30:00 2025
Last change: Sun Nov 2 15:28:45 2025 by hacluster via crmd on node1
2 nodes configured
0 resources configured
Online: [ node1 node2 ]
No resources
3.3 配置集群基础参数
bash
# 禁用STONITH(测试环境,生产环境必须启用)
pcs property set stonith-enabled=false
# 配置Quorum策略(2节点集群需设置)
pcs property set no-quorum-policy=ignore
# 查看当前集群属性
pcs property list
注意:STONITH(Shoot The Other Node In The Head)是集群的安全机制,用于在节点故障时强制关闭故障节点,防止数据损坏。生产环境必须配置 fencing 设备并启用 STONITH。
四、资源配置:让集群管理你的服务
我们以 Nginx 服务为例,配置集群资源,实现服务的高可用。
4.1 在所有节点安装 Nginx
bash
yum install -y nginx
systemctl disable nginx # 禁止独立启动,由集群管理
4.2 创建集群资源
-
配置虚拟 IP 资源(服务访问入口):
bash
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.200 cidr_netmask=24 op monitor interval=30s -
配置 Nginx 服务资源:
bash
pcs resource create WebServer systemd:nginx op monitor interval=60s -
设置资源依赖关系(确保先启动 VIP 再启动 Nginx):
bash
pcs constraint colocation add WebServer with VirtualIP INFINITY pcs constraint order VirtualIP then WebServer -
查看资源状态:
bash
pcs status
此时资源应该都运行在同一个节点上(默认是第一个节点),类似以下状态:
plaintext
Online: [ node1 node2 ]
Full list of resources:
VirtualIP (ocf:heartbeat:IPaddr2): Started node1
WebServer (systemd:nginx): Started node1
五、故障测试:验证集群高可用能力
集群搭建完成后,必须进行故障测试,验证故障转移功能是否正常。
5.1 手动切换测试
bash
# 将node1设为备用状态(模拟节点故障)
pcs node standby node1
# 查看资源状态(资源应自动切换到node2)
pcs status
# 恢复node1节点
pcs node unstandby node1
5.2 服务故障测试
bash
# 在当前运行Nginx的节点停止服务
systemctl stop nginx
# 查看集群反应(应自动重启Nginx)
pcs status
5.3 网络故障测试
可以通过断开网络电缆或禁用网卡模拟网络故障:
bash
# 禁用网卡(模拟网络故障)
ifdown ens33
# 故障恢复后启用网卡
ifup ens33
在所有测试中,你应该能观察到:
- 故障发生后 30-60 秒内集群检测到异常
- 资源自动转移到健康节点
- 虚拟 IP 跟随服务一起迁移
- 客户端通过虚拟 IP 访问服务不受影响(可能有几秒中断)
六、生产环境注意事项
-
安全加固:
- 生产环境不要关闭防火墙,应开放必要端口(corosync 默认用 5404/5405 UDP 端口)
- 启用 SELinux 并配置正确的安全策略
- 定期更换 hacluster 用户密码
- 限制集群管理接口的访问权限
-
数据一致性:
- 对于有状态服务(如数据库),需使用共享存储(如 NFS、GlusterFS)或数据同步方案
- 配置合适的资源粘性(resource-stickiness),避免资源频繁切换
-
监控告警:
- 部署 Prometheus+Grafana 监控集群状态
- 配置 Zabbix 或 Nagios 监控节点和服务健康状态
- 设置关键事件告警(如资源切换、节点离线)
-
备份策略:
- 定期备份集群配置(
pcs config backup) - 备份关键服务的数据
- 测试备份恢复流程
- 定期备份集群配置(
七、总结
通过本文的步骤,你已经成功搭建了一个基于 Pacemaker+Corosync 的高可用集群,并实现了 Nginx 服务的故障自动转移。集群技术的核心价值在于通过冗余和自动化,最大限度减少服务中断时间,这对于企业级应用至关重要。
实际生产环境中,还需要根据具体业务场景进行优化,比如添加更多节点提高可靠性、配置更复杂的资源依赖关系、整合容器技术等。集群管理是一个持续迭代的过程,需要不断监控、测试和优化,才能真正发挥其高可用的价值。
希望本文能为你的集群搭建之路提供实用的参考,如有任何问题或建议,欢迎在评论区交流讨论!
1955

被折叠的 条评论
为什么被折叠?



