本文档风哥主要介绍Linux系统大规模Pacemaker高可用集群部署,包括Pacemaker基础概念、高可用集群原理、集群组件介绍、集群基础配置、资源管理配置、fencing配置以及实战案例等内容,风哥教程参考Linux官方文档Clusters、System administration等内容,适合系统管理员在生产环境中使用。
Part01-基础概念与理论知识
1.1 Pacemaker基础概念
Pacemaker是一个开源的高可用集群资源管理器,它可以管理集群中的资源,确保服务的高可用性。Pacemaker可以监控集群节点和资源的状态,当节点或资源出现故障时,自动将资源转移到健康的节点上。
- 资源管理:管理集群中的各种资源
- 故障检测:监控节点和资源的状态
- 故障转移:当节点或资源故障时,自动转移资源
- 资源约束:定义资源之间的关系和位置约束
- 集群配置:管理集群的配置信息
1.2 高可用集群原理
高可用集群是指通过多个节点组成的集群,确保服务的持续可用性。当一个节点出现故障时,其他节点可以接管服务,避免服务中断。
– 主动-被动集群:一个节点为活动节点,其他节点为备用节点
– 主动-主动集群:多个节点同时提供服务
– N+1集群:N个服务节点,1个备用节点
– N-to-1集群:多个服务节点共享一个备用节点
# 高可用集群指标
– 可用性:系统正常运行的时间比例
– 可靠性:系统在一定时间内正常运行的概率
– 可维护性:系统从故障中恢复的速度
– 故障转移时间:从故障发生到服务恢复的时间
1.3 集群组件介绍
Pacemaker高可用集群的主要组件:
- Corosync:集群通信层,负责节点间的通信和成员管理
- Pacemaker:集群资源管理器,负责资源的管理和故障转移
- PCS:Pacemaker命令行工具,用于集群配置和管理
- Fencing:隔离机制,用于隔离故障节点
- Resource Agents:资源代理,用于管理各种资源
Part02-生产环境规划与建议
2.1 集群架构设计
生产环境集群架构设计要点:
– 2节点集群:基本高可用配置
– 3节点集群:推荐配置,提供更好的可靠性
– 多节点集群:适用于大规模应用
# 集群拓扑
– 环形拓扑:所有节点通过环连接
– 星型拓扑:所有节点连接到中心节点
– 网状拓扑:每个节点都与其他节点直接连接
# 资源分配策略
– 主从模式:一个节点为主节点,其他为从节点
– 负载均衡模式:多个节点同时提供服务
– 故障转移模式:当主节点故障时,从节点接管
2.2 硬件要求
生产环境硬件要求:
– 相同配置:所有节点硬件配置应相同
– 冗余电源:避免电源故障
– 冗余网络:多网卡配置
– 足够的内存和CPU:满足应用需求
# 存储要求
– 共享存储:用于存储数据
– 冗余存储:RAID配置
– 备份存储:定期备份数据
# 网络要求
– 专用心跳网络:用于节点间通信
– 业务网络:用于客户端访问
– 管理网络:用于集群管理
2.3 网络设计
生产环境网络设计要点:
from PG视频:www.itpux.com
– 心跳网络:单独的网络,用于节点间通信
– 业务网络:用于客户端访问
– 管理网络:用于集群管理
# 网络配置
– 静态IP:所有节点使用静态IP
– 网络隔离:使用VLAN隔离不同网络
– 网络冗余:多网卡绑定
– 网络监控:监控网络状态
# 网络安全
– 防火墙:限制网络访问
– 加密通信:加密节点间通信
– 访问控制:限制管理网络访问
Part03-生产环境项目实施方案
3.1 集群基础配置
3.1.1 安装集群组件
$ sudo dnf install -y pacemaker corosync pcs fence-agents-all
# 启动pcsd服务
$ sudo systemctl start pcsd
$ sudo systemctl enable pcsd
# 设置hacluster用户密码
$ sudo passwd hacluster
Changing password for user hacluster.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
# 在所有节点上认证
$ sudo pcs host auth node1 node2 node3 -u hacluster
Password for hacluster@node1:
node1: Authorized
node2: Authorized
node3: Authorized
3.1.2 创建集群
$ sudo pcs cluster setup –name fgedu-cluster node1 node2 node3
Destroying cluster on更多学习教程公众号风哥教程itpux_com nodes: node1, node2, node3…
node1: Stopping Cluster (pacemaker)…
node2: Stopping Cluster (pacemaker)…
node3: Stopping Cluster (pacemaker)…
node1: Successfully destroyed cluster
node2: Successfully destroyed cluster
node3: Successfully destroyed cluster
Sending ‘pacemaker_remote authkey’ to ‘node1’, ‘node2’, ‘node3’
node1: successful distribution of the file ‘pacemaker_remote authkey’
node2: successful distribution of the file ‘pacemaker_remote authkey’
node3: successful distribution of the file ‘pacemaker_remote authkey’
Sending cluster config files to the nodes…
node1: Succeeded
node2: Succeeded
node3: Succeeded
Synchronizing pcsd certificates on nodes node1, node2, node3…
node1: Success
node2: Success
node3: Success
Restarting pcsd on the nodes…
node1: Success
node2: Success
node3: Success
# 启动集群
$ sudo pcs cluster start –all
node1: Starting Cluster (corosync)…
node2: Starting Cluster (corosync)…
node3: Starting Cluster (corosync)…
node1: Starting Cluster (pacemaker)…
node2: Starting Cluster (pacemaker)…
node3: Starting Cluster (pacemaker)…
# 查看集群状态
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node1 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 0 resources configured
Online: [ node1 node2 node3 ]
3.2 资源管理配置
3.2.1 创建资源
$ sudo pcs resource create virtual-ip ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 \
cidr_netmask=24 \
op monitor interval=30s
# 创建Web服务资源
$ sudo pcs resource create web-server systemd:httpd \
op monitor interval=30s
# 创建数据库资源
$ sudo pcs resource create mysql-server systemd:mysqld \
op monitor interval=30s
# 查看资源状态
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node1 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 3 resources configured
Online: [ node1 node2 node3 ]
Full list of resources:
virtual-ip (ocf::heartbeat:IPaddr2): Started node1
web-server (systemd:httpd): Started node1
mysql-server (systemd:mysqld): Started node1
3.2.2 创建资源组
$ sudo pcs resource group add web-group virtual-ip web-server
# 查看资源组状态
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node1 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 3 resources configured
Online: [ node1 node2 node3 ]
Full list of resources:
Resource Group: web-group
virtual-ip (ocf::heartbeat:IPaddr2): Started node1
web-server (systemd:httpd): Started node1
mysql-server (systemd:mysqld): Started node1
# 创建资源约束
$ sudo pcs constraint colocation add mysql-server with web-group INFINITY
$ sudo pcs constraint order web-group then mysql-server
# 查看约束
$ sudo pcs constraint
Location Constraints:
Ordering Constraints:
start web-group then start mysql-server (kind:Mandatory)
Colocation Constraints:
mysql-server with web-group (score:INFINITY)
Ticket Constraints:
3.3 fencing配置
3.3.1 配置fencing设备
$ sudo fence_virsh –help
# 配置fencing设备
$ sudo pcs stonith create fence-node1 fence_virsh \
pcmk_host_list=”node1″ \
ipaddr=”192.168.1.1″ \
login=”root” \
passwd=”fgedu123″ \
port=”node1″
$ sudo pcs stonith create fence-node2 fence_virsh \
pcmk_host_list=”node2″ \
ipaddr=”192.168.更多视频教程www.fgedu.net.cn1.1″ \
login=”root” \
passwd=”fgedu123″ \
port=”node2″
$ sudo pcs stonith create fence-node3 fence_virsh \
pcmk_host_list=”node3″ \
ipaddr=”192.168.1.1″ \
login=”root” \
passwd=”fgedu123″ \
port=”node3″
# 查看fencing设备
$ sudo pcs stonith list
fence-node1 (stonith:fence_virsh)
fence-node2 (stonith:fence_virsh)
fence-node3 (stonith:fence_virsh)
# 测试fencing设备
$ sudo pcs stonith test fence-node1 node1
fence-node1: ok
Part04-生产案例与实战讲解
4.1 Web服务高可用集群案例
4.1.1 企业级Web高可用集群
# 环境:3台服务器
# 目标:实现Web服务的高可用
# 1. 安装Apache
$ sudo dnf install -y httpd
# 2. 创建测试页面
$ sudo echo “Hello from $(hostname)” > /var/www/html/index.html
# 3. 配置集群资源
$ sudo pcs resource create web-vip ocf:heartbeat:IPaddr2 \
ip=192.168.1.200 \
cidr_netmask=24 \
op monitor interval=30s
$ sudo pcs resource create web-service systemd:httpd \
op monitor interval=30s
$ sudo pcs resource group add web-group web-vip web-service
# 4. 测试故障转移
$ sudo pcs cluster stop node1
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node2 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 2 resources configured
Online: [ node2 node3 ]
OFFLINE: [ node1 ]
Full list of resources:
Resource Group: web-group
web-vip (ocf::heartbeat:IPaddr2): Started node2
web-service (systemd:httpd): Started node2
# 5. 测试访问
$ curl http://192.168.1.200
Hello from node2
4.2 数据库高可用集群案例
4.2.1 MySQL高可用集群
# 环境:3台服务器,1台共享存储
# 目标:实现MySQL数据库的高可用
# 1. 安装MySQL
$ sudo dnf install -y mysql-server
# 2. 配置MySQL
$ sudo systemctl start mysqld
$ sudo mysql_secure_installation
# 3. 创建共享存储
$ sudo pcs resource create mysql-storage ocf:heartbeat:Filesystem \
device=”/dev/vg_shared/lv_mysql” \
directory=”/var/lib/mysql” \
fst学习交流加群风哥QQ113257174ype=”xfs” \
op monitor interval=30s
# 4. 配置MySQL资源
$ sudo pcs resource create mysql-vip ocf:heartbeat:IPaddr2 \
ip=192.168.1.201 \
cidr_netmask=24 \
op monitor interval=30s
$ sudo pcs resource create mysql-service systemd:mysqld \
op monitor interval=30s
# 5. 创建资源组和约束
$ sudo pcs resource group add mysql-group mysql-storage mysql-vip mysql-service
# 6. 测试故障转移
$ sudo pcs cluster stop node1
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node2 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 3 resources configured
Online: [ node2 node3 ]
OFFLINE: [ node1 ]
Full list of resources:
Resource Group: mysql-group
mysql-storage (ocf::heartbeat:Filesystem): Started node2
mysql-vip (ocf::heartbeat:IPaddr2): Started node2
mysql-service (systemd:mysqld): Started node2
# 7. 测试MySQL连接
$ mysql -h 192.168.1.201 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.33 MySQL Community Server – GPL
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql>
4.3 存储高可用集群案例
4.3.1 NFS高可用集群
# 环境:3台服务器,1台共享存储
# 目标:实现NFS服务的高可用
# 1. 安装NFS服务
$ sudo dnf install -y nfs-utils
# 2. 创建共享目录
$ sudo mkdir -p /export/data
# 3. 配置NFS共享
$ sudo echo “/export/data 192.168.1.0/24(rw,sync,no_root_squash)” >> /etc/exports
# 4. 配置集群资源
$ sudo pcs resource create nfs-storage ocf:heartbeat:Filesystem \
device=”/dev/vg_shared/lv_nfs” \
directory=”/export/data” \
fstype=”xfs” \
op monitor interval=30s
$ sudo pcs resource create nfs-vip ocf:heartbeat:IPaddr2 \
ip=192.168.1.202 \
cidr_netmask=24 \
op monitor interval=30s
$ sudo pcs resource create nfs-service systemd:nfs-server \
op monitor interval=30s
# 5. 创建资源组和约束
$ sudo pcs resource group add nfs-group nfs-storage nfs-vip nfs-service
# 6. 测试故障转移
$ sudo pcs cluster stop node1
$ sudo pcs status
Cluster name: fgedu-cluster
Cluster Summary:
* Stack: corosync
* Current DC: node2 (version 2.1.5-9.el9_3.1)
* 3 nodes configured
* 3 resources configured
Online: [ node2 node3 ]
OFFLINE: [ node1 ]
Full list of resources:
Resource Group: nfs-group
nfs-storage (ocf::heartbeat:Filesystem): Started node2
nfs-vip (ocf::heartbeat:IPaddr2): Started node2
nfs-service (systemd:nfs-server): Started node2
# 7. 测试NFS挂载
$ sudo mount -t nfs 192.168.1.202:/export/data /mnt/nfs
$ sudo echo “Hello from NFS” > /mnt/nfs/test.txt
$ cat /mnt/nfs/test.txt
Hello from NFS
Part05-风哥经验总结与分享
5.1 Pacemaker高可用最佳实践
Pacemaker高可用最佳实践:
- 合理规划集群规模:根据应用需求选择合适的集群规模
- 配置冗余网络:使用多网卡和多网络,提高网络可靠性
- 配置fencing:确保故障节点能够被正确隔离
- 合理配置资源约束:根据应用特点配置资源约束
- 定期测试故障转移:确保故障转移功能正常工作
- 监控集群状态:实时监控集群健康状态
- 备份集群配置:定期备份集群配置文件
- 使用共享存储:确保数据的一致性
5.2 常见问题与解决方案
## 1. 集群启动失败
– 原因:网络配置错误、防火墙阻止、Corosync配置错误
– 解决方案:检查网络连接、关闭防火墙或开放端口、检查Corosync配置
## 2. 资源启动失败
– 原因:资源配置错误、依赖服务未启动、权限问题
– 解决方案:检查资源配置、确保依赖服务正常运行、检查权限设置
## 3. 故障转移失败
– 原因:fencing配置错误、资源约束冲突、网络问题
– 解决方案:检查fencing配置、调整资源约束、检查网络连接
## 4. 集群脑裂
– 原因:网络分区、节点间通信中断
– 解决方案:配置仲裁机制、使用多网络、设置合适的超时时间
## 5. 性能问题
– 原因:资源配置不当、网络带宽不足、服务器负载过高
– 解决方案:优化资源配置、增加网络带宽、调整服务器资源
5.3 性能调优建议
风哥针对
Pacemaker高可用集群性能调优建议:
- 调整Corosync参数:根据网络状况调整Corosync的超时参数
- 优化资源监控:合理设置资源监控间隔,避免过于频繁的监控
- 使用快速fencing设备:选择响应速度快的fencing设备
- 优化网络配置:使用万兆网络,配置适当的MTU
- 合理分配资源:根据服务器性能合理分配资源
- 使用缓存:对于读写频繁的应用,使用缓存提高性能
风哥提示:
风哥提示:
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
