云计算运维day8--高可用与负载均衡2
目录
一.高可用(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

更多推荐



所有评论(0)