Red Hat Enterprise Linux 8.4 集群管理实战指南 从基础配置到高可用方案解决单点故障与性能瓶颈问题

引言:RHEL 8.4 集群管理的核心价值
在现代企业IT架构中,系统的高可用性和可扩展性至关重要。Red Hat Enterprise Linux 8.4 提供了强大的集群管理功能,通过 Pacemaker 和 Corosync 等工具,能够有效解决单点故障和性能瓶颈问题。本指南将从基础配置入手,逐步深入到高可用方案的实施,帮助您构建稳定、高效的集群环境。
第一部分:环境准备与基础配置
1.1 系统要求与规划
在部署集群之前,需要明确以下几点:
节点数量
:至少需要两个节点,建议奇数个节点(如3个)以实现更好的仲裁。
网络配置
:每个节点至少需要两个网络接口,一个用于公共网络,一个用于集群内部通信(心跳)。
存储
:共享存储(如iSCSI、FC)或分布式文件系统(如GFS2)。
操作系统
:所有节点必须安装相同版本的 RHEL 8.4。
1.2 安装必要的软件包
在所有节点上安装集群管理软件包:
sudo dnf install pacemaker corosync pcs psmisc
pacemaker
:集群资源管理器,负责监控和管理资源。
corosync
:集群消息层,处理节点间通信。
pcs
:Pacemaker 配置系统,提供命令行工具。
psmisc
:包含
killall
等工具,用于资源停止。
1.3 配置主机名解析
确保所有节点可以通过主机名互相访问。编辑
/etc/hosts
文件,添加所有节点的 IP 和主机名:
192.168.1.10 node1.example.com node1
192.168.1.11 node2.example.com node2
192.168.1.12 node3.example.com node3
1.4 配置防火墙
集群通信需要特定的端口,配置防火墙允许以下端口:
sudo firewall-cmd –permanent –add-service=high-availability
sudo firewall-cmd –reload
或者手动添加端口:
sudo firewall-cmd –permanent –add-port=3121/tcp
sudo firewall-cmd –permanent –add-port=5403/tcp
sudo firewall-cmd –permanent –add-port=5404/udp
sudo firewall-cmd –permanent –add-port=5405/udp
sudo firewall-cmd –reload
1.5 配置时间同步
集群节点间的时间必须同步,使用 chrony 配置:
sudo dnf install chrony
sudo systemctl enable –now chronyd
在所有节点上检查时间同步状态:
chronyc sources
第二部分:集群初始化与配置
2.1 配置 pcsd 服务
在所有节点上启用并启动 pcsd 服务:
sudo systemctl enable –now pcsd
2.2 设置 hacluster 用户密码
在所有节点上为
hacluster
用户设置相同的密码:
sudo passwd hacluster
2.3 验证节点连接
在任意节点上执行以下命令,验证与其他节点的连接:
sudo pcs host auth node1 node2 node3 -u hacluster
2.4 创建集群
在任意节点上创建集群:
sudo pcs cluster setup mycluster node1 node2 node3
2.5 启动集群
sudo pcs cluster start –all
2.6 设置集群自启动
sudo pcs cluster enable –all
2.7 检查集群状态
sudo pcs status
输出示例:
Cluster name: mycluster
WARNINGS:
No stonith devices and stonith-enabled is false
Stack: corosync
Current DC: node1 (version 1.1.23-1.el8-9acf6f65a) – partition with quorum
Last updated: Fri Jan 14 10:00:00 2022
Last change: Fri Jan 14 09:55:00 2022 by root via crm_resource on node1

2 nodes configured
0 resource resources configured

Online: [ node1 node2 node3 ]

No resources

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
第三部分:资源管理与配置
3.1 资源类型概述
Pacemaker 支持多种资源类型:
Primitive
:单个资源,如虚拟 IP、服务等。
Group
:资源组,组内资源按顺序启动和停止。
Clone
:克隆资源,可在多个节点上同时运行。
Multi-state
:多状态资源,如主/备数据库。
3.2 配置 STONITH( fencing )
STONITH(Shoot The Other Node In The Head)用于防止脑裂。在测试环境中可以禁用:
sudo pcs property set stonith-enabled=false
在生产环境中,应配置 STONITH 设备,例如 IPMI 或智能 PDU。
3.3 配置虚拟 IP 资源
创建虚拟 IP 资源,用于对外提供服务:
sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s
3.4 配置 Web 服务资源
以 Apache HTTP 服务为例:
sudo pcs resource create web_server systemd:httpd op monitor interval=30s
3.5 将资源加入组
将虚拟 IP 和 Web 服务加入同一个组,确保它们在同一节点运行:
sudo pcs resource group add web_group virtual_ip web_server
3.6 配置资源约束
配置资源约束,确保虚拟 IP 和 Web 服务在同一节点:
sudo pcs constraint colocation add web_server with virtual_ip INFINITY
sudo pcs constraint order virtual_ip then web_server
3.7 检查资源状态
sudo pcs status resources
输出示例:
virtual_ip (ocf::heartbeat:IPaddr2): Started node1
web_server (systemd:httpd): Started node1
第四部分:高可用方案与故障转移
4.1 故障转移测试
手动停止一个节点的集群服务:
sudo pcs cluster stop node2
观察资源是否自动迁移到其他节点:
sudo pcs status
4.2 配置资源粘性
资源粘性(Stickiness)决定资源是否倾向于留在当前节点:
sudo pcs resource meta virtual_ip resource-stickiness=100
4.3 配置故障转移策略
配置资源在节点故障时的行为:
sudo pcs resource meta web_server migration-threshold=2
4.4 配置资源监控
为资源添加更详细的监控:
sudo pcs resource update web_server op monitor interval=10s timeout=30s
第五部分:性能优化与瓶颈解决
5.1 网络性能优化
调整 Corosync 网络参数
:编辑
/etc/corosync/corosync.conf
,调整
token
和
ringnumber
参数。
使用专用网络
:将集群心跳网络与公共网络分离。
5.2 存储性能优化
使用高性能存储
:如 NVMe SSD。
调整文件系统参数
:对于 GFS2 文件系统,调整
lockproto
和
locktable
参数。
5.3 资源调度优化
配置资源优先级
:使用
priority
属性控制资源启动顺序。
使用负载均衡
:在多个节点上部署克隆资源。
5.4 监控与调优工具
pcs status
:查看集群状态。
crm_mon
:实时监控集群资源。
corosync-objctl
:查看 Corosync 配置。
第六部分:高级配置与最佳实践
6.1 配置 GFS2 共享文件系统
6.1.1 准备共享存储
确保所有节点都能访问共享存储设备,例如
/dev/sdb
。
6.1.2 创建 LVM 卷
sudo pvcreate /dev/sdb
sudo vgcreate shared_vg /dev/sdb
sudo lvcreate -L 10G -n shared_lv shared_vg
6.1.3 配置 CLVM
sudo lvchange -ay shared_vg/shared_lv
6.1.4 创建 GFS2 文件系统
sudo mkfs.gfs2 -p lock_dlm -j 3 -t mycluster:shared /dev/shared_vg/shared_lv
-p lock_dlm
:使用分布式锁管理器。
-j 3
:日志数量,建议与节点数相同。
-t mycluster:shared
:文件系统名称。
6.1.5 挂载文件系统
sudo mkdir /shared
sudo mount /dev/shared_vg/shared_lv /shared
6.1.6 配置集群资源
sudo pcs resource create shared_fs ocf:heartbeat:Filesystem device=”/dev/shared_vg/shared_lv” directory=”/shared” fstype=”gfs2″ op monitor interval=10s
6.2 配置 Apache + GFS2 高可用 Web 服务
6.2.1 创建资源组
sudo pcs resource group add web_group virtual_ip shared_fs web_server
6.2.2 验证配置
sudo pcs status
6.3 配置 MariaDB 高可用
6.3.1 准备数据库存储
使用 GFS2 文件系统或共享存储。
6.3.2 安装 MariaDB
在所有节点上安装 MariaDB:
sudo dnf install mariadb-server
6.3.3 配置 MariaDB
编辑
/etc/my.cnf.d/server.cnf
,确保所有节点使用相同的配置:
[mysqld]
bind-address=0.0.0.0
datadir=/shared/mysql
socket=/var/lib/mysql/mysql.sock
6.3.4 初始化数据库
在第一个节点上初始化数据库:
sudo mysql_install_db –user=mysql –datadir=/shared/mysql
6.3.5 配置集群资源
sudo pcs resource create mariadb systemd:mariadb op monitor interval=30s
sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.1.101 cidr_netmask=24 op monitor interval=30s
sudo pcs resource group add db_group virtual_ip mariadb
6.4 配置 STONITH(生产环境)
6.4.1 配置 IPMI STONITH
sudo pcs stonith create ipmi_fence fence_ipmilan pcmk_host_list=”node1 node2 node3″ ipaddr=192.168.1.200 login=admin password=secret op monitor interval=60s
6.4.2 启用 STONITH
sudo pcs property set stonith-enabled=true
第七部分:监控与维护
7.1 日常监控命令
pcs status
:查看集群状态。
crm_mon -1
:一次性输出集群状态。
corosync-cfgtool -s
:查看 Corosync 网络状态。
7.2 日志分析
/var/log/pacemaker.log
:Pacemaker 日志。
/var/log/corosync.log
:Corosync 日志。
7.3 备份与恢复
7.3.1 备份集群配置
sudo pcs cluster cib /tmp/cluster_config.xml
7.3.2 恢复集群配置
sudo pcs cluster cib-push /tmp/cluster_config.xml
7.4 集群升级
7.4.1 滚动升级
在第一个节点上升级系统:
sudo dnf update
sudo reboot
等待节点重新加入集群。
重复上述步骤,直到所有节点升级完成。
7.4.2 验证集群状态
sudo pcs status
第八部分:常见问题与解决方案
8.1 节点无法加入集群
原因
:防火墙未正确配置或主机名解析失败。
解决方案
:
检查防火墙规则:
sudo firewall-cmd –list-all
检查主机名解析:
ping node1
8.2 资源启动失败
原因
:资源配置错误或依赖缺失。
解决方案
:
查看资源日志:
sudo pcs resource debug-start resource_name
检查资源约束:
sudo pcs constraint show
8.3 脑裂问题
原因
:STONITH 未配置或网络分区。
解决方案
:
配置 STONITH 设备。
检查网络连接。
8.4 性能瓶颈
原因
:网络延迟或存储 I/O 瓶颈。
解决方案
:
使用
ethtool
优化网络:
sudo ethtool -K eth0 tx off rx off
使用
iostat
监控存储 I/O:
iostat -x 1
第九部分:最佳实践与建议
9.1 网络分离
公共网络
:用于客户端访问。
集群网络
:用于节点间心跳和数据同步。
存储网络
:用于访问共享存储。
9.2 配置管理
使用版本控制
:将集群配置文件纳入 Git 管理。
自动化部署
:使用 Ansible 等工具自动化集群部署。
9.3 安全加固
最小化安装
:只安装必要的软件包。
定期更新
:及时应用安全补丁。
访问控制
:限制对集群节点的访问。
9.4 文档与培训
详细记录
:记录所有配置变更和故障处理过程。
定期演练
:定期进行故障转移演练,确保团队熟悉操作。
第十部分:总结
通过本指南,您应该能够:
部署基础集群
:完成 RHEL 8.4 集群的初始化和基础配置。
管理集群资源
:熟练配置和管理各种资源类型。
实现高可用
:通过故障转移和资源约束实现服务的高可用性。
解决性能瓶颈
:通过优化网络、存储和资源调度提升集群性能。
维护与监控
:掌握日常监控、备份和升级方法。
集群管理是一个持续的过程,需要根据业务需求和技术发展不断调整和优化。建议定期审查集群配置,关注 Red Hat 官方文档和社区最佳实践,确保集群始终处于最佳状态。