
当管理群集上的共享储存区时,所有节点必须收到有关对储存子系统所做更改的通知。Linux 卷管理器 2 (LVM2) 广泛用于管理本地储存,已扩展为支持对整个群集中的卷组进行透明管理。可使用与本地储存相同的命令来管理群集卷组。
群集 LVM 集成了不同工具:
集成了对 cLVM 的磁盘访问。
支持将一个文件系统灵活分布到多个磁盘上。LVM 可提供磁盘空间虚拟池。
集成了对 LVM2 元数据的访问,以使每个节点都了解相关更改。cLVM 未集成对共享数据本身的访问;要使 cLVM 可执行此操作,必须在 cLVM 管理的储存区上配置 OCFS2 或其他群集感知应用程序。
根据具体情况,可使用具有以下层的 cLVM 创建 RAID 1 设备:
LVM. 这是非常灵活的解决方案,可用于增大或减小文件系统大小、添加更多物理储存空间或创建文件系统快照。有关此方法的描述,请参见第 16.2.3 节 “方案:iSCSI 在 SAN 上的 cLVM”。
DRBD. 此解决方案仅提供 RAID 0(分段)和 RAID 1(镜像)。有关上一方法的描述,请参见第 16.2.4 节 “方案:使用 DRBD 的 cLVM”。
尽管 MD 设备(Linux 软件 RAID 或 mdadm)提供所有 RAID 级别,但它尚不支持群集。因此,以上列表并未包含此类设备。
请确保已满足以下先决条件:
共享储存设备是可用的,如通过光纤通道、FCoE、SCSI、iSCSI SAN 或 DRBD* 提供的共享储存设备。
如果是 DRBD,那么两个节点都必须是主节点(如以下过程中所述)。
检查 LVM2 的锁定类型是否为群集感知。/etc/lvm/lvm.conf 中的关键字 locking_type 必须包含值 3(应是默认值)。如果需要,将此配置复制到所有节点。
要跟踪群集中的镜像日志信息,可以使用 cmirrord 守护程序。如果此守护程序未运行,则无法处理群集镜像。
假定 /dev/sda 和 /dev/sdb 是共享储存设备。必要时请使用您自己的设备名称替换上述名称。按如下所示继续:
创建一个至少包含两个节点的群集。
配置群集以运行 dlm、clvmd 和 STONITH:
root #crmconfigurecrm(live)configure#primitiveclvmd ocf:lvm2:clvmd \ op stop interval="0" timeout="100" \ op start interval="0" timeout="90" \ op monitor interval="20" timeout="20"crm(live)configure#primitivedlm ocf:pacemaker:controld \ op start interval="0" timeout="90" \ op stop interval="0" timeout="100" \ op monitor interval="60" timeout="60"crm(live)configure#primitivesbd_stonith stonith:external/sbdcrm(live)configure#groupbase-group dlm clvmdcrm(live)configure#clonebase-clone base-group \ meta interleave="true"
使用 exit 退出 crmsh 并提交更改。
创建群集卷组 (VG):
root #pvcreate/dev/sda /dev/sdbroot #vgcreate-cy vg /dev/sda /dev/sdb
在群集中创建镜像日志逻辑卷 (LV):
root #lvcreate-nlv -m1 -l10%VG vg --mirrorlog mirrored
使用 lvs 显示进度。如果百分数已达到 100%,则表示镜像磁盘已成功同步。
要测试群集卷 /dev/vg/lv,请执行下列步骤:
读取或写入到 /dev/vg/lv。
使用 lvchange -an 停用 LV。
使用 lvchange -ay 激活 LV。
使用 lvconvert 将镜像日志转换为磁盘日志。
在其他群集 VG 中创建镜像日志 LV。此卷组与先前的卷组不同。
当前的 cLVM 在每个镜像端只能处理一个物理卷 (PV)。如果一个镜像实际由多个需要连接或拆分的 PV 组成,则 lvcreate 无法了解此情况。因此,lvcreate 和 cmirrord 元数据需要了解 PV 在其中一端的“分组”,以便有效地支持 RAID10。
为支持 RAID10 处理 cmirrord,请使用以下过程(假定 /dev/sda 和 /dev/sdb 是共享储存设备):
创建卷组 (VG):
root #pvcreate/dev/sda /dev/sdbroot #vgcreatevg /dev/sda /dev/sdb
打开文件 /etc/lvm/lvm.conf 并转到 allocation 部分。设置下列行并保存文件:
mirror_legs_require_separate_pvs = 1
将标记添加到 PV:
root #pvchange--addtag @a /dev/sdaroot #pvchange--addtag @b /dev/sdb
标记是无序的关键字或指派给储存对象元数据的术语。使用标记功能可以采用您认为有用的方式将无序的标记列表附加到 LVM 储存对象元数据,从而对储存对象集合进行分类。
列出标记:
root #pvs-o pv_name,vg_name,pv_tags /dev/sd{a,b}
您应收到以下输出结果:
PV VG PV Tags /dev/sda vgtest a /dev/sdb vgtest b
如需有关 LVM 的更多信息,请参见《SUSE Linux Enterprise Server 12 储存管理指南》中的“LVM 配置”一章,网址:http://www.suse.com/documentation/。
准备群集以便使用 cLVM 包括以下基本步骤:
cLVM 和 OCFS2 都需要一个在群集中的所有节点上运行的 DLM 资源,因而通常配置为一个克隆。如果设置既包括 OCFS2 也包括 cLVM,则为 OCFS2 和 cLVM 配置一个 DLM 资源就足够了。
以 root 用户身份启动外壳并登录。
运行 crm 。
configure
使用 show 检查群集资源的当前配置。
如果已经配置 DLM 资源(及相应的基本组和基本克隆),则继续过程 16.2, “创建 LVM 和 cLVM 资源”。
否则,如过程 13.2, “配置 DLM 资源”中所述配置 DLM 资源和相应的基本组和基本克隆。
使用 exit 保留 crm 当前配置。
以 root 用户身份启动外壳并登录。
运行 crm 。
configure
如下所示配置 cLVM 资源:
crm(live)configure#primitiveclvm ocf:lvm2:clvmd \ params daemon_timeout="30"
如下所示为卷组配置 LVM 资源:
crm(live)configure#primitivevg1 ocf:heartbeat:LVM \ params volgrpname="cluster-vg" \ op monitor interval="60" timeout="60"
如果希望仅在一个节点上激活卷组,则如下所述配置 LVM 资源并忽略步骤 6:
crm(live)configure#primitivevg1 ocf:heartbeat:LVM \ params volgrpname="cluster-vg" exclusive="yes" \ op monitor interval="60" timeout="60"
在这种情况下,cLVM 将保护 VG 内的所有逻辑卷,防止它们在多个节点上激活,这也是非群集应用程序的一种附加保护措施。
要确保在群集范围内激活 cLVM 和 LVM 资源,请向在过程 13.2, “配置 DLM 资源”中创建的基本组添加这两个原始资源:
输入
crm(live)configure#editbase-group
在打开的 vi 编辑器中,如下所示修改组并保存更改:
crm(live)configure#groupbase-group dlm clvm vg1 ocfs2-1
如果设置不包括 OCFS2,则忽略基本组中的 ocfs2-1 原始资源。
使用 show 复查更改。
如果全部都正确,则使用 commit 提交更改,并使用 exit 退出 crm 当前配置。
以下方案使用两个 SAN 盒,将其 iSCSI 目标导出到多个客户端。大致想法如图 16.1 “设置使用 cLVM 的 iSCSI”所示。
以下过程将损坏磁盘上的所有数据!
首先只配置一个 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/iscsi.conf,并将参数 node.startup 更改为 automatic。
现在按如下方式设置 iSCSI 发起程序:
运行 YaST,然后单击 › 。
如果要在计算机引导时启动 iSCSI 发起程序,请选择,否则请将其设置为。
切换到选项卡并单击按钮。
添加 iSCSI 目标的 IP 地址和端口(请参见过程 16.3, “配置 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 Logging in to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260] Logging in to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,3260] Login to [iface: default, target: iqn.2010-03.de.jupiter:san2, portal: 192.168.3.100,3260]: successful Login to [iface: default, target: iqn.2010-03.de.venus:san1, portal: 192.168.3.101,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。
打开已按过程 16.4, “配置 iSCSI 发起程序”运行 iSCSI 发起程序的一个节点上的 root 外壳。
使用命令 pvcreate 在磁盘 /dev/sdd 和 /dev/sde 上准备 LVM 的物理卷:
root #pvcreate/dev/sddroot #pvcreate/dev/sde
在这两个磁盘上创建群集感知卷组:
root #vgcreate--clustered y clustervg /dev/sdd /dev/sde
根据需要创建逻辑卷:
root #lvcreate--name clusterlv --size 500M clustervg
使用 pvdisplay 检查物理卷:
--- Physical volume ---
PV Name /dev/sdd
VG Name clustervg
PV Size 509,88 MB / not usable 1,88 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 127
Free PE 127
Allocated PE 0
PV UUID 52okH4-nv3z-2AUL-GhAN-8DAZ-GMtU-Xrn9Kh
--- Physical volume ---
PV Name /dev/sde
VG Name clustervg
PV Size 509,84 MB / not usable 1,84 MB
Allocatable yes
PE Size (KByte) 4096
Total PE 127
Free PE 127
Allocated PE 0
PV UUID Ouj3Xm-AI58-lxB1-mWm2-xn51-agM2-0UuHFC
使用 vgdisplay 检查卷组:
--- Volume group ---
VG Name clustervg
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
创建卷并启动资源后,应有一个名为 /dev/dm-0 的新设备。建议使用 LVM 资源上的群集文件系统,例如 OCFS。有关详细信息,请参见第 13 章 OCFS2。
如果数据中心位于城市、国家/地区或大洲的不同区域,则可使用以下方案。
创建主/主 DRBD 资源:
首先,按过程 15.1, “手动配置 DRBD”中所述将 DRBD 设备设置为主/从模式。确保两个节点上的磁盘状态均为 up-to-date。使用 cat /proc/drbd 或 systemctl status drbd.service 检查情况是否如此。
将以下选项添加到配置文件(通常类似 /etc/drbd.d/r0.res):
resource r0 {
startup {
become-primary-on both;
}
net {
allow-two-primaries;
}
...
}将更改的配置文件复制到另一个节点,例如:
root #scp/etc/drbd.d/r0.res venus:/etc/drbd.d/
在两个节点上运行以下命令:
root #drbdadmdisconnect r0root #drbdadmconnect r0root #drbdadmprimary r0
检查节点的状态:
root #cat/proc/drbd ... 0: cs:Connected ro:Primary/Primary ds:UpToDate/UpToDate C r----
将 clvmd 资源作为克隆品包含在 Pacemaker 配置中,并让它依赖于 DLM 克隆资源。有关详细指示信息,请参见过程 16.1, “创建 DLM 资源”。继续之前,请确认这些资源已在群集上成功启动。可以使用 crm_mon 或 Web 界面检查正在运行的服务。
使用命令 pvcreate 准备 LVM 的物理卷。例如,在设备 /dev/drbd_r0 上,命令应类似于:
root #pvcreate/dev/drbd_r0
创建群集感知卷组:
root #vgcreate--clustered y myclusterfs /dev/drbd_r0
根据需要创建逻辑卷。您可能想要更改逻辑卷的大小。例如,使用以下命令创建 4 GB 的逻辑卷:
root #lvcreate--name testlv -L 4G myclusterfs
现在 VG 内的逻辑卷可作为文件系统装入或原始用法提供。确保使用逻辑卷的服务具备适当的依赖性,以便在激活 VG 后对它们进行共置和排序。
完成这些配置步骤后,即可像在任何独立工作站中一样进行 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/.*/" ]
编写配置文件并将它复制到所有群集节点。
可从 http://www.clusterlabs.org/wiki/Help:Contents 处的 pacemaker 邮件列表中获取完整信息。
官方 cLVM 常见问题可在以下网址中找到:http://sources.redhat.com/cluster/wiki/FAQ/CLVM。