恢复 LVM 更改

有时,管理员可能会对卷组执行错误的更改,例如,在缩小逻辑卷上的文件系统之前缩小逻辑卷。
在此示例中,可能会尝试将逻辑卷扩展到以前的大小,但不能保证磁盘上的相同块会像以前一样使用,因此文件系统可能会损坏。

为了在这种情况下提供恢复选项,LVM 可以配置为保留卷组元数据的存档副本。
如果 /etc/lvm/lvm.conf 中的存档选项设置为 1,LVM 工具将在对磁盘进行任何更改之前创建当前卷组元数据的存档副本。
在默认配置中,这些档案可以在 /etc/lvm/archive 中找到。
要查看卷组的所有归档元数据列表,请检查 /etc/lvm/archive 中的文件,特别注意描述行。
或者,可以使用 vgcfgrestore -list [vgname] 命令。

# vgcfgrestore --list vg_example
File:         /etc/lvm/archive/vg_example_00000-943759797.vg 
VG name:      vg_example 
Description:  Created *before* executing 'vgcreate vg_example /dev/sda5' 
Backup Time:  Mon Mar 19 07:01:47 2012 
File:         /etc/lvm/archive/vg_example_00001-1528176681.vg 
VG name:      vg_example 
Description:  Created *before* executing 'lvcreate -L 1G -n lv_example vg_example' 
Backup Time:  Mon Mar 19 07:02:00 2012 
File :        /etc/lvm/archive/vg_example_00002-14846.95080.vg 
VG name:      vg_example 
Description:  created *before* executing 'lvresize -L -256M /dev/vg_example/lv_example' 
Backup Time:  Mon Mar 19 07:02:34 2012 
File:         /etc/lvm/backup/vg_example 
VG name:      vg_example 
Description:  Created *after* executing 'lvresize -L -256M /dev/vg_example/lv_example' 
Backup Time:  Mon Mar 19 07:02:34 2012

前面的例子是创建了卷组 vg_example,然后在卷组中创建了一个逻辑卷 lv_example,最后将逻辑卷缩小了 256 MiB。
值得注意的是,最后一个输出块显示了 /etc/lvm/backup 中当前卷组元数据的备份,这是在逻辑卷收缩后创建的。

要撤消更改,请确保当前未使用逻辑卷(卸载可能已在逻辑卷上创建的任何文件系统),然后再次使用 vgcfgrestore 命令,但这次使用 -f [archive_file]选项。

# vgcfgrestore -f /etc/lvm/archive/vg_example_88881-1528176681.vg
  vg_example 
Restored volume group vg_example

在某些情况下,可能需要停用,然后重新激活逻辑卷,以确保所有更改也在内存中提交。

# lvchange -an /dev/vg_example/lv_example
# lvchange -ay /dev/vg_example/lv_example

配置 HA-LVM

有两种配置 HA-LVM 的方法。
一种方法使用 LVM tags ,另一种较新的方法使用集群 LVM 守护进程 clvmd 。

主动/被动 LVM 配置不支持将 clvmd 与 Pacemaker 使用的 LVM 资源代理结合使用。
因此,在使用 Pacemaker 管理的集群中,HA-LVM 必须使用标记方法。
由于本类使用 Pacemaker 集群,因此将在其示例和 HA-LVM 配置练习中使用标记方法。

LVM 执行文件锁定以防止冲突的 LVM 命令在单个机器上或者跨集群同时运行。
要实现 HA-LVM,需要确保 LVM 配置为使用 1.ocal 基于文件的锁定。
这是 LVM 的默认锁定类型,通过在 /etc/lvm/lvm.conf 中将锁定类型参数设置为 1 来指定。

# vi /etc/lvm/lvm.conf
locking_type = 1

为了确保 HA-LVM 卷组在任何给定时间仅在集群中的单个节点上激活,卷组激活必须完全在集群的控制之下。
在集群控制之外执行的 HA-LVM 卷组激活可能会导致卷组元数据损坏。

为防止出现这种情况,必须在每个集群节点上明确定义不属于集群 HA-LVM 配置的卷组列表。
将此列表填充到集群中每个节点上 /etc/lvm/lvm.conf 文件中的 /strong> 参数中。

volume_list = [ "vg_root", "vg_home" ]

即使没有不受集群控制的卷组,仍必须定义 volume_list 参数。
在这种情况下,请按照以下示例使用空列表定义参数。

volume_list = []

LVM 只会激活在 volume_list 参数中定义的卷组。
通过从该列表中排除集群 HA-LVM 卷组,它们的激活有效地置于集群的唯一控制中。

为确保集群控制的卷组不会被 initramfs 引导镜像无意中激活,还需要在每个集群节点上重建镜像。
一旦在其上执行的镜像重建完成,应重新启动每个节点。

# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r); reboot

重新启动所有集群节点后,验证是否在每个集群上成功启动了集群服务。
激活对 LVM 配置的更改后,HA-LVM 卷组将受集群控制。
HA-LVM 卷组及其逻辑卷将对所有集群节点可见,但逻辑卷将处于非活动状态。

# lvs
LV        VG          Attr         LSize  Pool  Oroirn  Data%  Meta%  Move  Log  Cpy%Sync 
Convert
  shared_vg ha_lv    -wi-------   1.009

当集群在单个活动节点上激活卷组时,卷组的逻辑卷将在该节点上设置为活动,但在集群中的其余节点上将保持非活动状态。
下面的示例演示了这一点,其中 nodea 是集群中的活动

# for x in {a .. c}; do echo "===== node${x} ====="; ssh root@node${x} 'lvs'; echo; done 
===== nodea =====
LV            VG          Attr           LSize  Pool  oroirn  Data%  Meta%  Move  Log  Cpy%Sync 
Convert 
  clusterlv   clustervg   -wi- a- ----   1.00g 
===== nodeb =====
LV            VG          Attr           LSize  Pool  oroirn  Data%  Meta%  Move  Log  Cpy%Sync 
Convert 
  clusterlv   clustervg   -wi- a- ----   1.00g 
===== nodeb =====
LV            VG          Attr           LSize  Pool  oroirn  Data%  Meta%  Move  Log  Cpy%Sync 
Convert 
  clusterlv   clustervg   -wi- a- ----   1.00g
on  it road.com

管理高可用性逻辑卷 (HA-LVM)

有两种在集群中的共享存储上使用 LVM 的方法,集群 LVM(在下一节中描述)和 HA-LVM。
使用集群 LVM,共享存储上的所有卷组和逻辑卷始终可供所有集群节点使用。
使用 HA-LVM,一个卷组及其逻辑卷一次只能被一个节点访问。

使用共享文件系统(如 GFS2)时,集群 LVM 是一个不错的选择。
另一方面,在使用更传统的文件系统(如 ext4 或者 XFS)时,HA-LVM 是一个不错的选择,并且需要一次限制访问一个节点以防止文件系统和/或者数据损坏。

LVM

逻辑卷管理 (LVM) 为管理员提供了强大的存储虚拟化框架。
一个或者多个数据承载(物理卷)被聚合到一个存储池(卷组)中,从中可以将卷划分为块设备(逻辑卷)。
LVM 还允许在物理卷之间对数据进行条带化和/或者镜像。
下图显示了创建卷组和逻辑卷的基本步骤。

就像 dm-multipath 一样,LVM 使用内核设备映射器子系统来创建它的设备。
逻辑卷在 /dev/ 中创建为 dm-* 设备节点,但在 /dev/mapper 和 /dev[vgname]/ 中都使用符号链接,使用对管理员更友好(和持久)的名称。

将 HA-LVM 资源添加到集群

一旦配置了 HA-LVM 卷组,它就可以作为 LVM 资源添加到集群中。
集群 LVM 资源代理负责激活、停用和锁定卷组及其逻辑卷。

要添加 HA-LVM 资源,请结合 LVM 资源代理使用 pcs resource create 命令。

# pcs resource create halvm LVM volgrpname=clustervg exclusive=true

注意:LVM 资源不是文件系统资源。
在可以使用 LVM 资源中的 HA-LVM 卷上的文件系统之前,需要创建一个单独的文件系统资源。
将这些资源添加到资源组时,排序需要允许 LVM 资源在文件系统资源之前启动并在文件系统资源之后停止。

配置文件

LVM 的行为可以在 /etc/lvm/lvm.conf 中配置。
此文件具有用于控制锁定行为的设置,应扫描哪些设备以获取 LVM 签名,应为多个设备节点上可用的物理卷显示哪个名称,以及许多其他行为。
下表列出了一些更常见的选项:

/etc/lvm/lvm.conf 的选项描述
dir要扫描物理卷设备节点的目录。
obtain_device_list_from_udev如果应该使用 udev 来获取符合扫描条件的块设备列表。
preferred_names详细说明在显示设备时哪些设备名称应具有优先权的正则表达式列表。如果为同一个 PV 找到多个设备名称(节点),LVM 工具将优先选择出现在此列表前面的那些。
filter正则表达式列表,前缀为 a 表示添加或者 r 表示删除。此列表确定将扫描哪些设备节点以查找 PV 签名的存在。默认值为 "a/.*/",它添加了每个设备。此选项可用于删除不应被扫描的设备。
backup此设置确定是否应在每次更改后存储卷组元数据的基于文本的备份。如果磁盘上的元数据损坏,则此备份可用于还原卷组。
backup_dir此设置指定应存储卷组元数据备份的位置。
archive此设置确定是否应存档旧的卷组配置/布局,以便以后可以使用它们来恢复更改。
archive_dir此设置指定应存储旧配置存档的位置。

创建 HA-LVM 卷

要创建 HA-LVM 逻辑卷,请像通常使用标准 LVM 命令执行的那样创建它及其关联的物理卷和卷组。

# pvcreate /dev/sdd1
# vgcreate share1Cvg /dev/sdd1
# lvcreate -L 1G -n ha_lv shared_vg
# mkfs -t xfs /dev/shared_vg/ha_lv
如何为集群文件系统配置逻辑卷管理器
日期:2020-09-17 00:13:20 来源:oir作者:oir