附录 F. 高可用性 LVM(HA-LVM)
红帽高可用性附加组件在故障切换配置中支持高可用性 LVM 卷(HA-LVM)。这与集群的逻辑卷管理器(CLVM)启用的 active/active 配置不同,它是 LVM 的一组集群扩展,可让计算机集群管理共享存储。
应根据所部署应用程序或服务的需要使用 CLVM 或 HA-LVM。
- 如果应用程序是在全局可识别,并已调整为每次同时在多台机器中运行,那就应该使用 CLVM。特别是如果您集群中一个以上的节点要求访问在活动节点间共享的存储,您就必须使用 CLVM。CLVM 允许用户在共享存储中配置逻辑卷,方法是配置逻辑卷时锁定对物理存储的访问,并使用集群的锁定服务管理共享存储。有关 CLVM 及 LVM 常规配置详情请参考 《管理逻辑卷管理器》。
- 如果应用程序以最佳的 active/passive(故障切换)配置运行,那么一次只有一个访问该存储的单一节点是活动的,您就可以使用高可用逻辑卷管理代理(HA-LVM)。
大多数应用程序在 active/passive 配置中运行更佳,因为它们不是设计或者优化以便与其他事务同时运行。如果逻辑卷是镜像的,那么选择运行一个在集群的逻辑卷中无法识别的应用程序可能导致性能下降。这是因为集群沟通会消耗这些事务中的逻辑卷。在集群中可识别的应用程序必须可以让获得的性能比集群文件系统和集群可识别逻辑卷损失的性能多。有些应用程序和工作负载更容易达到此目的。确定集群要求是什么,以及在 active/active 集群优化时的额外努力是否有益才是在两种 LVM 变体间进行选择的依据。大多数用户将会从 HA-LVM 中获得最佳 HA 效果。
HA-LVM 和 CLVM 相似,它们都可以防止 LVM 元数据及其逻辑卷崩溃;反之,如果允许多台机器执行互相可覆盖的更改,则会发生数据和逻辑卷崩溃。HA-LVM 强制限制只能单独激活逻辑卷,即一次只能在一台机器中激活。这就是说只能使用存储驱动器的本地(非集群)部署。避免这种形式的集群合作可提高性能。CLVM 没有这些强制限制,用户可以随意在集群的所有机器中激活逻辑卷。这样就强制使用集群可识别存储驱动器,即允许将集群可识别文件系统和应用程序放在顶层。
可将 HA-LVM 设置为使用两种方法之一达到其强制独家逻辑卷激活的目的。
- 首选方法是使用 CLVM,但它只能激活唯一的逻辑卷。好处是可轻松设置并有效防止管理失误(比如删除正在使用的逻辑卷)。要使用 CLVM,则必须运行高可用性附加组件软件和弹性存储附加组件软件,包括
clvmd
。使用这个方法配置 HA-LVM 的步骤请参考 第 F.1 节 “使用 CLVM 配置 HA-LVM 故障切换(首选)”。 - 第二种方法使用本地机器锁定和 LVM“标签”。这个方法的优点是不需要任何 LVM 集群软件包,但-设置步骤比较复杂,且无法防止管理员意外从不活动的集群中删除逻辑卷。使用这个方法配置 HA-LVM 的步骤请参考 第 F.2 节 “使用标签配置 HA-LVM 故障切换”。
F.1. 使用 CLVM 配置 HA-LVM 故障切换(首选)
要设置 HA-LVM 故障切换(使用首选 CLVM 变体),请执行以下步骤:
- 确定将您的系统配置为支持 CLVM,要求如下:
- 如果 CLVM 逻辑卷不是镜像的,请安装高可用性附加组件和弹性存储附加组件,包括
cmirror
软件包。 - 请将
/etc/lvm/lvm.conf
文件 global 部分的locking_type
参数设定为 ‘3’。 - 必须运行高可用性附加组件和弹性存储附加组件,包括
cmirror
软件包。在 CLVM 镜像中,还必须启动cmirrord
服务。
- 使用标准 LVM 和文件系统命令生成逻辑卷和文件系统,如以下示例所示:
#
pvcreate /dev/sd[cde]1
#vgcreate -cy shared_vg /dev/sd[cde]1
#lvcreate -L 10G -n ha_lv shared_vg
#mkfs.ext4 /dev/shared_vg/ha_lv
#lvchange -an shared_vg/ha_lv
有关生成 LVM 逻辑卷的详情请参考《管理逻辑卷过滤器》。 - 编辑
/etc/cluster/cluster.conf
文件,使其包含新生成的逻辑卷作为您服务之一的资源。另外,您可以使用 Conga 或者ccs
命令为集群配置 LVM 和文件系统资源。以下是/etc/cluster/cluster.conf
文件中将 CLVM 逻辑卷配置为集群资源的资源管理器部分示例:<rm> <failoverdomains> <failoverdomain name="FD" ordered="1" restricted="0"> <failoverdomainnode name="neo-01" priority="1"/> <failoverdomainnode name="neo-02" priority="2"/> </failoverdomain> </failoverdomains> <resources> <lvm name="lvm" vg_name="shared_vg" lv_name="ha-lv"/> <fs name="FS" device="/dev/shared_vg/ha-lv" force_fsck="0" force_unmount="1" fsid="64050" fstype="ext4" mountpoint="/mnt" options="" self_fence="0"/> </resources> <service autostart="1" domain="FD" name="serv" recovery="relocate"> <lvm ref="lvm"/> <fs ref="FS"/> </service> </rm>