7.3. 配置 Fencing
配置 fencing 包括(a)在一个集群中配置一个或者多个 fence 设备;(b)为每个节点配置一个或者多个 fence 方法(使用指定的一个或者多个 fence 设备)。
根据您的配置所需 fence 设备类型和 fence 方法配置
cluster.conf
,如下:
- 在
fencedevices
部分,使用fencedevice
元素和 fence 设备独立属性指定每个 fence 设备。例 7.3 “添加到cluster.conf
中的 APC Fence 设备” 演示添加了 APC fence 设备的配置文件示例。 - 在
clusternodes
部分,每个clusternodes
部分的fence
元素中,指定每个节点的 fence 方法。使用method
属性name
指定 fence 方法名称。使用device
元素及其属性name
和具体 fence 设备参数为每个 fence 方法指定 fence 设备。例 7.4 “添加到cluster.conf
的 fence 方法” 演示了集群中每个节点一个 fence 设备的 fence 方法示例。 - 在非电源 fence 方法(即 SAN/存储 fencing)的
clusternodes
部分添加unfence
字段。这可保证在重启该节点前不会重新启用被 fence 的节点。有关 unfencing 节点的详情请参考fence_node
(8) man page。与fence
部分不同,unfence
部分不包含method
。它直接包含device
参考,使用 "on" 或者 "enable" 的明确动作(action
)成为fence
对应设备部分的镜像。fence
和unfence
device
行都参考同一fencedevice
,并应在每个节点中重复同样的参数。将action
属性指定为 "on" 或者 "enable" ,可在重启时启用该节点。例 7.4 “添加到cluster.conf
的 fence 方法” 和 例 7.5 “cluster.conf
:每个节点中有多种 Fence 方法” 中包含unfence
元素和属性示例。有关unfence
详情请参考fence_node
man page。 - 增加
config_version
属性参数即可更新该参数(例如:从config_version="2"
改为config_version="3">
)。 - 保存
/etc/cluster/cluster.conf
。 - (可选),运行
ccs_config_validate
命令,确认根据集群方案(cluster.rng
)更新的文件。例如:[root@example-01 ~]#
ccs_config_validate
Configuration validates - 请运行
cman_tool version -r
命令在剩余的所有集群节点中推广。这还将运行附加验证。需要在每个集群节点中都运行ricci
方可推广更新的集群配置信息。 - 确认推广了更新的文件。
如果需要,您可以通过在每个节点中使用多种 fence 方法和在每个 fence 方法中使用多个 fence 设备配置复杂配置。当在每个节点中指定多个 fence 方法时,如果使用第一个方法
fenced
执行 fence 操作失败,则 fence 守护进程会尝试下一个方法,然后继续循环尝试所有方法直到成功为止。
有时 fencing 节点需要禁用两个 I/O 路径或者两个电源端口。这可通过在 fence 方法中指定两个或者多个设备完成。
fenced
为每个 fence 设备行运行一次 fence 代理;只有全部成功方可认为是成功。
“Fencing 配置示例”一节 中演示了更复杂的配置。
您可以在 fence 设备代理 man page 中找到有关配置具体 fence 设备的更多信息(例如:
fence_apc
man page)。另外,您可以在 附录 A, Fence 设备参数 中获得有关 fence 参数的更多信息,在 /usr/sbin/
中获得 fence 代理的更多信息,在 /usr/share/cluster/cluster.rng
中获得有关集群方案的更多信息,在 /usr/share/doc/cman-X.Y.ZZ/cluster_conf.html
中获得有关注释方案的更多信息(例如:/usr/share/doc/cman-3.0.12/cluster_conf.html
)。
Fencing 配置示例
以下示例演示了每个节点一个 fence 方法以及每个 fence 方法一个 fence 设备的简单配置:
以下示例演示了较复杂的配置:
注意
本节中的示例并不完全,即还有其他方法根据您的要求配置 fencing。
例 7.3. 添加到 cluster.conf
中的 APC Fence 设备
<cluster name="mycluster" config_version="3"> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> </fence> </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> </fence> </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> </fence> </clusternode> </clusternodes> <fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/> </fencedevices> <rm> </rm> </cluster>
在这个示例中,已将 fence 设备(
fencedevice
)添加到 fencedevices
元素中,指定 fence 代理(agent
)为 fence_apc
,IP 地址(ipaddr
)为 apc_ip_example
,登录(login
)为 login_example
,fence 设备名称(name
)为 apc
,以及密码(passwd
)为 password_example
。
例 7.4. 添加到 cluster.conf
的 fence 方法
<cluster name="mycluster" config_version="3"> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="APC"> <device name="apc" port="1"/> </method> </fence> </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="APC"> <device name="apc" port="2"/> </method> </fence> </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> <method name="APC"> <device name="apc" port="3"/> </method> </fence> </clusternode> </clusternodes> <fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/> </fencedevices> <rm> </rm> </cluster>
在这个示例中为每个节点添加了 fence 方法(
method
)。每个节点的 fence 方法名称(name
)为 APC
。将用于每个节点中 fence 方法的设备(device
)名称(name
)指定为 apc
,并为每个节点指定唯一 APC 切换电源端口号(port
)。例如:node-01.example.com 的端口号为 1
(port="1"
)。每个节点的设备名称(device name="apc"
)根据 fencedevices
元素 apc
行中的名称(name
)指向 fence 设备:fencedevice agent="fence_apc"
ipaddr="apc_ip_example" login="login_example"
name="apc" passwd="password_example"
。
例 7.5. cluster.conf
:每个节点中有多种 Fence 方法
<cluster name="mycluster" config_version="3"> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="APC"> <device name="apc" port="1"/> </method> <method name="SAN"> <device name="sanswitch1" port="11"/> </method> </fence> <unfence> <device name="sanswitch1" port="11" action="on"/> </unfence </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="APC"> <device name="apc" port="2"/> </method> <method name="SAN"> <device name="sanswitch1" port="12"/> </method> </fence> <unfence> <device name="sanswitch1" port="12" action="on"/> </unfence </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> <method name="APC"> <device name="apc" port="3"/> </method> <method name="SAN"> <device name="sanswitch1" port="13"/> </method> </fence> <unfence> <device name="sanswitch1" port="13" action="on"/> </unfence </clusternode> </clusternodes> <fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc" passwd="password_example"/> <fencedevice agent="fence_sanbox2" ipaddr="san_ip_example" login="login_example" name="sanswitch1" passwd="password_example"/> </fencedevices> <rm> </rm> </cluster>
例 7.6. cluster.conf
:Fencing,多路径多端口
<cluster name="mycluster" config_version="3"> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="SAN-multi"> <device name="sanswitch1" port="11"/> <device name="sanswitch2" port="11"/> </method> </fence> <unfence> <device name="sanswitch1" port="11" action="on"/> <device name="sanswitch2" port="11" action="on"/> </unfence </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="SAN-multi"> <device name="sanswitch1" port="12"/> <device name="sanswitch2" port="12"/> </method> </fence> <unfence> <device name="sanswitch1" port="12" action="on"/> <device name="sanswitch2" port="12" action="on"/> </unfence </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> <method name="SAN-multi"> <device name="sanswitch1" port="13"/> <device name="sanswitch2" port="13"/> </method> </fence> <unfence> <device name="sanswitch1" port="13" action="on"/> <device name="sanswitch2" port="13" action="on"/> </unfence </clusternode> </clusternodes> <fencedevices> <fencedevice agent="fence_sanbox2" ipaddr="san_ip_example" login="login_example" name="sanswitch1" passwd="password_example"/> <fencedevice agent="fence_sanbox2" ipaddr="san_ip_example" login="login_example" name="sanswitch2" passwd="password_example"/> </fencedevices> <rm> </rm> </cluster>
例 7.7. cluster.conf
:使用双电源 Fencing 节点
<cluster name="mycluster" config_version="3"> <clusternodes> <clusternode name="node-01.example.com" nodeid="1"> <fence> <method name="APC-dual"> <device name="apc1" port="1"action="off"/> <device name="apc2" port="1"action="off"/> <device name="apc1" port="1"action="on"/> <device name="apc2" port="1"action="on"/> </method> </fence> </clusternode> <clusternode name="node-02.example.com" nodeid="2"> <fence> <method name="APC-dual"> <device name="apc1" port="2"action="off"/> <device name="apc2" port="2"action="off"/> <device name="apc1" port="2"action="on"/> <device name="apc2" port="2"action="on"/> </method> </fence> </clusternode> <clusternode name="node-03.example.com" nodeid="3"> <fence> <method name="APC-dual"> <device name="apc1" port="3"action="off"/> <device name="apc2" port="3"action="off"/> <device name="apc1" port="3"action="on"/> <device name="apc2" port="3"action="on"/> </method> </fence> </clusternode> </clusternodes> <fencedevices> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc1" passwd="password_example"/> <fencedevice agent="fence_apc" ipaddr="apc_ip_example" login="login_example" name="apc2" passwd="password_example"/> </fencedevices> <rm> </rm> </cluster>
当使用电源切换 fence 使用双电源的节点时,必须告知代理在恢复两个电源端口前关闭两个电源端口。默认代理开关行为将导致永远无法在该节点完全禁用该电源。