20 分布式锁管理器 (DLM) #
内核中的分布式锁管理器 (DLM) 是 OCFS2、GFS2、群集 MD 和群集 LVM (lvmlockd) 用于在每个相关层提供主动-主动存储的基础组件。
20.1 用于 DLM 通讯的协议 #
为了避免单一故障点,非常有必要对 High Availability 群集配置冗余通讯路径。对于 DLM 通讯也是如此。如果出于任何原因无法使用网络绑定(聚合控制协议,LACP),我们强烈建议在 Corosync 中定义冗余通讯通道(另一个环)。有关详细信息,请参见 过程 4.3 “定义冗余通讯通道”。
DLM 可使用 TCP 或 SCTP 协议通过端口 21064 进行通讯,具体使用哪个协议取决于 /etc/corosync/corosync.conf
中的配置。
如果
设置为none
(表示禁用冗余环配置),DLM 会自动使用 TCP。但是,如果未定义冗余通讯通道,当 TCP 链路断开时,DLM 通讯将会失败。如果
设置为passive
(通常会如此设置),并且在/etc/corosync/corosync.conf
中正确配置了另一个通讯环,DLM 将自动使用 SCTP。在这种情况下,DLM 消息交换会获得 SCTP 提供的冗余功能。
20.2 配置 DLM 群集资源 #
DLM 使用 Pacemaker 提供的并在用户空间中运行的群集成员资格服务。因此,DLM 需要配置为群集中每个节点上都存在的克隆资源。
由于 OCFS2、GFS2、群集 MD 和群集 LVM (lvmlockd) 全部使用 DLM,因此为 DLM 配置一个资源便已足够。由于 DLM 资源在群集中的所有节点上运行,因此它配置为克隆资源。
如果您的设置包含 OCFS2 和群集 LVM,则只需为 OCFS2 和群集 LVM 配置一个 DLM 资源就够了。在此情况下,请使用 过程 20.1 “配置 DLM 的基础组” 配置 DLM。
但是,如果您需要确保使用 DLM 的资源彼此独立(例如多个 OCFS2 挂载点),请使用不同的共置和顺序约束,而不要使用组。在此情况下,请使用 过程 20.2 “配置独立的 DLM 资源” 配置 DLM。
此配置由一个包含数个原始资源的基础组和一个基础克隆资源构成。之后,基础组和基础克隆便可用于多种不同的场景(例如,用于 OCFS2 和群集 LVM)。您只需视需要使用相应的基元资源扩展基本组。由于基本组具有内部共置和顺序约束,您无需单独指定多个组、克隆及其依赖项,方便了总体设置。
以
root
或同等身份登录节点。运行
crm configure
。为 DLM 创建原始资源:
crm(live)configure#
primitive dlm ocf:pacemaker:controld \ op monitor interval="60" timeout="60"
为
dlm
资源和其他存储相关的资源创建一个基础组:crm(live)configure#
group g-storage dlm
克隆
g-storage
组,使它在所有节点上运行:crm(live)configure#
clone cl-storage g-storage \ meta interleave=true target-role=Started
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。
未启用 STONITH 的群集不受支持。如果出于测试或查错目的将全局群集选项 stonith-enabled
设置为 false
,则 DLM 资源以及依赖于它的所有服务(例如群集 LVM、GFS2 和 OCFS2)将无法启动。
此配置由一个原始资源和一个克隆资源构成,但不包含组。通过添加共置和顺序约束,可以避免在多个使用 DLM 的资源(例如多个 OCFS2 挂载点)之间形成依赖关系。
以
root
或同等身份登录节点。运行
crm configure
。为 DLM 创建原始资源:
crm(live)configure#
primitive dlm ocf:pacemaker:controld \ op start timeout=90 interval=0 \ op stop timeout=100 interval=0 \ op monitor interval=60 timeout=60
克隆
dlm
资源,使它在所有节点上运行:crm(live)configure#
clone cl-dlm dlm meta interleave=true
使用
show
查看所做的更改。如果所有设置均正确无误,请使用
commit
提交更改,然后使用quit
退出 crm 实时配置。