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* 提供。
确保已安装以下软件包:
lvm2
和lvm2-lockd
。自 SUSE Linux Enterprise 15 起,我们使用 lvmlockd 作为 LVM2 群集扩展,而不再使用 clvmd。确保 clvmd 守护程序未运行,否则 lvmlockd 将无法启动。
22.2.1 创建群集资源 #
在一个节点上执行以下基本步骤,以在群集中配置共享 VG:
以
root
用户身份启动外壳并登录。检查群集资源的当前配置:
root #
crm configure show如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 22.2 “创建 lvmlockd 资源”。
否则,如过程 18.1 “配置 DLM 的基础组”中所述配置 DLM 资源和相应的基本组和基本克隆。
以
root
用户身份启动外壳并登录。运行以下命令以查看此资源的使用情况:
root #
crm configure ra info lvmlockd按如下所示配置
lvmlockd
资源:root #
crm configure primitive lvmlockd lvmlockd \ op start timeout="90" \ op stop timeout="100" \ op monitor interval="30" timeout="90"为了确保在每个节点上启动
lvmlockd
资源,请将原始资源添加到您在过程 22.1 “创建 DLM 资源”中为储存创建的基本组:root #
crm configure modgroup g-storage add lvmlockd查看所做的更改:
root #
crm configure show检查资源是否运行正常:
root #
crm status full
以
root
用户身份启动外壳并登录。假设您已有两个共享磁盘,并使用它们创建共享 VG:
root #
vgcreate --shared vg1 /dev/sda /dev/sdb创建 LV,但一开始不激活它:
root #
lvcreate -an -L10G -n lv1 vg1
以
root
用户身份启动外壳并登录。运行以下命令以查看此资源的使用情况:
root #
crm configure ra info LVM-activate此资源负责管理 VG 的激活。在共享 VG 中,有两种不同的 LV 激活模式:排它模式和共享模式。排它模式是默认模式,通常应在
ext4
等本地文件系统使用 LV 时使用。共享模式仅应用于 OCFS2 等群集文件系统。配置资源以管理 VG 的激活。根据您的方案,选择下列其中一个选项:
对于本地文件系统使用,请使用排它激活模式:
root #
crm configure primitive vg1 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 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
检查资源是否运行正常:
root #
crm status full
22.2.2 方案:在 SAN 上将群集 LVM 与 iSCSI 搭配使用 #
以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 22.1 “使用群集 LVM 的共享磁盘设置”所示。
以下过程将损坏磁盘上的所有数据!
首先只配置一个 SAN 盒。每个 SAN Box 都需要导出自己的 iSCSI 目标。按如下所示继续:
运行 YaST,然后单击
› 启动 iSCSI 服务器模块。如果要在计算机引导时启动 iSCSI 目标,请选择
,否则请选择 。如果正在运行防火墙,请启用
。切换到
选项卡。如果需要身份验证,请启用传入及/或传出身份验证。在本例中,我们选择 。添加新的 iSCSI 目标:
切换到
选项卡。单击
。输入目标名称。名称需要采用如下所示的格式:
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。
如果需要描述性更强的名称,可以进行更改,但要确保不同目标之间的标识符是唯一的。
单击
。在
中输入设备名,并使用 。单击
两次。
出现警告框时单击
进行确认。打开配置文件
/etc/iscsi/iscsid.conf
,将参数node.startup
更改为automatic
。
现在按如下方式设置 iSCSI 发起端:
运行 YaST,然后单击
› 。如果要在计算机引导时启动 iSCSI 发起端,请选择
,否则请将其设置为 。切换到
选项卡并单击 按钮。添加 iSCSI 目标的 IP 地址和端口(请参见过程 22.5 “配置 iSCSI 目标 (SAN)”)。通常,可以保留端口并使用其默认值。
如果使用身份验证,请插入进来的和出去的用户名和口令,否则请激活
。选择
。找到的连接随即显示在列表中。单击
继续。打开外壳,并以
root
用户身份登录。测试 iSCSI 发起端是否已成功启动:
root #
iscsiadm
-m discovery -t st -p 192.168.3.100 192.168.3.100:3260,1 iqn.2010-03.de.jupiter:san1建立会话:
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.6 “配置 iSCSI 发起端”运行 iSCSI 发起端的一个节点上的
root
外壳。在磁盘
/dev/sdd
和/dev/sde
上创建共享卷组:root #
vgcreate --shared testvg /dev/sdd /dev/sde根据需要创建逻辑卷:
root #
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 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
使用
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 搭配使用 #
如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。
创建主/主 DRBD 资源:
首先,按过程 21.1 “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为
up-to-date
。使用drbdadm status
确认是否如此。将以下选项添加到配置文件(通常类似
/etc/drbd.d/r0.res
):resource r0 { net { allow-two-primaries; } ... }
将更改的配置文件复制到另一个节点,例如:
root #
scp
/etc/drbd.d/r0.res venus:/etc/drbd.d/在两个节点上运行以下命令:
root #
drbdadm
disconnect r0root #
drbdadm
connect r0root #
drbdadm
primary r0检查节点的状态:
root #
drbdadm
status r0
将 lvmlockd 资源作为克隆包含在 Pacemaker 配置中,并使它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 22.1 “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用
crm status
或 Web 界面检查正在运行的服务。使用命令
pvcreate
准备 LVM 的物理卷。例如,在设备/dev/drbd_r0
上,命令应类似于:root #
pvcreate
/dev/drbd_r0创建共享卷组:
root #
vgcreate
--shared testvg /dev/drbd_r0根据需要创建逻辑卷。您有时可能想要更改逻辑卷的大小。例如,使用以下命令创建 4 GB 的逻辑卷:
root #
lvcreate
--name lv1 -L 4G testvg现在 VG 内的逻辑卷可作为文件系统挂载或原始用法提供。确保使用逻辑卷的服务具备适当的依赖项,以便在激活 VG 后对它们进行共置和排序。
完成这些配置步骤后,即可像在任何独立工作站中一样进行 LVM2 配置。
22.3 显式配置合格的 LVM2 设备 #
如果看似有若干设备共享同一个物理卷签名(多路径设备或 DRBD 就有可能发生这种情况),建议显式配置 LVM2 扫描 PV 的设备。
例如,如果命令 vgcreate
使用物理设备而非镜像块设备,DRBD 会产生混乱。进而导致 DRBD 出现节点分裂情况。
要停用 LVM2 的单个设备,请执行以下操作:
编辑文件
/etc/lvm/lvm.conf
并搜索以filter
开头的行。其中的模式作为正则表达式来处理。前面的“a”表示接受扫描的设备模式,前面的“r”表示拒绝遵守该设备模式的设备。
要删除名为
/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/.*/" ]
编写配置文件并将它复制到所有群集节点。
22.4 从镜像 LV 联机迁移到群集 MD #
从 SUSE Linux Enterprise High Availability Extension 15 开始,群集 LVM 中的 cmirrord
已遭弃用。我们强烈建议将群集中的镜像逻辑卷迁移到群集 MD。群集 MD 表示“群集多设备”,是适用于群集的基于软件的 RAID 储存解决方案。
22.4.1 迁移之前的示例设置 #
假设您采用以下示例设置:
您有一个双节点群集,它由节点
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
在启动迁移过程之前,请检查逻辑卷和物理卷的容量与利用率。如果逻辑卷使用了 100% 的物理卷容量,则迁移可能会失败,并在目标卷上显示可用空间不足
错误。如何防止这种迁移失败取决于镜像日志所用的选项:
镜像日志本身是否已镜像(
mirrored
选项),并且已在镜像根所在的同一个设备上进行分配?: (例如,如果您根据cmirrord
这些版本的 《管理指南》 中所述,为 SUSE Linux Enterprise High Availability Extension 11 或 12 上的 设置创建了逻辑卷,则可能符合这种情况)。默认情况下,
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 设备的名称。
迁移过程完全不会造成停机。在迁移过程中仍可挂载文件系统。
在节点
alice
上执行以下步骤:将镜像逻辑卷
test-lv
转换为线性逻辑卷:root #
lvconvert -m0 cluster-vg2/test-lv /dev/vdc从卷组
cluster-vg2
中去除物理卷/dev/vdc
:root #
vgreduce cluster-vg2 /dev/vdc从 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
使用磁盘
/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
选项的细节,请参见重要:避免迁移失败。
在节点
bob
上组装以下 MD 设备:root #
mdadm --assemble md0 /dev/vdc如果您的群集由两个以上的节点组成,请在该群集中的所有剩余节点上执行此步骤。
返回到节点
alice
:将 MD 设备
/dev/md0
初始化为与 LVM 搭配使用的物理卷:root #
pvcreate /dev/md0将 MD 设备
/dev/md0
添加到卷组cluster-vg2
:root #
vgextend cluster-vg2 /dev/md0将磁盘
/dev/vdb
中的数据移到/dev/md0
设备:root #
pvmove /dev/vdb /dev/md0从卷组
cluster-vg2
中去除物理卷/dev/vdb
:root #
vgreduce cluster-vg2 /dev/vdb从设备中去除标签,使 LVM 不再将该设备识别为物理卷:
root #
pvremove /dev/vdb将
/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 邮件列表中获取完整信息。