精读笔记(RHCA 英文教材)· RH436 Chapter 7 Managing Two-node Clusters
精读笔记(RHCA 英文教材)· RH436 Chapter 7 Managing Two-node Clusters
教材原文:RHCA 官方英文教材(PDF 第 237~270 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch2(quorum/wait_for_all)、Ch3(fencing);本章=双节点集群三坑(split-brain/fence race/fence loop)+ 延迟 fencing 两法 + quorum device(QNet/QDevice)。 结构:3 个 Section(7.1 Quiz;7.2/7.3 带 Guided Exercise)+ 章末 Lab(lab: twonode-review)。
Chapter Goal / Objectives(原文+译)
- GOAL: Operate two-node clusters, identifying and avoiding issues that are specific to a two-node cluster configuration.
- OBJECTIVES: ① 描述双节点配置注意事项;② 配置双节点 HA 集群;③ 配置 quorum device 化解平局。
7.1 Planning Two-node Cluster Deployments
偶数节点/双节点的核心问题
- 偶数节点群(尤其双节点)网络一断就正好对半分裂(每节点=一半),极易 split-brain。奇数节点群没这问题。
- 三坑(Summary 归纳,必背):
- split-brain(脑裂):两半各自为政。
- fence race(隔离竞赛):断网瞬间两节点同时尝试互 fence——可能互相把对方断电,整个集群停摆。
- fence loop(隔离死循环):被 fence 的节点重启后若通信仍断,会自成一团再 fence 对方;对方重启又反过来——无限循环。
- 对策:two_node 模式自动开 wait_for_all → 被隔离方起不来就不发起新的 fencing(防 fence loop);延迟 fencing → 一方先动手(防 fence race)。
- 双节点 cluster setup 自动置 two_node=1:expected votes 2、quorum=1(任一节点在线即可工作);Flags:
2Node Quorate WaitForAll。corosync.conf 的 quorum{} 里写two_node: 1(WaitForAll 不写但默认开)。 - 关 wait_for_all(不推荐):setup 时
quorum wait_for_all=0;已建群则 stop --all →pcs quorum update wait_for_all=0→ start --all。代价:可能 fence loop。
延迟 fencing(防 fence race)两种做法
- 法一(所有版本):给其中一个节点的 stonith 加
pcmk_delay_base=30s——让对方先动手、本方“总是赢”;共享设备多节点用pcmk_delay_max=40s+pcmk_host_map(随机 0~40s 延迟,两个节点不会同时)。
pcs stonith create fence_node1_delayed fence_ipmilan ip=… pcmk_host_list=node1 pcmk_delay_base=30s
pcs stonith create fence_apcA_node1 fence_apc ip=… pcmk_host_map="node1:2;node2:7" pcmk_delay_max=40s- 法二(RHEL 8.3+,不需改 fence 设备):资源优先级——脑裂时先 fence “承载资源总优先级更低”的节点:
pcs resource create httpIP IPaddr2 ip=… meta priority=100 # 建时指定
pcs resource defaults update priority=1 # 或设全局默认(GE 用 1)
pcs property set priority-fencing-delay=190s # 关键:设延迟让“输家”先被隔离
pcs property set stonith-timeout=180s7.1 Quiz(答案要点)
two_node 模式作用=把 quorum 人为设 1,单节点也能维持集群(b);fence race=两节点同时互 fence(c);fence race 后果=互相断电、整集群停摆(a)(第 3 题若多选含“双节点关电关死”)。
7.2 Configuring a Two-node Cluster
建双节点集群(与普通流程几乎相同)
# 两台都:防火墙放行、装 pcs fence-agents-ipmilan、设 hacluster 密码、systemctl enable --now pcsd
pcs host auth nodea.private.example.com nodeb.private.example.com
pcs cluster setup twonodes nodea.private.example.com nodeb.private.example.com # 自动 two_node
pcs cluster start --all && pcs cluster enable --all
pcs quorum status # Flags: 2Node Quorate WaitForAll;Expected 2 / Quorum 1- 验收:
pcs status双 Online;测试资源 webip(IPaddr2)→ 断集群网 → 观察对端被 fence、资源存活、Pending Fencing Actions(twonode-conf 实验的看点)。
7.2 GE(lab: twonode-conf)
准备两台 → 建 twonodes → 验证 2Node+WaitForAll → pcs property set stonith-timeout=180s、priority-fencing-delay=190s、pcs resource defaults update priority=1 → 建 fence_nodea/b(fence_ipmilan,BMC 101/102,lanplus=1 power_timeout=180)→ 建 webip 测试资源 → 断网观察 fence 流程。
7.3 Configuring and Managing a Quorum Device
原理
- quorum device=第三方仲裁者,让双节点“像三节点”运作:QNet(corosync-qnetd)守护跑在非集群节点的独立机器;QDevice(corosync-qdevice)守护跑在每个集群节点,能联系上 QNet 就多拿一票。
- 偶数节点群都应配 qdevice;qnetd 别放集群网络上(建议独立网络/第三段,教室用 lab 网连 qnetd、私网做集群通信)。
- 算法:
ffsplit(fifty-fifty split:平局时票给最低 node id 一侧);lms(last-man-standing:可容忍更多节点下线,单节点存活也能拿额外票保 quorum;脑裂时行为同 ffsplit)。
部署步骤(四段)
# ① qnetd 主机(非集群节点,如 noded)
yum install pcs corosync-qnetd
passwd hacluster # 与集群同密码
systemctl enable --now pcsd
pcs qdevice setup model net --enable --start # 初始化并启 qnetd
pcs qdevice status net # QNetd address: *:5403;Connected clients: 0
# ② 集群节点装 qdevice
yum install corosync-qdevice # 每集群节点
# ③ 集群侧声明(在某一集群节点)
pcs host auth qnetd.lab.example.com # 用非集群网络 FQDN
pcs quorum device add model net host=qnetd.lab.example.com algorithm=ffsplit
# ④ 验证
pcs quorum status # Expected 3 / Quorum 2;Flags: Quorate Qdevice(2Node 消失);Qdevice 成员 1 票,状态 A,V,NMW
pcs quorum config # Options: Device votes:1 Model net algorithm/host
pcs qdevice status net # qnetd 侧看 Connected clients: 2 / Connected clusters: 1 与投票记录(Vote: ACK)- 状态串解读(Membership 里 Qdevice 列):首位 A=与 qdevice 通信 active(NA 失联);V=脑裂时该分区拿到 QNet 票(谁 V 谁活);NMW=No Master Wait(正常说明没在等主)。
- 加 qdevice 后集群行为=三节点:无需再做双节点那些特殊配置(two_node 自动解除)。
7.3 GE(lab: twonode-qdevice)
双节点群确认 2Node → noded(非集群节点)装 pcs+corosync-qnetd、设密码、起 pcsd → pcs qdevice setup model net --enable --start → 集群两节点装 corosync-qdevice → nodea 上 pcs host auth noded.lab.example.com(走 172.25.250 网,不跟集群私网 192.168.0 混)→ pcs quorum device add model net host=… algorithm=ffsplit → 看 Quorum 3/2、Qdevice 标志 → noded 上 pcs qdevice status net 见 2 clients/1 cluster。
Lab 概要(lab: twonode-review)
nodec/noded 两台建 cluster2(two_node 自动)→ stonith-timeout=180s → fence_nodec/noded(BMC 103/104)→ 在 nodea(非集群机)装 corosync-qnetd 并 pcs qdevice setup model net --enable --start → 集群两节点装 corosync-qdevice → nodec 上 host auth nodea.san01.example.com(走 san01 网 192.168.1.0/24)→ pcs quorum device add … algorithm=ffsplit → 验证 Expected 3/Quorum 2/Qdevice → lab grade twonode-review。
命令速查表
| 用途 | 命令 |
|---|---|
| 建双节点群 | pcs cluster setup twonodes n1 n2(自动 two_node+WaitForAll) |
| 查看双节点模式 | pcs quorum status(Flags: 2Node Quorate WaitForAll;Quorum: 1) |
| 关 wait_for_all | 建群 quorum wait_for_all=0;已建 pcs cluster stop --all → pcs quorum update wait_for_all=0 → start --all |
| 延迟 fencing(固定延迟) | stonith 加 pcmk_delay_base=30s(只给一方) |
| 延迟 fencing(随机上限) | 共享设备加 pcmk_delay_max=40s + pcmk_host_map |
| 资源优先级法 | pcs resource defaults update priority=1;pcs property set priority-fencing-delay=190s;stonith-timeout=180s |
| 单资源优先级 | pcs resource create … meta priority=100 |
| qnetd 端 | yum install pcs corosync-qnetd;pcs qdevice setup model net --enable --start;pcs qdevice status net |
| 集群端装 qdevice | yum install corosync-qdevice |
| 声明 qdevice | pcs host auth <qnetd>;pcs quorum device add model net host=<qnetd> algorithm=ffsplit |
| 查看/删除 | pcs quorum config;pcs quorum device remove |
| 实验/评分 | lab start twonode-conf/twonode-qdevice;lab grade twonode-review |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| split-brain | 脑裂 | 网络对半断,两半各管资源 |
| fence race | 隔离竞赛 | 两节点同时互 fence → 一起断电 |
| fence loop | 隔离死循环 | 重启后互相反复 fence |
| two_node | 双节点模式 | quorum=1;自动 WaitForAll |
| wait_for_all | 全在线再起 | 防 fence loop(默认随 two_node 开) |
| delayed fencing | 延迟隔离 | pcmk_delay_base / pcmk_delay_max |
| priority-fencing-delay | 优先级隔离延迟 | RHEL8.3+ 按资源优先级先隔“少资源方” |
| QNet / QDevice | 仲裁服务端/客户端 | qnetd 独立机;qdevice 每集群节点加一票 |
| ffsplit / lms | 对半分裂/最后幸存算法 | 平局给低 node id;lms 容忍更多掉线 |
| A,V,NMW | qdevice 状态串 | active / 拿到票 / No Master Wait |
自测 10 题
- 双节点为何特别容易 split-brain?(每节点恰是集群一半)
- two_node 模式把 quorum 设成几?自动再开什么标志?(1;WaitForAll)
- fence loop 的成因与对策?(重启后通信仍断自成一团互 fence;wait_for_all 让被隔离方不起资源不发起 fence)
- 防 fence race 的两种延迟办法?(pcmk_delay_base 只给一方;RHEL8.3+ priority-fencing-delay+资源优先级)
pcs quorum device add的模型/算法参数?(model net,host=qnetd FQDN,algorithm=ffsplit/lms)- QNet 与 QDevice 各装在哪?(QNet=独立非集群机;QDevice=每集群节点)
- qdevice 加完后 expected/quorum 变成?(3/2,像三节点;2Node 标志消失)
- Qdevice 状态 A,V,NMW 各指什么?(active、脑裂投票方、No Master Wait)
- qnetd 部署为什么建议独立网络?(避免集群网故障时仲裁器也失联)
- lms 与 ffsplit 在双节点的差异?(几乎一样:平局都投给低 node id;lms 额外支持更多节点下线场景)
