精读笔记(RHCA 英文教材)· RH436 Chapter 2 Managing Cluster Nodes and Quorum
精读笔记(RHCA 英文教材)· RH436 Chapter 2 Managing Cluster Nodes and Quorum
教材原文:RHCA 官方英文教材(PDF 第 57~92 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch1(建集群/fencing)、Ch7(双节点集群的 qdevice 议题);本章=节点增删/启停/待命 与 quorum(votequorum 计算、wait_for_all/auto_tie_breaker/last_man_standing)。 结构:3 个 Section(各带 Guided Exercise)+ 章末 Lab(lab: quorum-review)。
Chapter Goal / Objectives(原文+译)
- GOAL: Manage node membership in the cluster and describe how it impacts cluster operation(管理节点成员关系,理解其对集群运行的影响).
- OBJECTIVES: ① 往现有集群增/删节点;② 解释 quorum 如何运作、如何保护集群免错;③ 调整 quorum 计算方式并说明何时需要。
2.1 Managing Cluster Membership
四类成员控制(概念分层)
| 操作 | 命令 | 效果 | | 运行时启停 | pcs cluster start|stop [node|--all] | 现在是否参与集群 | | 开机自启 | pcs cluster enable|disable [node|--all] | 重启后是否自动入群 | | 增删成员 | pcs cluster node add|remove <fqdn> | 永久改变成员集合 | | 待命/复命 | pcs node standby|unstandby [node|--all] | 是否允许承载资源 |
- corosync 与 pacemaker(systemd 服务)都要在跑;节点已认证且 pcsd 在跑即可用 pcs 遥控。
增加节点(无停机扩容)
- 准备新节点(noded):防火墙放行 high-availability、
yum install pcs fence-agents-ipmilan、systemctl enable --now pcsd、passwd hacluster与现网一致(redhat)、pcs host auth -u hacluster -p redhat noded.private.example.com(在任一现网节点执行)。 - 在当前正常节点执行:
pcs cluster node add node4.example.com(分发 corosync/pacemaker authkey 与更新后的 corosync.conf 到所有节点并 reload)。 - 新节点上
pcs cluster enable+pcs cluster start——不加这两步不会成为活动成员。 - 先配 fencing 再迁业务:
pcs stonith create fence_noded fence_ipmilan pcmk_host_list=noded… ip=192.168.0.104 username=admin password=password lanplus=1 power_timeout=180→pcs stonith status全 Started。
- 注意点:扩容命令要在“在群内且状态良好”的节点上执行;移除节点同理
pcs cluster node remove <fqdn>(替换节点无需整体停机)。
待命(standby)细节
pcs node standby node1= 对节点施加“不得承载资源”的约束(资源会迁走);pcs node standby --all全体待命。pcs node unstandby只删除该约束,不会自动把此前跑在上面的资源迁回来。pcs status各字段解读:standby节点单列;Online=[ 在群且通信正常 ];OFFLINE=[ 服务停了或与 quorate 部分失联 ];Full List of Resources 显示资源/资源组实际运行点。
2.1 GE(lab: quorum-extend)
三节点群 → 准备 noded(防火墙/装包/起 pcsd/设 hacluster 密码)→ nodea 上 pcs host auth noded → pcs cluster node add noded.private.example.com(观察 authkey 与 corosync.conf 分发)→ noded 上 pcs cluster enable + start → pcs status 4 Online → 建 fence_noded → reboot noded 验证自动归队。
2.2 Describing and Observing Quorum Operation
quorum 是什么
- 节点必须对“谁是成员/服务在哪/谁在用哪块资源”达成一致;HA Add-On 用多数投票实现:每节点成功加入 corosync 通信投 1 票;票数过半集群才算 quorate;否则失去 quorum。
- 集群启动时:节点互通直到形成多数 → quorate;未能加入 quorate 集群的节点被有 quorum 一方 fencing;运行中失联节点同样被 fencing。
- quorum 先于 fencing 的闸门:没有 fencing 时两半集群会同时恢复同一 ext4 → 双挂载损坏 → split-brain(脑裂)。多数派机制天然防脑裂:5 节点例中节点 4/5 共 2 票<半数,只能停摆;节点 1/2/3 共 3 票>半数继续服务。双节点集群最危险——任一侧都不构成多数。
quorum 计算(votequorum)
- 由 corosync 的 votequorum 组件计算:
Expected votes(全员在线时的总票数)与Total votes(当前实际票数)。 - 公式:quorum = floor(expected votes / 2) + 1。例:4 节点 → floor(4/2)+1 = 3,即最少 3 节点在线才 quorate。
- 优雅关机(poweroff)的节点不会被 fencing;只有“意外失联”才触发 fencing(实验对比重点)。
观察命令
pcs quorum status:Date/provider(corosync_votequorum)、Nodes、Node ID(本机)、Ring ID、Quorate: Yes/No、Expected votes、Highest expected、Total votes、Quorum(最少需票数)、Flags(Quorate/WaitForAll/LastManStanding/AutoTieBreaker 等)、Membership(Nodeid/Votes/Qdevice/Name)。corosync-quorumtool:Pacemaker 因失 quorum 而“停摆”时pcs quorum status会报 Error,改用此工具查看(Quorate: No / Activity blocked)。- 失 quorum 后集群不再启停/触碰任何资源(防止资源损坏)。
2.2 GE(lab: quorum-operation)
4 节点群上 watch pcs quorum status:① nodec 跑防火墙阻断脚本(封 corosync 入/出)→ 其余节点 fence nodec → Expected 4、Total 降 3、Membership 少了 nodec;② poweroff nodeb+nodec(优雅关机不触发 fence)→ 只剩 2 票 < quorum 3 → pcs quorum status 报 Error、corosync-quorumtool 显示 Quorate: No、Activity blocked、资源不动作;③ 逐台开机 → 恢复 Quorate(缺 nodec 时 Total=3 已够)。
2.3 Managing Quorum Calculations
三个 quorum 选项(建群时可选)
| 选项 | 作用 | 备注 |
|---|---|---|
wait_for_all | 等全部成员同时在线过才开始计 quorum | 防止启动期 fence 竞赛:不开时,quorum 一旦达成,没加入/干净关机的节点会被自动 fence |
auto_tie_breaker | 半数即可达 quorum(50% vs 50% 时) | 脑裂平局时低 node id 一侧获胜;偶数节点拆半场景用 |
last_man_standing | 定期(默认每 10s)重算 expected votes | 允许管理员逐台优雅下线到只剩 2 节点仍保 quorum;必须与 wait_for_all 同开;重算窗口 last_man_standing_window 默认 10000ms;断得过快会丢 quorum |
- 建群:
pcs cluster setup mycluster node1 node2 node3 quorum last_man_standing=1 wait_for_all=1 --start。
改现有集群(生产需维护窗口)
- 改 quorum 选项要求先停群:
pcs cluster stop --all→pcs quorum update auto_tie_breaker=1 last_man_standing=1 wait_for_all=1(自动把/etc/corosync/corosync.conf同步到所有节点,停群时也能同步)→pcs cluster start --all。 - 手动改 corosync.conf 不被鼓励;真改了用
pcs cluster sync复制到全体(corosync.conf 必须全节点一致)。 - 验证:
pcs quorum status的 Flags 出现 WaitForAll/LastManStanding/AutoTieBreaker;pcs quorum config查看 Options;corosync-quorumtool(8)更底层。
2.3 GE(lab: quorum-modify)
4 节点群:pcs cluster stop --all → pcs quorum update last_man_standing=1 wait_for_all=1 → pcs cluster start --all → watch pcs quorum status:逐台 sudo poweroff nodec、noded——每台优雅下线 10 秒后 Expected votes 4→3→2、Quorum 3→2→1?(书例:4→3 后 quorum 3→2;再 3→2 后 quorum 2→1),集群始终保持 Quorate → 开回两台恢复 4/4。
Lab 概要(lab: quorum-review)
三节点群扩成四节点(noded,fence_noded,192.168.0.104,power_timeout=180,lanplus=1),再加 auto_tie_breaker:先 stop --all → pcs quorum update auto_tie_breaker=1 → start --all → pcs quorum config 验证 → lab grade quorum-review。
命令速查表
| 用途 | 命令 | | 启停集群服务 | pcs cluster start|stop [node|--all] | | 开机自启开关 | pcs cluster enable|disable [node|--all] | | 加/删节点 | pcs cluster node add|remove <fqdn> | | 认证新节点 | pcs host auth -u hacluster -p redhat <fqdn> | | 待命/复命 | pcs node standby [node|--all];pcs node unstandby [node|--all] | | 集群状态 | pcs status(可 pcs status nodes/config/corosync 收窄) | | 看 quorum | pcs quorum status;corosync-quorumtool(失 quorum 时用) | | 看 quorum 配置 | pcs quorum config | | 建群带 quorum 选项 | pcs cluster setup mycluster n1 n2 n3 quorum wait_for_all=1 last_man_standing=1 auto_tie_breaker=1 --start | | 改 quorum 选项 | 先 pcs cluster stop --all → pcs quorum update <opt>=1 … → pcs cluster start --all | | 同步手改配置 | pcs cluster sync | | 实验/评分 | lab start quorum-extend/quorum-operation/quorum-modify;lab grade quorum-review |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| membership | 成员关系 | 增删/启停/待命 四类控制 |
| cluster node add/remove | 增删节点 | 在线扩容;新节点要 enable+start |
| standby / unstandby | 待命/复命 | 禁/允承载资源;unstandby 不自动迁回 |
| quorum / quorate | 法定人数 / 够法定 | 多数票才工作;失 quorum 停所有资源动作 |
| expected votes / total votes | 预期票 / 当前总票 | quorum=floor(expected/2)+1 |
| split-brain | 脑裂 | 两半各管资源→双挂载;靠 quorum+fencing 防 |
| votequorum | 投票仲裁组件 | corosync 内的 quorum 计算器 |
| wait_for_all | 全在线再计票 | 防启动期 fence race;LMS 必配 |
| auto_tie_breaker | 自动破平局 | 50% 即可 quorate;平局低 node id 胜 |
| last_man_standing | 最后幸存者 | 每 10s 重算 expected;可逐台下线 |
| fence race | 隔离竞态 | 启动瞬间误 fence 未入群节点 |
| Quorate / Activity blocked | 够票 / 活动被阻断 | quorumtool 输出的两种状态 |
自测 10 题
- 新增节点前要在新节点做哪 4 步准备?(防火墙/装 pcs+agent/起 pcsd/hacluster 密码一致,再加 host auth)
pcs cluster node add之后新节点为什么还不是活动成员?(还要pcs cluster start,且建议 enable)- quorum 公式?(floor(expected/2)+1;4 节点=3)
- 优雅关机 vs 失联在 fencing 上的差别?(优雅 poweroff 不 fence;意外失联才 fence)
- split-brain 何时最危险?(双节点:任一侧都不够多数);如何防?(quorum 闸门+fencing)
- wait_for_all 解决什么问题?(启动 fence race)
- auto_tie_breaker 什么时候用、平局谁赢?(偶数群 50/50 场景;低 node id 侧)
- 改 quorum 选项的标准步骤?(stop --all → pcs quorum update → start --all)
- last_man_standing 默认多久重算?与谁必须同开?(10s(last_man_standing_window=10000ms);wait_for_all)
- 失 quorum 时用哪个命令仍能看状态?(corosync-quorumtool → Quorate: No / Activity blocked)
