跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文档 / 管理指南 / 储存和数据复制 / 群集逻辑卷管理器(群集 LVM)
适用范围 SUSE Linux Enterprise High Availability Extension 15 SP3

22 群集逻辑卷管理器(群集 LVM)

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

22.1 概念概述

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

分布式锁管理器 (DLM)

通过群集范围的锁定协调对多个主机之间共享资源的访问。

逻辑卷管理器 (LVM2)

LVM2 提供磁盘空间的虚拟池,允许将一个逻辑卷灵活分布到多个磁盘。

群集逻辑卷管理器(群集 LVM)

群集 LVM 一词表示群集环境中使用 LVM2。这需要进行一些配置调整,以保护共享储存上的 LVM2 元数据。自 SUSE Linux Enterprise 15 起,群集扩展使用 lvmlockd,取代了众所周知的 clvmd。有关 lvmlockd 的详细信息,请参见 lvmlockd 命令 的手册页(man 8 lvmlockd)。

卷组和逻辑卷

卷组 (VG) 和逻辑卷 (LV) 都属于 LVM2 的基本概念。卷组是多个物理磁盘的储存池。逻辑卷属于卷组,可视为一种弹性卷,您可以在其上创建文件系统。在群集环境中,存在共享 VG 的概念,共享 VG 由共享储存组成,可被多个主机同时使用。

22.2 群集式 LVM 的配置

确保满足以下要求:

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

  • 确保已安装以下软件包:lvm2lvm2-lockd

  • 自 SUSE Linux Enterprise 15 起,我们使用 lvmlockd 作为 LVM2 群集扩展,而不再使用 clvmd。确保 clvmd 守护程序未运行,否则 lvmlockd 将无法启动。

22.2.1 创建群集资源

在一个节点上执行以下基本步骤,以在群集中配置共享 VG:

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

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

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

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

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

  2. 运行以下命令以查看此资源的使用情况:

    root # crm configure ra info lvmlockd
  3. 按如下所示配置 lvmlockd 资源:

    root # crm configure primitive lvmlockd ocf:heartbeat:lvmlockd \
      op start timeout="90" \
      op stop timeout="100" \
      op monitor interval="30" timeout="90"
  4. 为了确保在每个节点上启动 lvmlockd 资源,请将原始资源添加到您在过程 22.1 “创建 DLM 资源”中为储存创建的基本组:

    root # crm configure modgroup g-storage add lvmlockd
  5. 查看所做的更改:

    root # crm configure show
  6. 检查资源是否运行正常:

    root # crm status full
过程 22.3︰ 创建共享 VG 和 LV
  1. root 用户身份启动外壳并登录。

  2. 假设您已有两个共享磁盘,并使用它们创建共享 VG:

    root # vgcreate --shared vg1 /dev/sda /dev/sdb
  3. 创建 LV,但一开始不激活它:

    root # lvcreate -an -L10G -n lv1 vg1
过程 22.4︰ 创建 LVM-activate 资源
  1. root 用户身份启动外壳并登录。

  2. 运行以下命令以查看此资源的使用情况:

    root # crm configure ra info LVM-activate

    此资源负责管理 VG 的激活。在共享 VG 中,有两种不同的 LV 激活模式:排它模式和共享模式。排它模式是默认模式,通常应在 ext4 等本地文件系统使用 LV 时使用。共享模式仅应用于 OCFS2 等群集文件系统。

  3. 配置资源以管理 VG 的激活。根据您的方案,选择下列其中一个选项:

    • 对于本地文件系统使用,请使用排它激活模式:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
    • 对于 OCFS2,请使用共享激活模式,并将其添加到克隆的 g-storage 组:

      root # crm configure primitive vg1 ocf:heartbeat:LVM-activate \
        params vgname=vg1 vg_access_mode=lvmlockd activation_mode=shared \
        op start timeout=90s interval=0 \
        op stop timeout=90s interval=0 \
        op monitor interval=30s timeout=90s
      root # crm configure modgroup g-storage add vg1
  4. 检查资源是否运行正常:

    root # crm status full

22.2.2 方案:在 SAN 上将群集 LVM 与 iSCSI 搭配使用

以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 22.1 “使用群集 LVM 的共享磁盘设置”所示。

使用群集 LVM 的共享磁盘设置
图 22.1︰ 使用群集 LVM 的共享磁盘设置
警告
警告:数据丢失

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

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

过程 22.5︰ 配置 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 发起端:

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

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

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

  4. 添加 iSCSI 目标的 IP 地址和端口(请参见过程 22.5 “配置 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

过程 22.7︰ 创建共享卷组
  1. 打开已按过程 22.6 “配置 iSCSI 发起端”运行 iSCSI 发起端的一个节点上的 root 外壳。

  2. 在磁盘 /dev/sdd/dev/sde 上创建共享卷组:

    root # vgcreate --shared testvg /dev/sdd /dev/sde
  3. 根据需要创建逻辑卷:

    root # lvcreate --name lv1 --size 500M testvg
  4. 使用 vgdisplay 检查卷组:

      --- Volume group ---
          VG Name               testvg
          System ID
          Format                lvm2
          Metadata Areas        2
          Metadata Sequence No  1
          VG Access             read/write
          VG Status             resizable
          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
  5. 使用 vgs 命令检查卷组的共享状态:

    root # vgs
      VG       #PV #LV #SN Attr   VSize     VFree  
      vgshared   1   1   0 wz--ns 1016.00m  1016.00m

    属性列会显示卷属性:在此示例中,卷组可写入 (w)、可调整大小 (z),分配策略为普通 (n),并且其为共享资源 (s)。有关细节,请参见 vgs 的手册页。

创建卷并启动资源后,/dev/testvg 下会显示新的设备名称,例如 /dev/testvg/lv1。这表示 LV 已激活,可以使用。

22.2.3 方案:将群集 LVM 与 DRBD 搭配使用

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

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

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

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

    root # pvcreate /dev/drbd_r0
  4. 创建共享卷组:

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

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

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

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

22.4 从镜像 LV 联机迁移到群集 MD

SUSE Linux Enterprise High Availability Extension 15 开始,群集 LVM 中的 cmirrord 已遭弃用。我们强烈建议将群集中的镜像逻辑卷迁移到群集 MD。群集 MD 表示“群集多设备”,是适用于群集的基于软件的 RAID 储存解决方案。

22.4.1 迁移之前的示例设置

假设您采用以下示例设置:

  • 您有一个双节点群集,它由节点 alicebob 组成。

  • 名为 test-lv 的镜像逻辑卷是基于名为 cluster-vg2 的卷组创建的。

  • 卷组 cluster-vg2 由磁盘 /dev/vdb/dev/vdc 组成。

root # lsblk
NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda                                   253:0    0   40G  0 disk
├─vda1                                253:1    0    4G  0 part [SWAP]
└─vda2                                253:2    0   36G  0 part /
vdb                                   253:16   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_0 254:0    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_0      254:3    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
vdc                                   253:32   0   20G  0 disk
├─cluster--vg2-test--lv_mlog_mimage_1 254:1    0    4M  0 lvm
│ └─cluster--vg2-test--lv_mlog        254:2    0    4M  0 lvm
│   └─cluster--vg2-test--lv           254:5    0   12G  0 lvm
└─cluster--vg2-test--lv_mimage_1      254:4    0   12G  0 lvm
  └─cluster--vg2-test--lv             254:5    0   12G  0 lvm
重要
重要:避免迁移失败

在启动迁移过程之前,请检查逻辑卷和物理卷的容量与利用率。如果逻辑卷使用了 100% 的物理卷容量,则迁移可能会失败,并在目标卷上显示可用空间不足错误。如何防止这种迁移失败取决于镜像日志所用的选项:

  • 镜像日志本身是否已镜像(mirrored 选项),并且已在镜像根所在的同一个设备上进行分配?: (例如,如果您根据 这些版本的《管理指南》 中所述,为 SUSE Linux Enterprise High Availability Extension 11 或 12 上的 cmirrord 设置创建了逻辑卷,则可能符合这种情况)。

    默认情况下,mdadm 会在设备开头与数组数据开头之间保留一定的空间量。在迁移期间,您可以检查未使用的填充空间,并使用 data-offset 选项减小此空间,如步骤 1.d 和下文所述。

    data-offset 必须在设备上保留足够的空间,使群集 MD 能够将其元数据写入设备。另一方面,偏移量必须足够小,使设备的剩余容量可以容纳所迁移卷的所有物理卷区域。由于卷可能已跨越整个设备但不包括镜像日志,因此,偏移量必须小于镜像日志的大小。

    我们建议将 data-offset 设置为 128 KB。如果未指定偏移量的值,其默认值为 1 KB(1024 字节)。

  • 镜像日志是已写入不同的设备(disk 选项)还是保留在内存中(core 选项)?: 在开始迁移之前,请增大物理卷的大小,或减小逻辑卷的大小(以便为物理卷释放更多的空间)。

22.4.2 将镜像 LV 迁移到群集 MD

以下过程基于第 22.4.1 节 “迁移之前的示例设置”。请根据设置调整指令,并相应地替换 LV、VG、磁盘和群集 MD 设备的名称。

迁移过程完全不会造成停机。在迁移过程中仍可挂载文件系统。

  1. 在节点 alice 上执行以下步骤:

    1. 将镜像逻辑卷 test-lv 转换为线性逻辑卷:

      root # lvconvert -m0 cluster-vg2/test-lv /dev/vdc
    2. 从卷组 cluster-vg2 中去除物理卷 /dev/vdc

      root # vgreduce cluster-vg2 /dev/vdc
    3. 从 LVM 中去除以下物理卷:

      root # pvremove /dev/vdc

      如果现在就运行 lsblk,您将会看到:

      NAME                                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
      vda                     253:0    0   40G  0 disk
      ├─vda1                  253:1    0    4G  0 part [SWAP]
      └─vda2                  253:2    0   36G  0 part /
      vdb                     253:16   0   20G  0 disk
      └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
      vdc                     253:32   0   20G  0 disk
    4. 使用磁盘 /dev/vdc 创建群集 MD 设备 /dev/md0

      root # mdadm --create /dev/md0 --bitmap=clustered \
      --metadata=1.2 --raid-devices=1 --force --level=mirror \
      /dev/vdc --data-offset=128

      有关为何要使用 data-offset 选项的细节,请参见重要:避免迁移失败

  2. 在节点 bob 上组装以下 MD 设备:

    root # mdadm --assemble md0 /dev/vdc

    如果您的群集由两个以上的节点组成,请在该群集中的所有剩余节点上执行此步骤。

  3. 返回到节点 alice

    1. 将 MD 设备 /dev/md0 初始化为与 LVM 搭配使用的物理卷:

      root # pvcreate /dev/md0
    2. 将 MD 设备 /dev/md0 添加到卷组 cluster-vg2

      root # vgextend cluster-vg2 /dev/md0
    3. 将磁盘 /dev/vdb 中的数据移到 /dev/md0 设备:

      root # pvmove /dev/vdb /dev/md0
    4. 从卷组 cluster-vg2 中去除物理卷 /dev/vdb

      root # vgreduce cluster-vg2 /dev/vdb
    5. 从设备中去除标签,使 LVM 不再将该设备识别为物理卷:

      root # pvremove /dev/vdb
    6. /dev/vdb 添加到 MD 设备 /dev/md0

      root # mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb

22.4.3 迁移之后的示例设置

如果现在就运行 lsblk,您将会看到:

NAME                      MAJ:MIN RM  SIZE RO TYPE  MOUNTPOINT
vda                       253:0    0   40G  0 disk
├─vda1                    253:1    0    4G  0 part  [SWAP]
└─vda2                    253:2    0   36G  0 part  /
vdb                       253:16   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm
vdc                       253:32   0   20G  0 disk
└─md0                       9:0    0   20G  0 raid1
  └─cluster--vg2-test--lv 254:5    0   12G  0 lvm

22.5 更多信息

有关 lvmlockd 的详细信息,请参见 lvmlockd 命令 的手册页(man 8 lvmlockd)。

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