摘要 #
当管理群集上的共享储存区时,所有节点必须收到有关对储存子系统所做更改的通知。Logical Volume Manager 2 (LVM2) 广泛用于管理本地储存,已扩展为支持对整个群集中的卷组进行透明管理。在多个主机之间共享的卷组可使用与本地储存相同的命令进行管理。
21.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 由共享储存组成,可被多个主机同时使用。
21.2 群集式 LVM 的配置 #
确保满足以下要求:
-
有共享储存设备可用,例如,该共享储存设备可通过光纤通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供。
-
确保已安装以下包:
lvm2
和lvm2-lockd
。 -
自 SUSE Linux Enterprise 15 起,我们使用 lvmlockd 作为 LVM2 群集扩展,而不再使用 clvmd。确保 clvmd 守护程序未运行,否则 lvmlockd 将无法启动。
21.2.1 创建群集资源 #
在一个节点上执行以下基本步骤,以在群集中配置共享 VG:
过程 21.1︰ 创建 DLM 资源 #
-
以
root
用户身份启动外壳并登录。 -
检查群集资源的当前配置:
COPYroot #
crm configure show -
如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 21.2 “创建 lvmlockd 资源”。
否则,如过程 17.1 “配置 DLM 的基础组”中所述配置 DLM 资源和相应的基本组和基本克隆。
过程 21.2︰ 创建 LVMLOCKD 资源 #
-
以
root
用户身份启动外壳并登录。 -
运行以下命令以查看此资源的使用情况:
COPYroot #
crm configure ra info lvmlockd -
按如下所示配置
lvmlockd
资源:
COPYroot #
crm configure primitive lvmlockd ocf:heartbeat:lvmlockd \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="30" timeout="90" -
为了确保在每个节点上启动
lvmlockd
资源,请将原始资源添加到您在过程 21.1 “创建 DLM 资源”中为储存创建的基本组:
COPYroot #
crm configure modgroup g-storage add lvmlockd -
查看所做的更改:
COPYroot #
crm configure show -
检查资源是否运行正常:
COPYroot #
crm status full
过程 21.3︰ 创建共享 VG 和 LV #
-
以
root
用户身份启动外壳并登录。 -
假设您已有两个共享磁盘,并使用它们创建共享 VG:
COPYroot #
vgcreate --shared vg1 /dev/sda /dev/sdb -
创建 LV,但一开始不激活它:
COPYroot #
lvcreate -an -L10G -n lv1 vg1
过程 21.4︰ 创建 LVM 激活资源 REPORT DOCUMENTATION BUG#
-
以
root
用户身份启动外壳并登录。 -
运行以下命令以查看此资源的使用情况:
COPYroot #
crm configure ra info LVM-activate此资源负责管理 VG 的激活。在共享 VG 中,有两种不同的 LV 激活模式:排它模式和共享模式。排它模式是默认模式,通常应在
ext4
等本地文件系统使用 LV 时使用。共享模式仅应用于 OCFS2 等群集文件系统。 -
配置资源以管理 VG 的激活。根据您的方案,选择下列其中一个选项:
-
对于本地文件系统使用,请使用排它激活模式:
COPYroot #
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
组:
COPYroot #
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=90sroot #
crm configure modgroup g-storage add vg1
-
-
检查资源是否运行正常:
COPYroot #
crm status full
21.2.2 方案:在 SAN 上将群集 LVM 与 iSCSI 搭配使用 REPORT DOCUMENTATION BUG#
以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 21.1 “使用群集 LVM 设置共享磁盘”所示。
图 21.1︰ 使用群集 LVM 设置共享磁盘 REPORT DOCUMENTATION BUG#
警告:数据丢失
以下过程将损坏磁盘上的所有数据!
首先只配置一个 SAN 盒。每个 SAN Box 都需要导出自己的 iSCSI 目标。按如下所示继续:
过程 21.5︰ 配置 ISCSI 目标 (SAN) REPORT DOCUMENTATION BUG#
-
运行 YaST,然后单击 网络服务 › iSCSI LIO 目标 启动 iSCSI 服务器模块。
-
如果要在计算机引导时启动 iSCSI 目标,请选择引导时,否则请选择手动。
-
如果正在运行防火墙,请启用打开防火墙中的端口。
-
切换到全局选项卡。如果需要身份验证,请启用传入及/或传出身份验证。在本例中,我们选择无身份验证。
-
添加新的 iSCSI 目标:
-
切换到目标选项卡。
-
单击添加。
-
输入目标名称。名称需要采用如下所示的格式:
iqn.DATE.DOMAIN
COPY有关格式的更多信息,请参见 3.2.6.3.1. Type "iqn." (iSCSI Qualified Name)(3.2.6.3.1.“iqn.”(iSCSI 限定名称)类型)一节,网址:http://www.ietf.org/rfc/rfc3720.txt。
-
如果需要描述性更强的名称,可以进行更改,但要确保不同目标之间的标识符是唯一的。
-
单击添加。
-
在路径中输入设备名,并使用 Scsiid。
-
单击下一步两次。
-
-
出现警告框时单击是进行确认。
-
打开配置文件
/etc/iscsi/iscsid.conf
,将参数node.startup
更改为automatic
。
现在按如下方式设置 iSCSI 发起程序:
过程 21.6︰ 配置 ISCSI 发起程序 REPORT DOCUMENTATION BUG#
-
运行 YaST,然后单击 网络服务 › iSCSI 发起程序 。
-
如果要在计算机引导时启动 iSCSI 发起程序,请选择引导时,否则请将其设置为手动。
-
切换到发现选项卡并单击发现按钮。
-
添加 iSCSI 目标的 IP 地址和端口(请参见过程 21.5 “配置 iSCSI 目标 (SAN)”)。通常,可以保留端口并使用其默认值。
-
如果使用身份验证,请插入进来的和出去的用户名和口令,否则请激活无身份验证。
-
选择下一步。找到的连接随即显示在列表中。
-
按完成继续。
-
打开外壳,并以
root
用户身份登录。 -
测试 iSCSI 发起程序是否已成功启动:
COPYroot #
iscsiadm
-m discovery -t st -p 192.168.3.100 192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1 -
建立会话:
COPYroot #
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
COPY查找第三列中有
IET
的项。在本例中,设备为/dev/sdd
和/dev/sde
。
过程 21.7︰ 创建共享卷组 REPORT DOCUMENTATION BUG#
-
打开已按过程 21.6 “配置 iSCSI 发起程序”运行 iSCSI 发起程序的一个节点上的
root
外壳。 -
在磁盘
/dev/sdd
和/dev/sde
上创建共享卷组:
COPYroot #
vgcreate --shared testvg /dev/sdd /dev/sde -
根据需要创建逻辑卷:
COPYroot #
lvcreate
--name lv1 --size 500M testvg -
使用
vgdisplay
检查卷组:--- Volume group --- VG Name testvg 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
COPY
创建卷并启动资源后,/dev/testvg
下会显示新的设备名称,例如 /dev/testvg/lv1
。这表示 LV 已激活,可以使用。
21.2.3 方案:将群集 LVM 与 DRBD 搭配使用 REPORT DOCUMENTATION BUG#
如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。
过程 21.8︰ 创建使用 DRBD 的群集感知卷组 REPORT DOCUMENTATION BUG#
-
创建主/主 DRBD 资源:
-
首先,按过程 20.1 “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为
up-to-date
。使用drbdadm status
确认是否如此。 -
将以下选项添加到配置文件(通常类似
/etc/drbd.d/r0.res
):resource r0 { net { allow-two-primaries; } ... }
COPY -
将更改的配置文件复制到另一个节点,例如:
COPYroot #
scp
/etc/drbd.d/r0.res venus:/etc/drbd.d/ -
在两个节点上运行以下命令:
COPYroot #
drbdadm
disconnect r0root #
drbdadm
connect r0root #
drbdadm
primary r0 -
检查节点的状态:
COPYroot #
drbdadm
status r0
-
-
将 lvmlockd 资源作为克隆包含在 Pacemaker 配置中,并使它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 21.1 “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用
crm status
或 Web 界面检查正在运行的服务。 -
使用命令
pvcreate
准备 LVM 的物理卷。例如,在设备/dev/drbd_r0
上,命令应类似于:
COPYroot #
pvcreate
/dev/drbd_r0 -
创建共享卷组:
COPYroot #
vgcreate
--shared testvg /dev/drbd_r0 -
根据需要创建逻辑卷。您有时可能想要更改逻辑卷的大小。例如,使用以下命令创建 4 GB 的逻辑卷:
COPYroot #
lvcreate
--name lv1 -L 4G testvg -
现在 VG 内的逻辑卷可作为文件系统装入或原始用法提供。确保使用逻辑卷的服务具备适当的依赖项,以便在激活 VG 后对它们进行共置和排序。
完成这些配置步骤后,即可像在任何独立工作站中一样进行 LVM2 配置。
21.3 显式配置合格的 LVM2 设备 REPORT DOCUMENTATION BUG#
如果看似有若干设备共享同一个物理卷签名(多路径设备或 DRBD 就有可能发生这种情况),建议显式配置 LVM2 扫描 PV 的设备。
例如,如果命令 vgcreate
使用物理设备而非镜像块设备,DRBD 会产生混乱。进而导致 DRBD 出现节点分裂情况。
要停用 LVM2 的单个设备,请执行以下操作:
-
编辑文件
/etc/lvm/lvm.conf
并搜索以filter
开头的行。 -
其中的模式作为正则表达式来处理。前面的“a”表示接受扫描的设备模式,前面的“r”表示拒绝遵守该设备模式的设备。
-
要删除名为
/dev/sdb1
的设备,请向过滤规则添加以下表达式:"r|^/dev/sdb1$|"
COPY完整的过滤行将显示如下:
filter = [ "r|^/dev/sdb1$|", "r|/dev/.*/by-path/.*|", "r|/dev/.*/by-id/.*|", "a/.*/" ]
COPY接受 DRBD 和 MPIO 设备但拒绝其他所有设备的过滤行如下所示:
filter = [ "a|/dev/drbd.*|", "a|/dev/.*/by-id/dm-uuid-mpath-.*|", "r/.*/" ]
COPY -
编写配置文件并将它复制到所有群集节点。
21.4 从镜像 LV 联机迁移到群集 MD REPORT DOCUMENTATION BUG#
随着 SUSE Linux Enterprise High Availability Extension 15 的推出,群集 LVM 中的 cmirrord 已弃用。我们强烈建议将群集中的镜像逻辑卷迁移到群集 MD。群集 MD 表示“群集多设备”,是适用于群集的基于软件的 RAID 储存解决方案。
21.4.1 迁移之前的示例设置 REPORT DOCUMENTATION BUG#
假设您采用以下示例设置:
-
您有一个双节点群集,它由节点
alice
和bob
组成。 -
名为
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
COPY
重要:避免迁移失败
在启动迁移过程之前,请检查逻辑卷和物理卷的容量与利用率。如果逻辑卷使用了 100% 的物理卷容量,则迁移可能会失败,并在目标卷上显示可用空间不足
错误。如何防止这种迁移失败取决于镜像日志所用的选项:
-
镜像日志本身是否已镜像(
mirrored
选项),并且已在镜像根所在的同一个设备上进行分配?: (例如,如果您根据 SUSE Documentation 中所述,为 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
选项)?: 在开始迁移之前,请增大物理卷的大小,或减小逻辑卷的大小(以便为物理卷释放更多的空间)。
21.4.2 将镜像 LV 迁移到群集 MD REPORT DOCUMENTATION BUG#
以下过程基于第 21.4.1 节 “迁移之前的示例设置”。请根据设置调整指令,并相应地替换 LV、VG、磁盘和群集 MD 设备的名称。
迁移过程完全不会造成停机。在迁移过程中仍可装入文件系统。
-
在节点
alice
上执行以下步骤:-
将镜像逻辑卷
test-lv
转换为线性逻辑卷:
COPYroot #
lvconvert -m0 cluster-vg2/test-lv /dev/vdc -
从卷组
cluster-vg2
中去除物理卷/dev/vdc
:
COPYroot #
vgreduce cluster-vg2 /dev/vdc -
从 LVM 中去除以下物理卷:
COPYroot #
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
COPY -
使用磁盘
/dev/vdc
创建群集 MD 设备/dev/md0
:
COPYroot #
mdadm --create /dev/md0 --bitmap=clustered \ --metadata=1.2 --raid-devices=1 --force --level=mirror \ /dev/vdc --data-offset=128有关为何要使用
data-offset
选项的细节,请参见重要:避免迁移失败。
-
-
在节点
bob
上组装以下 MD 设备:
COPYroot #
mdadm --assemble md0 /dev/vdc如果您的群集由两个以上的节点组成,请在该群集中的所有剩余节点上执行此步骤。
-
返回到节点
alice
:-
将 MD 设备
/dev/md0
初始化为与 LVM 搭配使用的物理卷:
COPYroot #
pvcreate /dev/md0 -
将 MD 设备
/dev/md0
添加到卷组cluster-vg2
:
COPYroot #
vgextend cluster-vg2 /dev/md0 -
将磁盘
/dev/vdb
中的数据移到/dev/md0
设备:
COPYroot #
pvmove /dev/vdb /dev/md0 -
从卷组
cluster-vg2
中去除物理卷/dev/vdb
:
COPYroot #
vgreduce cluster-vg2 /dev/vdb -
从设备中去除标签,使 LVM 不再将该设备识别为物理卷:
COPYroot #
pvremove /dev/vdb -
将
/dev/vdb
添加到 MD 设备/dev/md0
:
COPYroot #
mdadm --grow /dev/md0 --raid-devices=2 --add /dev/vdb
-
21.4.3 迁移之后的示例设置 REPORT DOCUMENTATION BUG#
如果现在就运行 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
COPY
21.5 更多信息 REPORT DOCUMENTATION BUG#
有关 lvmlockd 的详细信息,请参见 lvmlockd
命令 的手册页(man 8 lvmlockd
)。
可从 Support - ClusterLabs 处的 pacemaker 邮件列表中获取完整信息。