1. 项目概述
在CentOS 9环境下部署高可用存储集群是企业级IT基础设施建设的常见需求。通过corosync+pacemaker+pcs+iscsi的技术组合,我们可以构建一个具备自动故障转移能力的分布式存储系统。这种架构特别适合对数据可靠性要求较高的业务场景,如数据库后端存储、虚拟化平台共享存储等。
我在实际生产环境中多次部署过这类集群,发现CentOS 9相比前代版本在集群组件兼容性和性能方面都有明显提升。本文将分享从零开始搭建存储集群的完整流程,包括一些官方文档中未提及的实用技巧和排错经验。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 系统环境要求
建议使用两台配置相同的物理服务器作为集群节点,每台至少需要:
- 双网卡(一个用于业务通信,一个用于集群心跳)
- 8GB以上内存
- 100GB以上系统磁盘
- 额外的磁盘或阵列用于ISCSI存储
操作系统选择CentOS 9 Stream最小化安装,安装时需注意:
bash复制# 安装时选择最小化安装并添加以下软件组
dnf groupinstall "Development Tools"
2.2 网络配置要点
集群对网络延迟非常敏感,建议采用以下配置:
- 为集群通信配置独立网段(如192.168.100.0/24)
- 禁用防火墙或配置白名单规则:
bash复制firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload
- 配置主机名解析(/etc/hosts):
code复制192.168.100.101 node1
192.168.100.102 node2
注意:确保所有节点间可以互相ping通,且时间同步(建议配置chronyd)
3. 核心组件安装与配置
3.1 软件包安装
执行以下命令安装所有必要组件:
bash复制dnf install -y corosync pacemaker pcs fence-agents-all \
targetcli iscsi-initiator-utils
关键组件说明:
- corosync:集群通信框架
- pacemaker:集群资源管理器
- pcs:集群配置工具
- targetcli:ISCSI目标服务器配置工具
- iscsi-initiator-utils:ISCSI客户端工具
3.2 Corosync配置
生成authkey文件并分发到所有节点:
bash复制corosync-keygen
scp /etc/corosync/authkey root@node2:/etc/corosync/
配置/etc/corosync/corosync.conf:
conf复制totem {
version: 2
cluster_name: mycluster
transport: knet
crypto_cipher: aes256
crypto_hash: sha256
}
nodelist {
node {
ring0_addr: node1
nodeid: 1
}
node {
ring0_addr: node2
nodeid: 2
}
}
quorum {
provider: corosync_votequorum
two_node: 1
}
logging {
to_logfile: yes
logfile: /var/log/cluster/corosync.log
}
3.3 Pacemaker与PCS配置
启动并启用服务:
bash复制systemctl enable --now pcsd
pcs cluster auth node1 node2 -u hacluster -p yourpassword
pcs cluster setup --name mycluster node1 node2
pcs cluster start --all
pcs property set stonith-enabled=false # 测试环境可禁用STONITH
4. ISCSI存储配置
4.1 创建ISCSI目标
在存储节点上配置:
bash复制targetcli
/> backstores/block create name=cluster_disk dev=/dev/sdb
/> iscsi/create iqn.2023-08.cluster:storage
/> iscsi/iqn.2023-08.cluster:storage/tpg1/luns create /backstores/block/cluster_disk
/> iscsi/iqn.2023-08.cluster:storage/tpg1/acls create iqn.2023-08.cluster:node1
/> iscsi/iqn.2023-08.cluster:storage/tpg1/acls create iqn.2023-08.cluster:node2
/> saveconfig
/> exit
4.2 客户端配置
在所有节点上配置initiator:
bash复制echo "InitiatorName=iqn.2023-08.cluster:node1" > /etc/iscsi/initiatorname.iscsi # node1上
systemctl restart iscsid
iscsiadm -m discovery -t st -p storage_node_ip
iscsiadm -m node -l
5. 集群资源管理
5.1 创建集群资源
使用pcs配置VIP和ISCSI资源:
bash复制pcs resource create ClusterIP ocf:heartbeat:IPaddr2 \
ip=192.168.100.100 cidr_netmask=24 op monitor interval=30s
pcs resource create ClusterFS Filesystem \
device="/dev/disk/by-path/ip-storage_node_ip:3260-iscsi-iqn.2023-08.cluster:storage-lun-1" \
directory="/mnt/cluster" fstype="ext4" --group cluster_resources
5.2 配置资源约束
设置资源粘性和启动顺序:
bash复制pcs constraint colocation add ClusterFS with ClusterIP INFINITY
pcs constraint order ClusterIP then ClusterFS
pcs resource defaults resource-stickiness=100
6. 测试与验证
6.1 故障转移测试
手动触发故障转移观察效果:
bash复制pcs cluster standby node1 # 将node1设为备用
pcs status # 观察资源是否迁移到node2
pcs cluster unstandby node1 # 恢复node1
6.2 监控与日志
关键监控命令:
bash复制pcs status --full
crm_mon -1
journalctl -u corosync -u pacemaker -f
7. 常见问题与解决方案
7.1 脑裂问题处理
配置仲裁设备避免脑裂:
bash复制pcs quorum device add model net \
host=192.168.100.100 algorithm=ffsplit
7.2 ISCSI连接问题
常见排查步骤:
- 检查initiator名称是否匹配
- 验证防火墙规则
- 检查多路径配置(如使用多路径)
7.3 资源启动失败
典型错误处理:
bash复制pcs resource debug-start ClusterFS # 调试资源启动
pcs resource cleanup ClusterFS # 清除失败状态
8. 性能优化建议
-
网络优化:
- 使用Jumbo frames(MTU 9000)
- 绑定多网卡增加带宽
-
存储优化:
bash复制pcs resource update ClusterFS options="noatime,nodiratime,data=writeback" -
监控增强:
bash复制pcs property set cluster-recheck-interval=2min
我在实际部署中发现,CentOS 9的默认内核参数对高可用集群非常友好,但建议根据工作负载调整以下参数:
bash复制echo "net.ipv4.tcp_keepalive_time = 300" >> /etc/sysctl.conf
sysctl -p
对于需要更高性能的场景,可以考虑使用RDMA替代传统ISCSI,这需要额外的硬件支持但能显著降低延迟。另外,定期执行pcs cluster verify可以提前发现配置问题。
