适用于 SUSE Linux Enterprise High Availability Extension 12 SP5

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

摘要

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

21.1 概念概述

系统通过不同的工具来协调群集 LVM2:

分布式锁管理器 (DLM)

通过锁定机制协调 cLVM 的磁盘访问并调解元数据访问。

逻辑卷管理器 2 (LVM2)

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

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

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

21.2 cLVM 配置

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

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

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

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

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

  • 检查是否已禁用 lvmetad 守护程序,因为它不能与 cLVM 搭配使用。在 /etc/lvm/lvm.conf 中,关键字 use_lvmetad 必须设置为 0(默认值为 1)。如果需要,将此配置复制到所有节点。

21.2.1 创建群集资源

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

过程 21.1︰ 创建 DLM 资源
  1. root 用户身份启动外壳并登录。

  2. 检查群集资源的当前配置:

    root # crm configure show
  3. 如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 21.2 “配置 DLM、CLVM 和 STONITH”

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

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

21.2.2 方案:配置 Cmirrord

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

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

过程 21.2︰ 配置 DLM、CLVM 和 STONITH
  1. 按《安装和设置快速入门》中所述,创建至少包含两个节点的群集。

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

    root # crm configure
    crm(live)configure# primitive clvmd ocf:heartbeat:clvm \
            params with_cmirrord=1 \
            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 timeout="90" \
            op stop timeout="100" \
            op monitor interval="60" timeout="60"
    crm(live)configure# primitive sbd_stonith stonith:external/sbd \
            params pcmk_delay_max=30
    crm(live)configure# group g-storage dlm clvmd
    crm(live)configure# clone cl-storage g-storage \
            meta interleave="true" ordered=true
  3. 使用 exit 退出 crmsh 并提交更改。

执行过程 21.3 继续配置磁盘。

过程 21.3︰ 为 cLVM 配置磁盘
  1. 创建群集卷组 (VG):

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

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

  4. 要测试群集卷 /dev/vg1/lv1,请执行下列步骤:

    1. 读取或写入到 /dev/vg1/lv1

    2. 使用 lvchange -an 停用 LV。

    3. 使用 lvchange -ay 激活 LV。

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

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

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

为支持对 RAID10 使用 cmirrord,请执行下面的过程(假设 /dev/sda/dev/sdb/dev/sdc/dev/sdd 是共享储存设备):

  1. 创建卷组 (VG):

    root # pvcreate /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Physical volume "/dev/sda" successfully created
      Physical volume "/dev/sdb" successfully created
      Physical volume "/dev/sdc" successfully created
      Physical volume "/dev/sdd" successfully created
    root # vgcreate vgtest /dev/sda /dev/sdb /dev/sdc /dev/sdd
      Clustered volume group "vgtest" successfully created
  2. 打开文件 /etc/lvm/lvm.conf 并转到 allocation 部分。设置下列行并保存文件:

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

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

    标记是无序的关键字或指派给储存对象元数据的术语。使用标记可以为 LVM2 储存对象的元数据附加无序的标记列表,以实用的方式对此类储存对象的集合进行分类。

  4. 列出标记:

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

    您应收到以下输出结果:

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

如需有关 LVM2 的更多信息,请参见《SUSE Linux Enterprise Server 12 SP5 储存管理指南》:https://documentation.suse.com/sles-12/html/SLES-all/cha-lvm.html

21.2.3 方案:SAN 上 cLVM 与 iSCSI 搭配使用

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

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

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

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

过程 21.4︰ 配置 iSCSI 目标 (SAN)
  1. 运行 YaST,然后单击 网络服务 ›  iSCSI LIO 目标 启动 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/iscsid.conf,将参数 node.startup 更改为 automatic

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

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

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

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

  4. 添加 iSCSI 目标的 IP 地址和端口(请参见过程 21.4 “配置 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 -p 192.168.3.100 -T iqn.2010-03.de.jupiter:san1
    Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,3260]
    Login to [iface: default, target: iqn.2010-03.de.jupiter:san1, portal: 192.168.3.100,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

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

  2. 对磁盘 /dev/sdd/dev/sde 使用 pvcreate 命令,为 LVM2 准备好物理卷:

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

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

    root # lvcreate -m1 --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-* 的新设备。建议使用 LVM2 资源上的群集文件系统,例如 OCFS。有关更多信息,请参见第 18 章 “OCFS2

21.2.4 方案:使用 DRBD 的 cLVM

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

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

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

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

      resource r0 {
        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 # drbdadm status r0
  2. 将 clvmd 资源作为克隆品包含在 Pacemaker 配置中,并让它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 21.1 “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用 crm status 或 Web 界面检查正在运行的服务。

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

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

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

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

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

21.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. 编写配置文件并将它复制到所有群集节点。

21.4 更多信息

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

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

打印此页