16.将LVM与DRBD一起使用
本章讨论与LVM2一起管理DRBD。特别是它涵盖了
如果您刚开始不熟悉这些术语,则可以使用 LVM入门作为您的LVM起点-当然,我们总是鼓励您比本节提供的更多信息熟悉LVM。
16.1。LVM入门
LVM2在Linux设备映射器框架的上下文中是逻辑卷管理的实现。除了名称和首字母缩写词外,它与原始LVM实现几乎没有任何共同点。旧的实现(现在追溯为“ LVM1”)被认为已过时;本节未涵盖。
使用LVM时,重要的是要了解其最基本的概念:
物理卷(PV)
PV是由LVM专门管理的基础块设备。PV可以是整个硬盘,也可以是单个分区。通常的做法是在硬盘上创建一个分区表,其中一个分区专用于Linux LVM使用。
分区类型“ Linux LVM”(签名0x8E)可用于标识供LVM专用的分区。但是,这不是必需的-LVM通过在PV初始化时写入设备的签名来识别PV。 |
卷组(VG)
VG是LVM的基本管理单元。一个VG可以包含一个或多个PV。每个VG都有一个唯一的名称。通过添加其他PV或扩大现有的PV,可以在运行时扩展VG。
逻辑卷(LV)
LV可以在运行时在VG内创建,并且可以作为常规块设备供内核的其他部分使用。这样,它们可以用于保存文件系统,或者出于任何其他目的,可以使用块设备。LV可以在联机时调整其大小,也可以将它们从一个PV移到另一个PV(只要PV是同一VG的一部分)。
快照逻辑卷(SLV)
快照是LV的临时时间点副本。即使原始LV(原始卷)的大小为数百GiByte ,创建快照也是几乎立即完成的操作。通常,快照所需的空间比原始LV少得多。
图17. LVM概述
16.2。将逻辑卷用作DRBD支持设备
由于现有的逻辑卷在Linux方面仅仅是一个块设备,因此您当然可以将其用作DRBD支持设备。要以这种方式使用LV,只需创建它们,然后像往常一样为DRBD初始化它们。
本示例假定foo启用LVM的系统的两个节点上都已经存在一个名为的卷组,并且您希望r0使用该卷组中的逻辑卷来创建一个名为DRBD的资源。
首先,创建逻辑卷:
# lvcreate --name bar --size 10G foo
Logical volume "bar" created
当然,您必须在DRBD群集的两个节点上完成此命令。之后,您应该/dev/foo/bar在任一节点上都命名一个块设备 。
然后,您只需在资源配置中输入新创建的卷:
resource r0 {
...
on alice {
device /dev/drbd0;
disk /dev/foo/bar;
...
}
on bob {
device /dev/drbd0;
disk /dev/foo/bar;
...
}
}
现在,您可以继续使用资源,就像使用非LVM块设备一样。
16.3。在DRBD同步期间使用自动LVM快照
在DRBD同步时,在同步完成之前SyncTarget的状态为 Inconsistent。如果在这种情况下SyncSource发生故障(无法修复),这将使您处于不幸的境地:具有良好数据的节点已死,并且尚存的节点具有不良(不一致)的数据。
从LVM逻辑卷提供DRBD时,可以通过在同步开始时创建一个自动快照并在同步成功完成后自动删除该快照来减轻此问题。
为了在重新同步期间启用自动快照,请将以下行添加到资源配置中:
清单12.在DRBD同步之前自动执行快照
resource r0 {
handlers {
before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh";
after-resync-target "/usr/lib/drbd/unsnapshot-resync-target-lvm.sh";
}
}
这两个脚本解析$DRBD_RESOURCEDRBD自动传递给handler它调用的任何环境变量。然后, snapshot-resync-target-lvm.sh脚本为资源包含的任何卷创建LVM快照,然后开始同步。如果脚本失败,则同步不会开始。
同步完成后,unsnapshot-resync-target-lvm.sh 脚本将删除快照,因此不再需要快照。万一取消快照失败,快照将继续徘徊。
您应该尽快查看悬空快照。完整快照会导致快照本身及其原始卷失败。 |
如果任何时候SyncSource确实无法修复都无法修复,而您决定恢复对等端上的最新快照,则可以通过发出lvconvert -M命令来恢复。
16.4。将DRBD资源配置为物理卷
为了准备用作物理卷的DRBD资源,必须在DRBD设备上创建PV签名。为此,请在资源当前处于主要角色的节点上发出以下命令之一:
# pvcreate /dev/drbdX
要么
# pvcreate /dev/drbd/by-res/
本示例假定单卷资源。 |
现在,有必要将该设备包括在LVM扫描的PV签名的设备列表中。为此,您必须编辑LVM配置文件(通常名为) /etc/lvm/lvm.conf。在devices包含filter关键字的部分中找到该行, 然后进行相应的编辑。如果要将所有 PV都存储在DRBD设备上,则以下filter选项是合适的:
filter = [ "a|drbd.*|", "r|.*|" ]
该过滤器表达式接受在任何DRBD设备上找到的PV签名,同时拒绝(忽略)所有其他签名。
默认情况下,LVM扫描其中找到的所有块设备以/dev查找PV签名。等同于filter = [ "a|.*|" ]。 |
如果要将堆栈资源用作LVM PV,则将需要更明确的过滤器配置。您需要确保LVM在堆栈资源上检测到PV签名,而在相应的较低级资源和备用设备上忽略它们。本示例假定您的下层DRBD资源使用的设备次要设备为0到9,而您堆叠的资源使用的设备次要设备的设备从10以上:
filter = [ "a|drbd1[0-9]|", "r|.*|" ]
该过滤器表达式接受仅在DRBD设备中发现的PV签名/dev/drbd10通过/dev/drbd19,而拒绝(忽略)所有其他人。
修改lvm.conf文件后,必须运行 vgscan命令,以便LVM丢弃其配置高速缓存并重新扫描设备以查找PV签名。
您当然可以使用其他filter配置来匹配您的特定系统配置。但是要记住的重要一点是,您需要
另外,您应该通过设置以下内容来禁用LVM缓存:
write_cache_state = 0
禁用LVM缓存后,请确保通过删除删除所有过时的缓存条目/etc/lvm/cache/.cache。
您还必须在对等节点上重复上述步骤。
如果您的系统在LVM上具有其根文件系统,则在引导过程中将从初始ramdisk(initrd)激活卷组。这样,LVM工具将评估lvm.confinitrd映像中包含的文件。因此,您对您的任何更改后 lvm.conf,你应该是一定的更新与公用事业适合您的分布(你的initrd mkinitrd, update-initramfs等等)。 |
配置新的PV后,可以继续将其添加到卷组,或从中创建新的卷组。当然,DRBD资源必须在此过程中起主要作用。
# vgcreate
虽然可以在同一卷组中混合使用DRBD和非DRBD物理卷,但不建议这样做,并且不具有任何实际价值。 |
创建VG后,可以开始使用lvcreate命令(如非DRBD支持的卷组)从中雕刻出逻辑卷。
16.5。将新的DRBD卷添加到现有的卷组
有时,您可能需要将新的支持DRBD的物理卷添加到卷组。每当执行此操作时,都应将新卷添加到现有资源配置中。这样可以保留复制流,并确保VG中所有PV之间的写入保真度。
如果您的LVM卷组由Pacemaker管理,如Pacemaker的高可用性LVM中所述,则必须在更改DRBD配置之前将群集置于维护模式。 |
扩展资源配置以包括其他卷,如以下示例所示:
resource r0 {
volume 0 {
device /dev/drbd1;
disk /dev/sda7;
meta-disk internal;
}
volume 1 {
device /dev/drbd2;
disk /dev/sda8;
meta-disk internal;
}
on alice {
address 10.1.1.31:7789;
}
on bob {
address 10.1.1.32:7789;
}
}
确保您的DRBD配置在节点之间相同,然后发出:
# drbdadm adjust r0
这将隐式调用drbdsetup new-minor r0 1以1在资源中启用新卷r0。将新卷添加到复制流后,您可以初始化并将其添加到卷组:
# pvcreate /dev/drbd/by-res/
# vgextend
这会将新的PV添加/dev/drbd/by-res/
16.6。带DRBD的嵌套LVM配置
这是可能的,如果稍微前进,以两者都使用逻辑卷作为DRBD后备设备和在同一时间使用DRBD设备本身作为一个物理卷。要提供示例,请考虑以下配置:
为了启用此配置,请按照下列步骤操作:
filter = ["a|sd.*|", "a|drbd.*|", "r|.*|"]
该过滤器表达式接受在任何SCSI和DRBD设备上找到的PV签名,同时拒绝(忽略)所有其他签名。
修改lvm.conf文件后,必须运行 vgscan命令,以便LVM丢弃其配置高速缓存并重新扫描设备以查找PV签名。
write_cache_state = 0
禁用LVM缓存后,请确保通过删除删除所有过时的缓存条目/etc/lvm/cache/.cache。
# pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
# vgcreate local /dev/sda1 /dev/sda2
Volume group "local" successfully created
# lvcreate --name r0 --size 10G local
Logical volume "r0" created
resource r0 {
device /dev/drbd0;
disk /dev/local/r0;
meta-disk internal;
on
on
}
创建新的资源配置之后,请确保将drbd.conf内容复制到对等节点。
#drbdadm primary r0
# pvcreate /dev/drbd0
Physical volume "/dev/drbd0" successfully created
# vgcreate replicated /dev/drbd0
Volume group "replicated" successfully created
# lvcreate --name foo --size 4G replicated
Logical volume "foo" created
# lvcreate --name bar --size 6G replicated
Logical volume "bar" created
逻辑卷foo和bar现在将作为 /dev/replicated/foo与/dev/replicated/bar本地节点上。
16.6.1。将VG切换到另一个节点
要使它们在另一个节点上可用,请首先在主节点上发出以下命令序列:
# vgchange -a n replicated
0 logical volume(s) in volume group "replicated" now active
# drbdadm secondary r0
然后,在另一个(仍然是次要的)节点上发出以下命令:
# drbdadm primary r0
# vgchange -a y replicated
2 logical volume(s) in volume group "replicated" now active
此后,块设备/dev/replicated/foo和 /dev/replicated/bar将在另一个(现在是主节点)节点上可用。
16.7。带有Pacemaker的高可用LVM
在同级之间传输卷组并使相应逻辑卷可用的过程可以自动化。Pacemaker LVM资源代理正是为此目的而设计的。
为了将现有的,受DRBD支持的卷组置于Pacemaker管理下,请在crmshell中运行以下命令:
清单13. DRBD支持的LVM卷组的Pacemaker配置
primitive p_drbd_r0 ocf:linbit:drbd \
params drbd_resource="r0" \
op monitor interval="29s" role="Master" \
op monitor interval="31s" role="Slave"
ms ms_drbd_r0 p_drbd_r0 \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
primitive p_lvm_r0 ocf:heartbeat:LVM \
params volgrpname="r0"
colocation c_lvm_on_drbd inf: p_lvm_r0 ms_drbd_r0:Master
order o_drbd_before_lvm inf: ms_drbd_r0:promote p_lvm_r0:start
commit
提交此配置后,Pacemaker将自动r0在当前具有DRBD资源的主(主)角色的任何节点上使卷组可用。