目录

一.高可用(Pacemaker)

1.1基本概念

1.2集群管理软件(PCS)

1.2.1基本概念

1.2.2安装软件并启动服务

1.2.3命令格式与参数

1.3实现调试机的Pacemaker高可用

1.3.1准备工作

1.3.2安装软件服务

1.3.3配置corosync

1.3.4启动集群

1.3.5创建集群资源

1.3.6节点失效备源

1.3.7添加apache 服务资源

1.3.8测试

1.3.9删除集群资源(不用做,用来补充)

1.4实现数据库的高可用

1.4.1配置ISCSI输出端

1.4.2配置ISCSI客户端

1.4.3整合 iscsi 存储和 mariadb 数据库


一.高可用(Pacemaker)

1.1基本概念

        1.作用:通过监控集群节点和服务状态,实现“故障自动检测与切换”,确保业务服务持续运行=。它通常与 Corosync(负责集群通信与成员管理)配合使用,组成完整的高可用集群解决方案。

        2.管理工具:

                2.1Pacemaker:开源高可用集群管理工具 

                2.2pcs:Pacemaker/Corosync 集群的命令行管理工具

        3.组件:主要依赖 底层通信 和 上层资源管理 两大模块

组件 作用
Corosync 底层通信引擎,负责集群节点间的心跳检测(确认节点是否存活)、集群状态同步,是Pacemaker的“通信基石”。
Pacemaker 上层资源管理器,基于Corosync提供的节点状态,实现资源(如服务、IP、存储)的调度、故障切换和约束管理。
资源(Resource) 集群需管理的“业务实体”,如虚拟IP(VIP)、Web服务(Nginx)、数据库(MySQL)等,是高可用保护的核心对象。
资源代理(RA) 用于控制资源启停、状态检查的“脚本/程序”(如ocf:heartbeat:IPaddr2 管理VIP),Pacemaker通过RA与资源交互。
约束(Constraint) 定义资源调度规则,如“资源必须运行在特定节点”(位置约束)、“多个资源需在同一节点运行”(共置约束)。

        4.核心工作原理:Pacemaker 实现高可用的核心逻辑是“心跳检测 + 故障切换

        1. 集群初始化:多节点(至少 2 个)通过 Corosync 建立通信,选举出“主节点”(负责资源调度)和“备节点”。

        2. 资源部署:Pacemaker 根据配置,将资源(如 VIP + Nginx)部署到主节点,备节点处于“待命” 状态。

        3. 心跳检测:Corosync 定期在节点间发送“心跳报文”(默认每 1 秒),主节点需向备节点证明自己“存活”。

        4. 故障检测:若备节点长时间(如 5 秒)未收到主节点心跳,判定主节点“故障”,触发切换流程。

        5. 自动切换:Pacemaker 清理主节点上的资源(标记为“失效”),并在备节点上启动资源,最终备节点升级为新主节点,业务恢复访问。

        5.典型集群架构:Pacemaker 支持多种集群拓扑,最常用的是“双节点主备架构

        主节点:运行核心业务资源(如 VIP、应用服务),对外提供服务。

        备节点:实时监控主节点状态,不运行业务资源,仅在主节点故障时接管。

        共享存储(可选):若业务需数据共享(如 MySQL),需配合共享存储(如 NFS、iSCSI),确保主备节点访问同一数据。

1.2集群管理软件(PCS)

1.2.1基本概念

        1.作用:用于配置和管理高可用集群资源。它支持创建集群、配置资源、监控状态、处理故障转移等。

        2.解决问题:

        1.主用调试机故障,备用调试机检测不到主用调式机,自动生成主机,接管工作

        2.当某台后端服务器故障时,调试机不再向故障的服务器发送数据

1.2.2安装软件并启动服务

yum install -y pacemaker pcs psmisc policycoreutils-python    #安装软件
systemctl enable --now pcsd.service    #启动服务

1.2.3命令格式与参数

pcs [选项] <子命令> -[参数]

子命令:

        cluster:集群管理,启动/停止集群

        node:节点管理,查看节点状态,设置节点属性

        resource:资源管理,创建、删除、启动、停止资源

        constraint:约束管理,设置启动顺序

        status:状态查看,查看集群整体状态

        property:配置管理,设置集群属性

        1.集群管理:

pcs cluster setup --name mycluster node1 node2    ## 创建集群(在两台节点上执行)
pcs cluster start --all    # 启动集群
pcs cluster stop --all    # 停止集群
pcs cluster status    # 查看集群状态
pcs cluster verify    # 验证集群配置

        2.节点管理:

pcs status nodes    # 查看所有节点状态
pcs node standby node1    # 使节点离线(模拟故障)
pcs node unstandby node1    # 使节点重新上线
pcs status    # 查看节点的资源分布

        3.资源管理:

pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.7.100 cidr_netmask=24 op monitor interval=30s    # 创建一个资源(如虚拟 IP)
pcs resource create nginx systemd:nginx op monitor interval=30s    # 创建一个 Nginx 服务资源
pcs resource list    # 查看所有资源
pcs resource show    # 查看资源状态
pcs resource start vip    # 启动资源
pcs resource stop vip    #停止资源
pcs resource restart vip    #重启资源
pcs resource delete vip    # 删除资源
pcs resource move vip node1    # 设置资源在特定节点上优先运行

        4.约束管理:

pcs constraint colocation add vip with nginx  #设置资源共置(vip 和 nginx 必须运行在同一节点)
pcs constraint order start vip then start nginx    # 设置资源启动顺序(先启动 vip,再启动 nginx)
pcs constraint location vip prefers node1=200    # 设置资源位置偏好(优先在 node1 运行)
pcs constraint show    # 查看所有约束

        5.属性管理:

pcs property set stonith-enabled=false    # 禁用 STONITH(测试环境常用)
pcs property set resource-stickiness=100    # 设置集群默认资源超时时间
pcs property list    # 查看所有属性
pcs property show stonith-enabled    # 查看特定属性值

1.3实现调试机的Pacemaker高可用

1.3.1准备工作

        1.定义两台调试机,一个后端服务器,一台测试机域名已完成解析

server4:调试机,IP192.168.7.140

server7:调试机,IP192.168.7.143

server5:后端服务器,IP192.168.7.141

server6:后端服务器,IP192.168.7.142

VIP:192.168.7.100

        2.同步两台调试机的时间

 server 4和server7:

systemctl restart chronyd

如果系统中没安装chronyd服务,按以下步骤安装

yum install -y chrony.x86_64
vim /etc/chrony.conf    #编辑配置文件
#添加以下内容:
server ntp1 .aliyun.com iburst    #设置阿里云时间

systemctl enable --now chronyd    #启动并开机自启
date    #查看时间,用于测试

        3.关闭keepalived,两个服务同时启动,会造成curl卡死的情况

systemctl stop keepalived

1.3.2安装软件服务

        1.两台调试机上安装pcs等软件和依赖,并启用服务

server4和server7上:

yum install -y pacemaker pcs psmisc policycoreutils-python
systemctl enable --now pcsd.service

        2.两台调试机清空防火墙配置,并查看防火墙规则

server4和server7:

iptables -C    #清空规则
iptables -Ln    #查看防火墙配置

        3.在两台调试机上,为你的hacluster用户配置密码

server4和server7:

echo 你的密码 | passwd --stdin hacluster

        4.两台调试机上,启动pscd服务并设置开机自启

server4和server7:

systemctl start pcsd
systemctl enable pcsd

1.3.3配置corosync

        1.认证集群点:一台调试机上,在server4和server7之间建立集群通信信任关系,让它们能够互相认证。

server4上:

pcs cluster auth server4 server7

        2.在server4上,创建一个名为mycluster的集群,并将server4和server7作为集群节点加入。

server4:

pcs cluster setup --name mycluster server4 server7

1.3.4启动集群

        1.在一台调试机上启动并设置开机自启集群

server4:

pcs cluster start --all     #启动集群
pcs cluster enable --all     #设置开机自启
pcs status    #查看状态

        2.在一台调试机上主动关闭电源管理,避免没有配置电源管理时资源无法启动

        电源管理:强制断电故障节点,防止数据损坏。

server4:

pcs property set stonith-enabled=false
pcs status    #查看状态

        3.校验集群:在一台调试机上,校验集群

server4:

crm_verify -L

1.3.5创建集群资源

        1.在一台调试机上,用于在Pacemaker上创建一个名为vip集群资源,该资源会在集群节点之间浮动,确保 VIP 始终可用

server4:

pcs resource create vip ocf:heartbeat:IPaddr2 ip=192.168.7.100 op monitor interval=30s

        2.测试:在server4上手动移除VIP(192.168.7.100),观察VIP是否存在

ip a del 192.168.7.100 dev ens32    #手动删除VIP
ip a     #查看系统IP

1.3.6节点失效备源

        1.在一台调试机上使节点离线,观察资源失效后是否转移至另一台调试机上

server4:

pcs node standby    #节点离线
pcs status    #查看集群上所用的调试机

        2.验证成功后,恢复server4上的节点:

server4:

pcs node unstandby
pcs status

1.3.7添加apache 服务资源

        1.确保server4和server7上,确保httpd服务运行

server4和server7:

systemctl status httpd

        2.在一台调度机上,让Pacemaker管理httpd服务,每 1 分钟检查一次服务状态。

server4上:

pcs resource create WebSite systemd:httpd op monitor interval=1min

        3.如果出现vip和WebSite不在同一调试机上,则创建资源组,强制资源运行在同一节点

pcs resource group add webgroup vip WebSite

        出现以下原因:

        解决:将两个服务加入到一个资源组中

1.3.8测试

        1.在windwos端使用VIP访问后端服务器server5,server6

        

        2.临时停止server4的节点,观察是否能够访问后端服务器

server4:

pcs node standby

1.3.9删除集群资源(不用做,用来补充)

pcs resource group remove webgroup    #删除资源组
pcs resource delete vip   #删除资源
pcs resource delete WebSite    #删除资源

1.4实现数据库的高可用

        server5:输出端,客户端访问的数据库所在服务器

        server4,server7:客户端

1.4.1配置ISCSI输出端

        1.在server5 上添加虚拟机磁盘 /dev/sdb

lsblk

        2.安装软件(targetcli)

yum install -y targetcli    #安装软件
systemctl enable --now target

        3.创建ISCSI存储(看day5详解)

targetcli

1.4.2配置ISCSI客户端

        1.在两台客户端上安装ISCSI客户端和数据库服务

server4,server7:

yum install -y mariadb-server
yum install -y iscsi-initiator-utils.x86_64
systemctl enable --now iscsi

        2.在两台服务端上,配置ISCSI文件

server4和server7:

vim /etc/iscsi/initiatorname.iscsi 
#添加你自己配置的认证文件
InitiatorName=iqn.2026-07.com.example:demonky    
systemctl restart iscsid

iscsiadm -m discovery -t st -p 192.168.7.141    #发现服务,你的后端服务IP
iscsiadm -m node -l    #登录服务
lsblk    #查看硬盘资源是否加入到server4和server7中

        3.分区格式化:在一台调试机上进行即可

server4:我这里直接格式化了整块硬盘

fdisk /dev/sdb(可选)    #这里可选,创建分区或者用整块盘均可,注意设备名是你新发现的硬盘
mkxfs.xfs    /dev/sbd    

        4.sever4上,挂载设备,并设置目录所有者和所有组

server4:

mount /dev/sdb /var/lib/mysql
chown mysql.mysql /var/lib/mysql
systemctl restart mariadb

        5.server4上,停止数据库服务,卸载

server4:

systemctl stop mariabd.service
unmount /var/lib/mysql

        6. 在server7上,配置ISCSI认证服务,重启,登录服务

vim /etc/iscsi/initiatorname.iscsi 
#添加你自己配置的认证文件
InitiatorName=iqn.2026-07.com.example:demonky    
systemctl restart iscsid

iscsiadm -m discovery -t st -p 192.168.7.141    #发现服务,你的后端服务IP
iscsiadm -m node -l    #登录服务

1.4.3整合 iscsi 存储和 mariadb 数据库

        1.如果之前没删除资源组,在这里一删

pcs resource group remove webgroup    #删除资源组
pcs resource delete vip   #删除资源
pcs resource delete WebSite    #删除资源

        2.在server4上创建 iscsudb和mariabd资源,并添加到一个资源组中

pcs resource create iscsidb ocf:heartbeat: Filesystem device=/dev/sdb rectory=/var/lib/mysql fstype=xfs op monitor interval=1min
pcs resource create mariadb systemd:mariadb op monitor interval=1mi
pcs resource group add dbgroup vip iscsidb mariadb

        3.当vip与mariadb不一致时,可以先临时停止一个调试机,在恢复即可解决

 出现下面问题:

解决办法:

server4:

pcs node standby
pcs node unstandby

更多推荐