适用于 SUSE Linux Enterprise High Availability Extension 12

16 群集式逻辑卷管理器 (cLVM)

当管理群集上的共享储存区时,所有节点必须收到有关对储存子系统所做更改的通知。Linux 卷管理器 2 (LVM2) 广泛用于管理本地储存,已扩展为支持对整个群集中的卷组进行透明管理。可使用与本地储存相同的命令来管理群集卷组。

16.1 概念概述

群集 LVM 集成了不同工具:

分布式锁管理器(DLM)

集成了对 cLVM 的磁盘访问。

逻辑卷管理器 2 (LVM2)

支持将一个文件系统灵活分布到多个磁盘上。LVM 可提供磁盘空间虚拟池。

群集式逻辑卷管理器 (cLVM)

集成了对 LVM2 元数据的访问,以使每个节点都了解相关更改。cLVM 未集成对共享数据本身的访问;要使 cLVM 可执行此操作,必须在 cLVM 管理的储存区上配置 OCFS2 或其他群集感知应用程序。

16.2 cLVM 配置

根据具体情况,可使用具有以下层的 cLVM 创建 RAID 1 设备:

尽管 MD 设备(Linux 软件 RAID 或 mdadm)提供所有 RAID 级别,但它尚不支持群集。因此,以上列表并未包含此类设备。

请确保已满足以下先决条件:

  • 共享储存设备是可用的,如通过光纤通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供的共享储存设备。

  • 如果是 DRBD,那么两个节点都必须是主节点(如以下过程中所述)。

  • 检查 LVM2 的锁定类型是否为群集感知。/etc/lvm/lvm.conf 中的关键字 locking_type 必须包含值 3(应是默认值)。如果需要,将此配置复制到所有节点。

注意
注意:先创建群集资源

首先如第 16.2.2 节 “创建群集资源”中所述创建群集资源,然后创建 LVM 卷。否则,稍后将无法删除卷。

16.2.1 配置 Cmirrord

要跟踪群集中的镜像日志信息,可以使用 cmirrord 守护程序。如果此守护程序未运行,则无法处理群集镜像。

假定 /dev/sda/dev/sdb 是共享储存设备。必要时请使用您自己的设备名称替换上述名称。按如下所示继续:

  1. 创建一个至少包含两个节点的群集。

  2. 配置群集以运行 dlmclvmd 和 STONITH:

    root # crm configure
    crm(live)configure# primitive clvmd ocf:lvm2:clvmd \
            op stop interval="0" timeout="100" \
            op start interval="0" timeout="90" \
            op monitor interval="20" timeout="20"
    crm(live)configure# primitive dlm ocf:pacemaker:controld \
            op start interval="0" timeout="90" \
            op stop interval="0" timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd
    crm(live)configure# group base-group dlm clvmd
    crm(live)configure# clone base-clone base-group \
            meta interleave="true"
  3. 使用 exit 退出 crmsh 并提交更改。

  4. 创建群集卷组 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate -cy vg /dev/sda /dev/sdb
  5. 在群集中创建镜像日志逻辑卷 (LV):

    root # lvcreate -nlv -m1 -l10%VG vg --mirrorlog mirrored
  6. 使用 lvs 显示进度。如果百分数已达到 100%,则表示镜像磁盘已成功同步。

  7. 要测试群集卷 /dev/vg/lv,请执行下列步骤:

    1. 读取或写入到 /dev/vg/lv

    2. 使用 lvchange -an 停用 LV。

    3. 使用 lvchange -ay 激活 LV。

    4. 使用 lvconvert 将镜像日志转换为磁盘日志。

  8. 在其他群集 VG 中创建镜像日志 LV。此卷组与先前的卷组不同。

当前的 cLVM 在每个镜像端只能处理一个物理卷 (PV)。如果一个镜像实际由多个需要连接或拆分的 PV 组成,则 lvcreate 无法了解此情况。因此,lvcreatecmirrord 元数据需要了解 PV 在其中一端的分组,以便有效地支持 RAID10。

为支持 RAID10 处理 cmirrord,请使用以下过程(假定 /dev/sda/dev/sdb 是共享储存设备):

  1. 创建卷组 (VG):

    root # pvcreate /dev/sda /dev/sdb
    root # vgcreate vg /dev/sda /dev/sdb
  2. 打开文件 /etc/lvm/lvm.conf 并转到 allocation 部分。设置下列行并保存文件:

    mirror_legs_require_separate_pvs = 1
  3. 将标记添加到 PV:

    root # pvchange --addtag @a /dev/sda
    root # pvchange --addtag @b /dev/sdb

    标记是无序的关键字或指派给储存对象元数据的术语。使用标记功能可以采用您认为有用的方式将无序的标记列表附加到 LVM 储存对象元数据,从而对储存对象集合进行分类。

  4. 列出标记:

    root # pvs -o pv_name,vg_name,pv_tags /dev/sd{a,b}

    您应收到以下输出结果:

      PV         VG     PV Tags
      /dev/sda vgtest a
      /dev/sdb vgtest b

如需有关 LVM 的更多信息,请参见《SUSE Linux Enterprise Server 12 储存管理指南》中的“LVM 配置”一章,网址:http://www.suse.com/documentation/

16.2.2 创建群集资源

准备群集以便使用 cLVM 包括以下基本步骤:

过程 16.1 创建 DLM 资源
注意
注意:cLVM 和 OCFS2 的 DLM 资源

cLVM 和 OCFS2 都需要一个在群集中的所有节点上运行的 DLM 资源,因而通常配置为一个克隆。如果设置既包括 OCFS2 也包括 cLVM,则为 OCFS2 和 cLVM 配置一个 DLM 资源就足够了。

  1. root 用户身份启动外壳并登录。

  2. 运行 crm configure

  3. 使用 show 检查群集资源的当前配置。

  4. 如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 16.2, “创建 LVM 和 cLVM 资源”

    否则,如过程 13.2, “配置 DLM 资源”中所述配置 DLM 资源和相应的基本组和基本克隆。

  5. 使用 exit 保留 crm 当前配置。

过程 16.2 创建 LVM 和 cLVM 资源
  1. root 用户身份启动外壳并登录。

  2. 运行 crm configure

  3. 如下所示配置 cLVM 资源:

    crm(live)configure# primitive clvm ocf:lvm2:clvmd \
          params daemon_timeout="30"
  4. 如下所示为卷组配置 LVM 资源:

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" \
          op monitor interval="60" timeout="60"
  5. 如果希望仅在一个节点上激活卷组,则如下所述配置 LVM 资源并忽略步骤 6

    crm(live)configure# primitive vg1 ocf:heartbeat:LVM \
          params volgrpname="cluster-vg" exclusive="yes" \
          op monitor interval="60" timeout="60"

    在这种情况下,cLVM 将保护 VG 内的所有逻辑卷,防止它们在多个节点上激活,这也是非群集应用程序的一种附加保护措施。

  6. 要确保在群集范围内激活 cLVM 和 LVM 资源,请向在过程 13.2, “配置 DLM 资源”中创建的基本组添加这两个原始资源:

    1. 输入

      crm(live)configure# edit base-group
    2. 在打开的 vi 编辑器中,如下所示修改组并保存更改:

      crm(live)configure# group base-group dlm clvm vg1 ocfs2-1
      重要
      重要:无 OCFS2 的设置

      如果设置不包括 OCFS2,则忽略基本组中的 ocfs2-1 原始资源。

  7. 使用 show 复查更改。

  8. 如果全部都正确,则使用 commit 提交更改,并使用 exit 退出 crm 当前配置。

16.2.3 方案:iSCSI 在 SAN 上的 cLVM

以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 16.1 “设置使用 cLVM 的 iSCSI”所示。

设置使用 cLVM 的 iSCSI
图 16.1 设置使用 cLVM 的 iSCSI
警告
警告:数据丢失

以下过程将损坏磁盘上的所有数据!

首先只配置一个 SAN 盒。每个 SAN Box 都需要导出自己的 iSCSI 目标。按如下所示继续:

过程 16.3 配置 iSCSI 目标 (SAN)
  1. 运行 YaST,然后单击网络服务 › iSCSI 目标以启动 iSCSI 服务器模块。

  2. 如果要在计算机引导时启动 iSCSI 目标,请选择引导时,否则请选择手动

  3. 如果正在运行防火墙,请启用打开防火墙中的端口

  4. 切换到全局选项卡。如果需要身份验证,请启用进来的和/或出去的身份验证。在本例中,我们选择无身份验证

  5. 添加新的 iSCSI 目标:

    1. 切换到目标选项卡。

    2. 单击添加

    3. 输入目标名称。名称需要采用如下所示的格式:

      iqn.DATE.DOMAIN

      有关格式的更多信息,请参见 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name)(3.2.6.3.1.“iqn.”(iSCSI 限定名称)类型)一节,网址:http://www.ietf.org/rfc/rfc3720.txt

    4. 如果需要描述性更强的名称,可以进行更改,但要确保不同目标之间的标识符是唯一的。

    5. 单击添加

    6. 路径中输入设备名,并使用 Scsiid

    7. 单击下一步两次。

  6. 出现警告框时单击进行确认。

  7. 打开配置文件 /etc/iscsi/iscsi.conf,并将参数 node.startup 更改为 automatic

现在按如下方式设置 iSCSI 发起程序:

过程 16.4 配置 iSCSI 发起程序
  1. 运行 YaST,然后单击网络服务 › iSCSI 发起程序

  2. 如果要在计算机引导时启动 iSCSI 发起程序,请选择引导时,否则请将其设置为手动

  3. 切换到发现选项卡并单击发现按钮。

  4. 添加 iSCSI 目标的 IP 地址和端口(请参见过程 16.3, “配置 iSCSI 目标 (SAN)”)。通常,可以保留端口并使用其默认值。

  5. 如果使用身份验证,请插入进来的和出去的用户名和口令,否则请激活无身份验证

  6. 选择下一步。找到的连接随即显示在列表中。

  7. 完成继续。

  8. 打开外壳,并以 root 用户身份登录。

  9. 测试 iSCSI 发起程序是否已成功启动:

    root # iscsiadm -m discovery -t st -p 192.168.3.100
    192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1
  10. 建立会话:

    root # iscsiadm -m node -l
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]
    Logging in to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]: successful
    Login to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260]: successful

    使用 lsscsi 查看设备名:

    ...
    [4:0:0:2]    disk    IET      ...     0     /dev/sdd
    [5:0:0:1]    disk    IET      ...     0     /dev/sde

    查找第三列中有 IET 的项。在本例中,设备为 /dev/sdd/dev/sde

过程 16.5 创建 LVM 卷组
  1. 打开已按过程 16.4, “配置 iSCSI 发起程序”运行 iSCSI 发起程序的一个节点上的 root 外壳。

  2. 使用命令 pvcreate 在磁盘 /dev/sdd/dev/sde 上准备 LVM 的物理卷:

    root # pvcreate /dev/sdd
    root # pvcreate /dev/sde
  3. 在这两个磁盘上创建群集感知卷组:

    root # vgcreate --clustered y clustervg /dev/sdd /dev/sde
  4. 根据需要创建逻辑卷:

    root # lvcreate --name clusterlv --size 500M clustervg
  5. 使用 pvdisplay 检查物理卷:

      --- Physical volume ---
          PV Name               /dev/sdd
          VG Name               clustervg
          PV Size               509,88 MB / not usable 1,88 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh
          
          --- Physical volume ---
          PV Name               /dev/sde
          VG Name               clustervg
          PV Size               509,84 MB / not usable 1,84 MB
          Allocatable           yes
          PE Size (KByte)       4096
          Total PE              127
          Free PE               127
          Allocated PE          0
          PV UUID               Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
  6. 使用 vgdisplay 检查卷组:

      --- Volume group ---
          VG Name               clustervg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          Clustered             yes
          Shared                no
          MAX LV                0
          Cur LV                0
          Open LV               0
          Max PV                0
          Cur PV                2
          Act PV                2
          VG Size               1016,00 MB
          PE Size               4,00 MB
          Total PE              254
          Alloc PE / Size       0 / 0
          Free  PE / Size       254 / 1016,00 MB
          VG UUID               UCyWw8-2jqV-enuT-KH4d-NXQI-JhH3-J24anD

创建卷并启动资源后,应有一个名为 /dev/dm-0 的新设备。建议使用 LVM 资源上的群集文件系统,例如 OCFS。有关详细信息,请参见第 13 章 OCFS2

16.2.4 方案:使用 DRBD 的 cLVM

如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。

过程 16.6 创建使用 DRBD 的群集感知卷组
  1. 创建主/主 DRBD 资源:

    1. 首先,按过程 15.1, “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为 up-to-date。使用 cat /proc/drbdsystemctl status drbd.service 检查情况是否如此。

    2. 将以下选项添加到配置文件(通常类似 /etc/drbd.d/r0.res):

      resource r0 {
        startup {
          become-primary-on both;
        }
      
        net {
           allow-two-primaries;
        }
        ...
      }
    3. 将更改的配置文件复制到另一个节点,例如:

      root # scp /etc/drbd.d/r0.res venus:/etc/drbd.d/
    4. 两个节点上运行以下命令:

      root # drbdadm disconnect r0
      root # drbdadm connect r0
      root # drbdadm primary r0
    5. 检查节点的状态:

      root # cat /proc/drbd
      ...
       0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
  2. 将 clvmd 资源作为克隆品包含在 Pacemaker 配置中,并让它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 16.1, “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用 crm_mon 或 Web 界面检查正在运行的服务。

  3. 使用命令 pvcreate 准备 LVM 的物理卷。例如,在设备 /dev/drbd_r0 上,命令应类似于:

    root # pvcreate /dev/drbd_r0
  4. 创建群集感知卷组:

    root # vgcreate --clustered y myclusterfs /dev/drbd_r0
  5. 根据需要创建逻辑卷。您可能想要更改逻辑卷的大小。例如,使用以下命令创建 4 GB 的逻辑卷:

    root # lvcreate --name testlv -L 4G myclusterfs
  6. 现在 VG 内的逻辑卷可作为文件系统装入或原始用法提供。确保使用逻辑卷的服务具备适当的依赖性,以便在激活 VG 后对它们进行共置和排序。

完成这些配置步骤后,即可像在任何独立工作站中一样进行 LVM2 配置。

16.3 显式配置合格的 LVM2 设备

当若干设备看似共享同一物理卷签名(多路径设备或 DRBD 可能发生这种情况)时,建议显式配置 LVM2 扫描 PV 的设备。

例如,如果命令 vgcreate 使用的是物理设备而不是镜像块设备,DRBD 将会感到困惑,并可能导致 DRBD 的裂脑情况。

要停用 LVM2 的单个设备,请执行以下操作:

  1. 编辑文件 /etc/lvm/lvm.conf 并搜索以 filter 开头的行。

  2. 其中的模式作为正则表达式来处理。前面的a表示接受扫描的设备模式,前面的r表示拒绝遵守该设备模式的设备。

  3. 要删除名为 /dev/sdb1 的设备,请向过滤规则添加以下表达式:

    "r|^/dev/sdb1$|"

    完整的过滤行将显示如下:

    filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]

    接受 DRBD 和 MPIO 设备但拒绝所有其他设备的过滤行将显示如下:

    filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
  4. 编写配置文件并将它复制到所有群集节点。

16.4 更多信息

可从 http://www.clusterlabs.org/wiki/Help:Contents 处的 pacemaker 邮件列表中获取完整信息。

官方 cLVM 常见问题可在以下网址中找到:http://sources.redhat.com/cluster/wiki/FAQ/CLVM

打印此页