从零开始:在 Linux 系统中搭建高可用集群的完整指南

【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道! 10w+人浏览 1.6k人参与

在现代 IT 架构中,集群技术已经成为保障服务稳定性、提升系统吞吐量的核心方案。无论是企业级应用的高可用需求,还是大数据场景的分布式计算,集群都扮演着至关重要的角色。本文将以 CentOS 7 为例,带你一步步搭建一个可用于生产环境的高可用集群,涵盖从环境准备到集群验证的全流程。

一、集群基础:你需要知道的核心概念

在开始实操前,我们先明确几个关键概念,避免后续操作中出现理解偏差:

  • 集群(Cluster):由多台服务器(节点)组成的逻辑整体,对外呈现单一系统的特性
  • 高可用(HA):通过冗余设计,确保服务在单节点故障时自动切换,减少停机时间
  • 心跳检测:节点间通过网络交换状态信息,用于判断对方是否存活
  • 资源:集群管理的对象,如 IP 地址、数据库服务、文件系统等
  • ** fencing(隔离)**:当节点故障时,防止故障节点继续占用资源的安全机制

本文将搭建基于 Pacemaker+Corosync 的高可用集群,这是 Linux 环境中最成熟的开源高可用解决方案之一,支持几乎所有主流服务的高可用配置。

二、环境准备:集群搭建的前提条件

2.1 硬件与系统规划

我们需要至少 2 台服务器(生产环境建议 3 台及以上),配置如下:

节点名称IP 地址角色最低配置
node1192.168.1.100主节点 / 备用节点2 核 4G,50G 硬盘
node2192.168.1.101备用节点 / 主节点2 核 4G,50G 硬盘

操作系统统一使用 CentOS 7.9,确保所有节点系统版本一致,避免兼容性问题。

2.2 网络配置

  1. 设置静态 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
    
  2. 配置主机名与 hosts 映射

    bash

    # 设置主机名
    hostnamectl set-hostname node1  # node2节点对应设置为node2
    
    # 配置hosts文件
    cat >> /etc/hosts << EOF
    192.168.1.100 node1
    192.168.1.101 node2
    EOF
    
  3. 测试节点连通性

    bash

    ping node2 -c 3  # 在node1执行
    ping node1 -c 3  # 在node2执行
    

2.3 系统环境优化

  1. 时间同步(集群节点时间差需控制在几秒内):

    bash

    # 安装chrony服务
    yum install -y chrony
    systemctl enable --now chronyd
    
    # 查看同步状态
    chronyc sources
    
  2. 关闭不必要的服务

    bash

    # 关闭防火墙(生产环境建议按需开放端口)
    systemctl stop firewalld
    systemctl disable firewalld
    
    # 关闭SELinux
    setenforce 0
    sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
    
  3. 配置免密登录(集群管理需要):

    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 创建集群资源

  1. 配置虚拟 IP 资源(服务访问入口):

    bash

    pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=192.168.1.200 cidr_netmask=24 op monitor interval=30s
    
  2. 配置 Nginx 服务资源

    bash

    pcs resource create WebServer systemd:nginx op monitor interval=60s
    
  3. 设置资源依赖关系(确保先启动 VIP 再启动 Nginx):

    bash

    pcs constraint colocation add WebServer with VirtualIP INFINITY
    pcs constraint order VirtualIP then WebServer
    
  4. 查看资源状态

    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 访问服务不受影响(可能有几秒中断)

六、生产环境注意事项

  1. 安全加固

    • 生产环境不要关闭防火墙,应开放必要端口(corosync 默认用 5404/5405 UDP 端口)
    • 启用 SELinux 并配置正确的安全策略
    • 定期更换 hacluster 用户密码
    • 限制集群管理接口的访问权限
  2. 数据一致性

    • 对于有状态服务(如数据库),需使用共享存储(如 NFS、GlusterFS)或数据同步方案
    • 配置合适的资源粘性(resource-stickiness),避免资源频繁切换
  3. 监控告警

    • 部署 Prometheus+Grafana 监控集群状态
    • 配置 Zabbix 或 Nagios 监控节点和服务健康状态
    • 设置关键事件告警(如资源切换、节点离线)
  4. 备份策略

    • 定期备份集群配置(pcs config backup
    • 备份关键服务的数据
    • 测试备份恢复流程

七、总结

通过本文的步骤,你已经成功搭建了一个基于 Pacemaker+Corosync 的高可用集群,并实现了 Nginx 服务的故障自动转移。集群技术的核心价值在于通过冗余和自动化,最大限度减少服务中断时间,这对于企业级应用至关重要。

实际生产环境中,还需要根据具体业务场景进行优化,比如添加更多节点提高可靠性、配置更复杂的资源依赖关系、整合容器技术等。集群管理是一个持续迭代的过程,需要不断监控、测试和优化,才能真正发挥其高可用的价值。

希望本文能为你的集群搭建之路提供实用的参考,如有任何问题或建议,欢迎在评论区交流讨论!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小辉编程充电站

技术路有你,打赏助我分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值