如何在Linux中配置HA LVM群集资源以共享LVM

时间:2020-01-09 10:37:44  来源:igfitidea点击:

如何配置高可用性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.

注意:在lvm2rpms大于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上启动的,因为node2standby

接下来检查逻辑卷" lvcluster"是否安装在" node1"上

[root@node1 ~]# mount | grep xfs
/dev/mapper/vgcluster-lvcluster on /xfs type xfs (rw,relatime,attr2,inode64,noquota)

因此,我们的"故障转移"也在起作用。