精读笔记(RHCA 英文教材)· RH436 Chapter 3 Isolating Malfunctioning Cluster Nodes
精读笔记(RHCA 英文教材)· RH436 Chapter 3 Isolating Malfunctioning Cluster Nodes
教材原文:RHCA 官方英文教材(PDF 第 93~120 页)(OCR 整书版已从本站移除,本页为章节精读) 关联知识:Ch1(stonith 初体验)、Ch2(quorum 先于 fencing)、Ch12(多级/网络冗余 fencing 进阶);本章=fencing 原理、fence 设备/代理、pcs stonith 全流程。 结构:3 个 Section(3.1 带 Quiz;3.2/3.3 带 Guided Exercise)+ 章末 Lab(lab: fencing-review)。
Chapter Goal / Objectives(原文+译)
- GOAL: Isolate unresponsive cluster nodes to protect data and recover services and resources after a failure(隔离无响应节点,保护数据并在故障后恢复服务/资源).
- OBJECTIVES: ① 描述 fencing 是什么、如何在节点故障时保数据;② 识别受支持的 fence 设备并测试;③ 配置集群在隔离节点时使用正确的 fence 设备。
3.1 Protecting Data with Fencing
为什么必须 fencing
- 节点故障≠完全失效:它可能仍能访问集群资源(挂着共享文件系统/还在写盘),不隔离就会损坏数据。fencing=由集群外部手段切断故障节点对资源的访问。
- 常见做法:断电(死节点啥也干不了);或组合操作:断网络(阻止新工作)+断存储(阻止写共享存储)。
- 未 fence 前,HA Add-On 不开始对该节点的资源恢复(fencing 是恢复的前提)。
- 无 fencing 灾难剧本:node1 失联但仍挂着文件系统 → node2 快速 fsck 后挂载同一文件系统并起服务 → node1 “醒来”继续写盘 → 双挂载数据损坏。fencing 必须覆盖所有节点,否则集群不被 Red Hat 视为受支持。
- 要求:每个节点都应能隔离其余每个节点。
两类 fencing 与设备/代理分层
- Power fencing(STONITH = Shoot The Other Node In The Head):
- 外部设备:网络电源条(如 APC network power switch)。
- 内部/管理硬件:iLO、DRAC、IPMI、虚拟机 fencing——直接电源管理节点。
- ⚠️ 多电源服务器:必须所有电源都断开再上电,否则机器根本没断电,fencing“假成功”→数据风险。
- Storage fencing(存储隔离):在存储层断开——关 FC 交换机端口或 SCSI reservation;若只用存储 fencing 不配合电源 fencing,管理员要负责让故障节点重新入群(通常手动重启/断电)。
- 可组合:一个设备断 FC、iLO 再断电重启;多方法互为 primary/backup(Quiz 第 5 题 b)。
- 架构:集群 → fence agent(fence_* 命令/资源)→ fence device(执行断电/断网)。装包
fence-agents-all覆盖绝大多数官方代理。
3.1 Quiz(答案要点)
fencing 主目标=防止故障节点在资源恢复前造成损坏(b);fencing 必要于保数据完整性(a);每节点只允许一种 fencing=False;power fencing 并非总会“重启”(可只关不启)=b;fencing 方法可组合=主/备(b)。
3.2 Setting Up Fencing Devices
设备/代理清单与参数
pcs stonith list:列出已装 agent 名+说明;每个 agent 有 man 页(man fence_ipmilan)与fence_ipmilan --help。fence-agents-all含多数常用 agent,但不含全部(云厂商类需单独装)。- 配置前需书面记录(供 agent 使用):
- APC 电源条(fence_apc):设备 IP、登录用户名/密码、访问协议(ssh/telnet)、每节点 plug 编号/UUID。
- iLO/DRAC/IPMI 管理卡:设备 IP、凭据、节点标识。
- libvirt/KVM 虚拟机(fence_xvm/fence_virt):hypervisor 上跑 fence-virtd;多播模式用共享密钥签名 fencing 请求——VM 可分布在不同 hypervisor,只要同多播组+同密钥。
- 云实例:
fence-agents-aws/fence-agents-azure-arm/fence-agents-aliyun等,不在 fence-agents-all 里,逐个安装。
- 测试:直接命令行调用 agent 验证设备本身:
fence_ipmilan --ip=192.168.100.101 --username=admin --password=password→Success: Rebooted。注意:这只验证设备可用,不验证集群内配置正确(集群侧要用pcs stonith fence测)。APC 测试可先插台灯验证断电。
3.2 GE(lab: fencing-verify)
装 fence-agents-all(或只装 ipmilan)→ mandb → man -k fence_ / man fence_ipmilan / fence_ipmilan --help → 另一终端 ping nodeb 观察 → nodea 上执行 fence_ipmilan --lanplus --ip=192.168.0.102 --username=admin --password=password --power-timeout=180 → 输出 Success: Rebooted,nodeb 掉线数分钟后恢复。
3.3 Configuring Cluster Fencing Agents
创建/查看/改删 STONITH 资源
pcs stonith create <name> <fencing_agent> [参数…] # 如 fence_apc / fence_ipmilan / fence_rh436
pcs stonith status # Started=可用 / Stopped=不可用
pcs stonith config [<name>] # 查看属性+monitor interval=60s
pcs stonith update <name> <参数=值> # 增改参数
pcs stonith delete <name> # 删除(会先 stop)
pcs stonith fence <nodename> # 手动隔离(在“别的节点”上跑)- 单节点设备:
pcs stonith create fence_node1 fence_apc ip=… username=… password=… pcmk_host_list="node1.example.com"。 - 多节点单设备(教室 fence_rh436 示例):
pcs stonith create fence_all fence_rh436 ip=192.168.0.100 username=admin password=password \
power_timeout=180 \
pcmk_host_map="nodea.private.example.com:1;nodeb.private.example.com:2;nodec.private.example.com:3"通用 pcmk_host_* 参数(考试重点)
| 参数 | 含义 |
|---|---|
pcmk_reboot_timeout | 等待 fencing 完成秒数,默认 60s |
pcmk_host_list | 该设备能控制的节点名列表(或用 nodename:port 映射清单) |
pcmk_host_map | node1:port1;node2:port2 分号分隔的“节点→端口/插槽”映射 |
pcmk_host_check | 集群如何判断设备可控制哪些节点:dynamic-list(默认,查询设备端口列表,需设备支持且端口名=节点名)/ static-list(用 host_list/host_map)/ none(设备能隔离所有节点);一旦给了 host_list/host_map 自动切 static-list |
- 记法要点:什么都不设→查询设备(dynamic);设备不支持列端口→必须
pcmk_host_map。
测试集群侧 fencing 的两种办法
pcs stonith fence <node>(在目标节点之外执行)成功=配置可用。- 断掉某节点网络(拔线/防火墙封集群端口/停整栈)→ 观察其余节点能否检测到故障并自动 fence(同时验证检测能力)。
3.3 GE(lab: fencing-inspect)
先 pcs stonith config 看 3 个 fence_ipmilan 资源 → pcs stonith fence nodeb.private.example.com 验证(数分钟后 nodeb 回 Online)→ pcs stonith delete fence_nodea/b/c → 各节点本地 rpm 装 fence-agents-rh436 → 建单一资源 fence_custom(fence_rh436,ip=192.168.0.100,pcmk_host_map=3 台:1/2/3,power_timeout=180)→ 再 fence nodeb 验证。
Lab 概要(lab: fencing-review / grade)
workstation 跑 /home/student/labs/fencing-review/playbook.yml(分发 fence-agents-rh436)→ nodea 上 pcs stonith create fence_all fence_rh436 … pcmk_host_map=…:1;…:2;…:3 power_timeout=180 → pcs stonith config 核对 → 手动 pcs stonith fence nodeb 验证 → lab grade fencing-review。
命令速查表
| 用途 | 命令 |
|---|---|
| 装全量 fence 代理 | yum install fence-agents-all(云代理需单装) |
| 列出已装代理 | pcs stonith list |
| 代理参数 | man fence_ipmilan;fence_ipmilan --help |
| 直接测设备 | fence_ipmilan --lanplus --ip=<BMC> --username=… --password=… [--power-timeout=180] |
| 建 STONITH | pcs stonith create <name> <agent> <参数…> |
| 看状态/配置 | pcs stonith status;pcs stonith config [<name>] |
| 改/删 | pcs stonith update <name> <k=v>;pcs stonith delete <name> |
| 手动隔离 | pcs stonith fence <node-fqdn>(在其他节点执行) |
| 实验/评分 | lab start fencing-verify/fencing-inspect;lab grade fencing-review |
词汇表
| 英文 | 中文 | 速记 |
|---|---|---|
| fencing | 隔离 | 外部手段切断故障节点对资源访问 |
| STONITH | 隔离(电源类) | Shoot The Other Node In The Head |
| power fencing | 电源隔离 | 电源条/管理卡(iLO/DRAC/IPMI)/VM |
| storage fencing | 存储隔离 | FC 端口关断 / SCSI reservation |
| fence device / fence agent | 隔离设备 / 隔离代理 | 设备干活,代理是中间软件 |
| fence-virtd | libvirt 隔离守护 | hypervisor 上跑;多播+共享密钥 |
| BMC | 基板管理控制器 | IPMI-over-LAN 远程电源管理 |
| pcmk_reboot_timeout | 隔离超时 | 默认 60s |
| pcmk_host_list / map | 节点列表 / 节点映射 | 单设备多节点;map 格式 node:port;… |
| pcmk_host_check | 节点判定方式 | dynamic-list/static-list/none |
| Success: Rebooted | 设备测试成功回显 | 直调 agent 验证设备 |
| power strip | 电源条 | APC 网络电源条做外部电源隔离 |
自测 10 题
- fencing 为什么是资源恢复的前置?(防故障节点在恢复期间写坏共享资源)
- 无 fencing 的典型事故剧本?(失联节点仍挂文件系统→另一节点挂载并起服务→醒来双挂载损坏)
- 两类 fencing 是什么?(power/STONITH 与 storage;可组合主备)
- 多电源服务器 fencing 要注意什么?(全部电源先断再上,否则没真断电)
- 只用 storage fencing 谁负责让节点归队?(管理员——手动重启/断电)
- fence-virtd 多播模式要求?(各 hypervisor 同多播组+同共享密钥)
- fence-agents-all 是否含云代理?(不含,aws/azure-arm/aliyun 单独装)
- 直调 agent 测试与集群侧测试的差别?(前者只验证设备;
pcs stonith fence才验证集群配置) - pcmk_host_check 三值及默认?(dynamic-list 默认;设了 host_list/map 自动 static-list;none 全可隔)
- 一个设备隔离 3 节点怎么写参数?(pcmk_host_map="nodea…:1;nodeb…:2;nodec…:3")
