如何在Linux中配置HA LVM群集资源以共享LVM
如何配置高可用性LVM。
没有GFS2的CentOS或者RHEL 7 Linux上的HA LVM。
如何配置群集服务或者资源以激活和监视共享的LVM卷?
对共享存储的不受控制的同时访问可能导致数据损坏。
必须像其他任何主动/被动服务一样管理存储访问,它一次只能在一台机器上处于活动状态。
有没有一种方法可以配置LVM卷以在高可用性群集中进行主动/被动使用?
顾名思义,要配置HA LVM,我们需要使用"逻辑卷"。
因此,请确保在群集的所有节点上具有相同名称的逻辑卷和卷组。
还是手动安装Linux?
我建议使用Network PXE Boot Server配置"一键安装"。
使用PXE服务器,我们可以安装Oracle虚拟机或者基于KVM的虚拟机或者任何类型的物理服务器,而无需任何人工干预,从而节省了时间和精力。
早些时候,我分享了一篇有关集群体系结构和集群类型的文章,并且还提供了逐步指南以配置具有三个节点的HA集群。
现在,稍后我必须删除一个集群节点,以向我们展示有关两个节点集群设置及其配置的信息。
因此,我将继续使用相同的设置来演示本文。
如我们所见,我已经有一些资源组属于我的集群。
我写了另一篇文章,以了解有关集群上的资源组和资源约束的所有信息。
[root@node1 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node1.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Wed Dec 26 18:37:51 2016 Last change: Wed Dec 26 18:37:29 2016 by root via cibadmin on node1.example.com 2 nodes configured 6 resources configured Online: [ node1.example.com node2.example.com ] Full list of resources: Resource Group: apache-group apache-ip (ocf::heartbeat:IPaddr2): Started node2.example.com apache-service (ocf::heartbeat:apache): Started node2.example.com Resource Group: ftp-group ftp-ip (ocf::heartbeat:IPaddr2): Stopped ftp-service (systemd:vsftpd): Stopped Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
搭建环境
我的集群在Oracle VirtualBox上安装的RHEL 7上运行。
我们也可以在RHEL/CentOS Linux主机上安装Oracle VirtualBox。
现在,在开始HA LVM群集配置之前,让我们在两个群集节点上创建逻辑卷和卷组。
现在在" node1"和" node2"上,我将"/dev/sdc"和"/dev/sdb"作为分别连接到节点的添加存储。
创建物理体积
[root@node1 ~]# pvcreate /dev/sdc Physical volume "/dev/sdc" successfully created.
在/dev/sdc上创建卷组
[root@node1 ~]# vgcreate vgcluster /dev/sdc Volume group "vgcluster" successfully created
最后创建一个逻辑卷。
其中我们正在vgcluster
卷组上创建一个大小为400MB的逻辑卷,名称为lvcluster
。
[root@node1 ~]# lvcreate -L 400M -n lvcluster vgcluster Logical volume "lvcluster" created.
对于我们的演示,我将XFS文件系统分配给lvcluster lvm。
[root@node1 ~]# mkfs.xfs /dev/vgcluster/lvcluster meta-data=/dev/vgcluster/lvcluster isize=512 agcount=4, agsize=25600 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=102400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0
验证更改
[root@node1 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <15.78g swap centos -wi-ao---- 760.00m lvcluster vgcluster -wi-a----- 400.00m [root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 2 2 0 wz--n- <17.52g 1020.00m vgcluster 1 1 0 wz--n- <8.00g <7.61g
通过运行以下命令,确保将" locking_type"设置为" 1",并且将" lvm2-lvmetad"禁用。
[root@node1 ~]# lvmconf --enable-halvm --services --startstopservices Warning: Stopping lvm2-lvmetad.service, but it can still be activated by: lvm2-lvmetad.socket Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmetad.socket.
注意:在lvm2
rpms大于lvm2-2.02.118-2
的节点上,使用以下命令集
# lvmconf --enable-halvm # systemctl disable lvm2-lvmetad.service ## RHEL 7 # systemctl disable lvm2-lvmetad.socket ## RHEL 7 # systemctl stop lvm2-lvmetad.service ## RHEL 7 # systemctl stop lvm2-lvmetad.socket ## RHEL 7 # chkconfig lvm2-lvmetad off ## RHEL 6 # service lvm2-lvmetad stop ## RHEL 6
当前存在一个已知问题,即使已禁用," lvm2-lvmetad.socket"也会在引导时启动。
要完全阻止它启动,请屏蔽它。
[root@node1 ~]# systemctl mask lvm2-lvmetad.socket Created symlink from /etc/systemd/system/lvm2-lvmetad.socket to /dev/null.
在/etc/lvm/lvm.conf
中配置一个volume_list,它只包含群集节点不共享的本地卷组。
不需要像rgmanager配置那样包含与节点名称匹配的标签。
[root@node1 ~]# vim /etc/lvm/lvm.conf volume_list = [ centos ]
这里的" centos"是我的节点上已经存在的卷组,它将不属于我的集群LVM。
因此,我在" lvm.conf"中为" volume_list"写了" centos"。
[root@node1 ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 2 2 0 wz--n- <17.52g 1020.00m vgcluster 1 1 0 wz--n- <8.00g <7.61g
接下来重建你的initramfs
[root@node1 ~]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
验证是否成功创建了新的" initramfs"。
[root@node1 ~]# ls -l /boot/ total 163452 -rw-r--r-- 1 root root 147859 Sep 26 20:45 config-3.10.0-862.14.4.el7.x86_64 -rw-r--r-- 1 root root 151922 Nov 29 20:23 config-3.10.0-957.1.3.el7.x86_64 drwxr-xr-x. 3 root root 1024 Oct 26 20:34 efi drwxr-xr-x. 2 root root 1024 Oct 26 20:35 grub drwx------. 5 root root 1024 Dec 21 11:18 grub2 -rw-------. 1 root root 53692051 Oct 26 20:37 initramfs-0-rescue-43f0510283784c858d39e38e358b4669.img -rw------- 1 root root 30440965 Dec 26 18:30 initramfs-3.10.0-862.14.4.el7.x86_64.img -rw------- 1 root root 12604644 Nov 14 19:59 initramfs-3.10.0-862.14.4.el7.x86_64kdump.img -rw------- 1 root root 30455624 Dec 20 17:51 initramfs-3.10.0-957.1.3.el7.x86_64.img -rw------- 1 root root 12746618 Dec 21 09:58 initramfs-3.10.0-957.1.3.el7.x86_64kdump.img -rw-r--r--. 1 root root 611520 Oct 26 20:35 initrd-plymouth.img drwx------. 2 root root 12288 Oct 26 20:33 lost+found -rw-r--r-- 1 root root 305158 Sep 26 20:47 symvers-3.10.0-862.14.4.el7.x86_64.gz -rw-r--r-- 1 root root 314072 Nov 29 20:23 symvers-3.10.0-957.1.3.el7.x86_64.gz -rw------- 1 root root 3414754 Sep 26 20:45 System.map-3.10.0-862.14.4.el7.x86_64 -rw------- 1 root root 3544010 Nov 29 20:23 System.map-3.10.0-957.1.3.el7.x86_64 -rwxr-xr-x. 1 root root 5877760 Oct 26 20:37 vmlinuz-0-rescue-43f0510283784c858d39e38e358b4669 -rwxr-xr-x 1 root root 6398144 Sep 26 20:45 vmlinuz-3.10.0-862.14.4.el7.x86_64 -rwxr-xr-x 1 root root 6639808 Nov 29 20:23 vmlinuz-3.10.0-957.1.3.el7.x86_64
最后重启节点以激活更改
现在,我将在node2上重复相同的步骤。
同样,我们在所有群集节点上重复相同的步骤。
重要说明:请对逻辑卷和卷组使用与node1
上相同的规格,否则群集将不适用于HA LVM
。
[root@node2 ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created. [root@node2 ~]# vgcreate vgcluster /dev/sdb Volume group "vgcluster" successfully created [root@node2 ~]# lvcreate -L 400M -n lvcluster vgcluster Logical volume "lvcluster" created. [root@node2 ~]# mkfs.xfs /dev/vgcluster/lvcluster meta-data=/dev/vgcluster/lvcluster isize=512 agcount=4, agsize=25600 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0, sparse=0 data = bsize=4096 blocks=102400, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal log bsize=4096 blocks=855, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 [root@node2 ~]# vgs VG #PV #LV #SN Attr VSize VFree centos 1 2 0 wz--n- <9.52g 0 vgcluster 1 1 0 wz--n- <8.00g <7.61g [root@node2 ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos -wi-ao---- <8.78g swap centos -wi-ao---- 760.00m lvcluster vgcluster -wi-a----- 400.00m [root@node2 ~]# lvmconf --enable-halvm --services --startstopservices Warning: Stopping lvm2-lvmetad.service, but it can still be activated by: lvm2-lvmetad.socket Removed symlink /etc/systemd/system/sysinit.target.wants/lvm2-lvmetad.socket. [root@node2 ~]# systemctl mask lvm2-lvmetad.socket Created symlink from /etc/systemd/system/lvm2-lvmetad.socket to /dev/null. [root@node2 ~]# ls -l /boot/ total 87362 -rw-r--r--. 1 root root 140894 Aug 23 2016 config-3.10.0-693.el7.x86_64 drwxr-xr-x. 3 root root 1024 Oct 26 20:34 efi drwxr-xr-x. 2 root root 1024 Oct 26 20:35 grub drwx------. 5 root root 1024 Oct 26 20:38 grub2 -rw-------. 1 root root 53692051 Oct 26 20:37 initramfs-0-rescue-43f0510283784c858d39e38e358b4669.img -rw------- 1 root root 19706468 Dec 26 18:25 initramfs-3.10.0-693.el7.x86_64.img -rw-r--r--. 1 root root 611520 Oct 26 20:35 initrd-plymouth.img drwx------. 2 root root 12288 Oct 26 20:33 lost+found -rw-r--r--. 1 root root 293027 Aug 23 2016 symvers-3.10.0-693.el7.x86_64.gz -rw-------. 1 root root 3228420 Aug 23 2016 System.map-3.10.0-693.el7.x86_64 -rwxr-xr-x. 1 root root 5877760 Oct 26 20:37 vmlinuz-0-rescue-43f0510283784c858d39e38e358b4669 -rwxr-xr-x. 1 root root 5877760 Aug 23 2016 vmlinuz-3.10.0-693.el7.x86_64
在群集节点上配置HA LVM
现在,我们所有的环境都已设置为开始配置HA LVM。
首先,我们需要创建一个LVM资源组
另请阅读:
群集资源故障排除指南(RHEL/CentOS 7)
为LVM创建LVM资源组
现在,我们可以创建HA LVM资源。
LVM是我们将在集群中使用的通用资源,而halvm
只是我们要分配的名称。
volgrpname等于vgcluster,排他性为true,我们将其放入名为halvmfs的组中。
[root@node1 ~]# pcs resource create halvm LVM volgrpname=vgcluster exclusive=true --group halvmfs Assumed agent name 'ocf:heartbeat:LVM' (deduced from 'LVM')
现在我们已经为集群创建了资源,我们可以验证它确实已经启动。
[root@node1 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node1.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Wed Dec 26 18:34:28 2016 Last change: Wed Dec 26 18:34:14 2016 by root via cibadmin on node1.example.com 2 nodes configured 5 resources configured Online: [ node1.example.com node2.example.com ] Full list of resources: Resource Group: apache-group apache-ip (ocf::heartbeat:IPaddr2): Started node2.example.com apache-service (ocf::heartbeat:apache): Started node2.example.com Resource Group: ftp-group ftp-ip (ocf::heartbeat:IPaddr2): Stopped ftp-service (systemd:vsftpd): Stopped Resource Group: halvmfs halvm (ocf::heartbeat:LVM): Started node2.example.com Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
如我们所见,我们的HA LVM服务已在node2.example.com
上成功启动。
现在我们需要照顾文件系统,并且文件系统需要安装在某个地方。
创建资源组以挂载文件系统
为了使本文配置HA LVM,我将在两个群集节点上都将/xfs
目录创建为我的挂载点。
[root@node1 ~]# mkdir /xfs [root@node2 ~]# mkdir /xfs
接下来,我们需要创建一个资源,该资源通过集群安装文件系统。
[root@node1 ~]# pcs resource create xfsfs Filesystem device="/dev/vgcluster/lvcluster" directory="/xfs" fstype="xfs" --group halvmfs
其中我们为逻辑卷"/dev/vgcluster/lvcluster"创建了"文件系统"类型的资源,该资源应挂载在"/xfs"上,并使其成为我们现有的" halvmfs"组的一部分。
因此,我们上一次命令执行成功,因此让我们验证" pcs集群状态"。
[root@node1 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node1.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Wed Dec 26 18:37:51 2016 Last change: Wed Dec 26 18:37:29 2016 by root via cibadmin on node1.example.com 2 nodes configured 6 resources configured Online: [ node1.example.com node2.example.com ] Full list of resources: Resource Group: apache-group apache-ip (ocf::heartbeat:IPaddr2): Started node2.example.com apache-service (ocf::heartbeat:apache): Started node2.example.com Resource Group: ftp-group ftp-ip (ocf::heartbeat:IPaddr2): Stopped ftp-service (systemd:vsftpd): Stopped Resource Group: halvmfs halvm (ocf::heartbeat:LVM): Started node2.example.com xfsfs (ocf::heartbeat:Filesystem): Started node2.example.com Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
如我们所见,我们的资源xfsfs已在node2.example.com上成功启动。
验证HA LVM配置
现在,由于我们知道我们的HA群集资源正在node2.example.com
上运行,因此请验证逻辑卷是否已成功安装在/xfs
上。
[root@node2 ~]# mount | grep xfs /dev/mapper/vgcluster-lvcluster on /xfs type xfs (rw,relatime,attr2,inode64,noquota)
因此,一切看起来都不错,并且按预期工作。
验证HA LVM故障转移
现在让我们进行验证,以确保"故障转移"可用于我们的HA LVM群集资源。
因此,为此,我们将node2.example.com的状态更改为Standby。
[root@node2 ~]# pcs cluster standby node2.example.com
现在验证pcs集群状态
[root@node2 ~]# pcs status Cluster name: mycluster Stack: corosync Current DC: node1.example.com (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum Last updated: Wed Dec 26 18:39:56 2016 Last change: Wed Dec 26 18:39:32 2016 by root via cibadmin on node2.example.com 2 nodes configured 6 resources configured Node node2.example.com: standby Online: [ node1.example.com ] Full list of resources: Resource Group: apache-group apache-ip (ocf::heartbeat:IPaddr2): Started node1.example.com apache-service (ocf::heartbeat:apache): Started node1.example.com Resource Group: ftp-group ftp-ip (ocf::heartbeat:IPaddr2): Stopped ftp-service (systemd:vsftpd): Stopped Resource Group: halvmfs halvm (ocf::heartbeat:LVM): Started node1.example.com xfsfs (ocf::heartbeat:Filesystem): Started node1.example.com Daemon Status: corosync: active/enabled pacemaker: active/enabled pcsd: active/enabled
就像我们现在看到的那样,我们的HA LVM群集资源是在node1.example.com
上启动的,因为node2
在standby
上
接下来检查逻辑卷" lvcluster"是否安装在" node1"上
[root@node1 ~]# mount | grep xfs /dev/mapper/vgcluster-lvcluster on /xfs type xfs (rw,relatime,attr2,inode64,noquota)
因此,我们的"故障转移"也在起作用。