openEuler HA部署
openEuler HA部署
1 环境
| IP | 主机名 | 操作系统 |
| 10.32.0.111 | ha1 | openEuler 24.03 (LTS-SP4) |
| 10.32.0.112 | ha2 | openEuler 24.03 (LTS-SP4) |
| 10.32.0.109 | vip | 虚拟IP |
2 修改主机名称及/etc/hosts文件
- 注:两台主机均需要进行以下操作,现以其中一台为例。
在使用HA软件之前,需要确认修改主机名并将所有主机名写入/etc/hosts文件中。
- 修改主机名
hostnamectl set-hostname ha1
- 编辑
/etc/hosts文件并写入以下字段
10.32.0.111 ha1 10.32.0.112 ha2
4 安装HA软件包
两台节点都执行
- 安装常用组件包
yum install -y corosync pacemaker pcs fence-agents fence-virt corosync-qdevice sbd drbd-utils
- 源码编译DRBD
dnf install -y patch make gcc gcc-c++ kernel-devel flex perl \ automake libtool elfutils-libelf-devel # 下载源码 wget https://pkg.linbit.com/downloads/drbd/9/drbd-9.3.3.tar.gz tar -xzvf drbd-9.3.3.tar.gz # 编译并安装 make -j make install
5 构建集群
两台节点都执行
- 设置hacluster用户密码
passwd hacluster
- 启动pcsd服务
systemctl start pcsd
systemctl enable pcsd
- 放行2224端口和corosync所需端口
firewall-cmd --permanent --add-port=2224/tcp firewall-cmd --permanent --add-port=5404-5412/udp firewall-cmd --reload
- 关闭selinux
# 修改/etc/selinux/config文件中SELINUX状态为disabled
SELINUX=disabled
- 节点认证(仅在ha1上执行)
pcs host auth ha1 ha2 -u hacluster
# 系统会提示输入 hacluster 密码(本文与root用户密码相同)

- 创建集群(在ha1上执行,并指定IP地址)
pcs cluster setup hacluster ha1 addr=10.32.0.111 ha2 addr=10.32.0.112 --start

- 后续管理建议
一旦集群创建成功,请统一使用 pcs 命令来管理整个集群,而不是直接操作单个服务:
| 操作 | 推荐命令 |
|---|---|
| 启动整个集群 | pcs cluster start --all |
| 停止整个集群 | pcs cluster stop --all |
| 查看集群状态 | pcs cluster status 或 pcs status |
| 重启集群 | pcs cluster restart --all |
直接使用 systemctl start corosync 可能会破坏 Pacemaker 的状态管理,导致资源不一致。
6 访问前端管理平台
- 访问方式
在任意能访问集群节点的浏览器中,打开 https://<节点IP或主机名>:2224

- 登录
用户名是 hacluster,密码就是之前设置的那个

7 HA使用实例
7.1 首选项配置
以下操作均可用命令行配置,现只做简单示例,若想使用更多命令可以使用pcs --help进行查询。
pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore
pcs property查看全部设置

7.2 添加普通资源
下面以apache为例,添加apache资源
- 在两个节点上安装apache
dnf install -y httpd
- ha1节点上添加资源
pcs resource create httpd ocf:heartbeat:apache
- 查看资源运行状态
pcs status

前端页面上也可以看到资源启动了

- 资源创建成功并启动,运行于其中一个节点上,例如ha1;成功访问apache界面。
http://10.32.0.111/

8 实现高可用访问
要保证用户始终能访问到服务,应该使用虚拟IP(VIP),而不是直接访问节点IP
- 删除当前httpd资源
pcs resource delete httpd
- 创建虚拟IP和httpd资源,并设置约束
# 创建虚拟 IP pcs resource create VirtualIP IPaddr2 ip=10.32.0.109 cidr_netmask=23 op monitor interval=30s # 创建 httpd 资源(前提:两个节点都已安装 httpd) pcs resource create WebServer ocf:heartbeat:apache op monitor interval=30s # 设置虚拟 IP 和 httpd 必须运行在同一节点(共置约束) pcs constraint colocation add VirtualIP with WebServer INFINITY # 设置启动顺序:先启动 WebServer,再启动 VirtualIP pcs constraint order WebServer then VirtualIP
- 访问虚拟IPhttp://10.32.0.109/,无论资源在哪个节点上,都能正常访问。

9 故障模拟测试
9.1 测试一:将节点置为待机模式(模拟节点维护/故障)
在ha1上执行:
pcs node standby ha1
预期结果:
- ha1状态变为OFFLINE(待机)
- 资源自动迁移到ha2
- 访问http://10.32.0.109仍然正常。
观察命令:
pcs status

恢复ha1:
pcs node unstandby ha1
9.2 测试二:ha2关机(模拟服务器故障)
预期结果:
- 资源自动迁移到ha1
- 访问http://10.32.0.109仍然正常。
9.3 测试三:假设ha2物理机系统完成损毁,需重新安装系统
在h2(新节点)上准备基础环境。登录到新安装的ha2节点执行以下操作:
- 配置主机名和网络
区别主机名设置为ha2,并配置好IP地址。同时,检查/etc/hosts文件,确保ha1和ha2的主机名都能正确解析到各自的IP。
- 安装集群软件包
参考第四章节《安装HA软件包》
- 设置hacluster用户密码
为hacluster用户设置一个密码,建议与ha1上的密码保持一致,以简化后续操作。
passwd hacluster
- 启动并启用pcsd服务:
systemctl start pcsd
systemctl enable pcsd
pcsd是pcs命令的后台服务,复杂节点间的通信
- 配置防火墙
firewall-cmd --permanent --add-service=high-availability
firewall-cmd --reload
high-availability 服务会自动开放 2224 (pcsd), 5404-5405 (corosync) 等关键端口
- 同步时间
确保 ha2 与 ha1 的时间是同步的,可以使用 chrony 服务。
dnf install -y chrony systemctl enable chronyd --now
在ha1(现有集群节点)上添加ha2,所有操作都在 ha1 上执行。
- 认证新节点
这一步是让ha1信任ha2,需要输入hacluster的密码。
pcs host auth ha2 -u hacluster
- 将ha2添加到集群
此命令会将集群的配置同步到ha2。
pcs cluster node add ha2
如果此步骤报错
node is already in a cluster,说明ha2上残留了旧的集群配置。此时需要在ha2上执行pcs cluster destroy来清理,然后重新执行添加命令。
- 在ha2上启动并启用集群服务
pcs cluster start
pcs cluster enable
- 验证结果
在 ha1 或 ha2 上执行 pcs status 命令。如果输出中 Node List 部分显示 ha2 的状态为 Online,则说明节点已成功重新加入集群。
pcs status
- 注意事项
资源安装:如果 ha2 之前运行着特定的服务(如 httpd、DRBD 等),你需要在 ha2 上重新安装并配置好这些软件,Pacemaker 才能在故障切换时将其启动。
维护窗口:在生产环境中,建议在维护窗口期执行节点添加操作。
隔离配置:如果集群配置了 STONITH(隔离),别忘了为新加入的 ha2 节点配置相应的隔离设备
浙公网安备 33010602011771号