集群 LVM
集群 LVM 允许在共享存储上使用常规 LVM 卷组和逻辑卷。
在配置了集群 LVM 的集群中,所有集群节点都可以同时访问一个卷组及其逻辑卷。
借助集群 LVM,管理员可以将 LVM 的管理优势与 GFS2 等共享文件系统结合使用,适用于诸如使逻辑卷内的虚拟机镜像可供所有集群节点使用等场景。
使用集群 LVM 的集群中逻辑卷的主动/主动配置是通过使用名为 clvmd 的守护进程将元数据更改传播到所有集群节点来实现的。
clvmd 守护进程管理集群卷组,并将它们在一个集群节点上所做的元数据更改传达给集群中的所有剩余节点。
如果没有 clvmd 守护程序,在一个集群节点上所做的 LVM 元数据更改对于其他集群节点来说是未知的。
由于这些元数据定义了哪些存储地址可用于数据和文件系统信息,因此未传播到所有集群节点的元数据更改可能会导致 LVM 元数据以及驻留在 LVM 物理卷上的数据损坏。
为了防止多个节点同时更改 LVM 元数据,集群 LVM 使用分布式锁管理器 (DLM) 进行锁管理。
必须在配置集群 LVM 之前安装 clvmd 守护程序和 DLM 锁管理器。
它们可以通过分别安装 lvm2-cluster 和 dlm 包来获得。
这两个软件包都可以从 Resilient Storage 存储库中获得。
注意:虽然 clvmd 可以在集群中的多个节点上同时激活一个卷·组,但卷组包含的文件系统只能同时挂载在多个节点上,如果它们是集群感知的文件系统,例如 GFS2.
ext2. ext3. ext4. XFS等非集群文件系统不能同时挂载在集群中的多个节点上;即使节点配置为运行 clvmd。
配置集群 LVM
要配置集群 LVM,必须将所有集群节点配置为使用 LVM 的内置集群锁定。
这可以通过在每个节点上手动编辑 /etc/lvm/lvm.conf 并将锁定类型选项设置为 3 来完成。
# vi /etc/lvm/lvm.conf locking_type = 3
为了提高性能以及 udev 对卷组和逻辑卷的自动激活,LVM 使用了元数据缓存。
默认情况下,LVM 使用守护进程 lvmetad 集中管理其元数据。
虽然当 LVM 配置为基于本地文件的锁定 (locking_type = 1) 时支持使用 lvmetad,但目前不支持跨集群节点使用它。
因此,当 LVM 配置为集群锁定时,还必须使用 /etc/lvm/lvm.conf 中的以下设置在每个节点上禁用 lvmetad。
# vi /etc/lvm/lvm.conf use_lvmetad = 0
在实现集群 LVM 时,可以通过编辑 /etc/lvm/lvm.conf 配置文件手动执行前面的 LVM 配置更改。
或者,可以通过运行以下命令来实现这两种配置更改。
# lvmconf --enable-cluster
在禁用 lvmetad 元数据缓存的使用后,也可以在集群上禁用 lvmetad 服务。
# systemctl stop lvm2-lvmetad
为集群锁定配置 LVM 后,分别使用 controld 和 clvm 资源代理在集群中创建 DLM 和 clvmd 资源。
由于这两种资源都需要在集群中的每个节点上运行,因此有必要将它们创建为克隆资源。
# pcs resource create mydlm controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true
# pcs resource create myclvmd clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true
clvmd 资源取决于 DLM 资源。
顺序约束可用于在 clvmd 资源之前强制启动 DLM 资源。
此外,应指定托管约束,以便两种资源在同一节点上一起运行。
# pcs constraint order start mydlm-clone then myclvmd-clone
# pcs constraint colocation add myclvmd-clone with mydlm-clone
使用 CLVM 添加逻辑卷
配置 LVM 集群锁定、DLM 和 clvmd 集群资源后,可以使用标准 LVM 命令通过 CLVM 创建逻辑卷。
配置 CLVM 后,对集群卷组所做的任何更改都将传播到所有集群节点。
创建的卷组将自动标记为集群,这表明它们与集群中的其他节点共享。
注意:对集群卷组进行更改时,clvmd 要求集群是法定的,并且所有集群节点当前都已启动。