如何在Linux(RHEL/CentOS 7)上使用群集设置GFS2

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

在开始在Red Hat或者CentOS集群上安装GFS2文件系统之前,我们必须熟悉:

什么是集群,它的体系结构和类型是什么?
什么是群集资源和约束?
如何设置Red Hat或者CentOS 7集群?
如果集群中只有两个节点,则需要执行一些添加步骤来设置两个节点集群。

如果要求是共享基于ext4或者xfs的文件系统,则还可以在没有GFS2文件系统的群集之间共享LVM。

GFS2文件系统需要共享存储,因此如果不可用,则必须在RHEL或者CentOS Linux计算机上使用iscsi目标(targetcli)手动创建共享存储。

我将使用安装在Linux服务器上的Oracle VirtualBox进行本文的演示,并在Windows 10便携式计算机上运行。

在本文中,我们将创建多个集群资源,并使用约束条件对资源启动顺序进行排序。

因为这些资源以预定义的顺序启动非常重要,否则它们将无法启动。

因此,让我们从在Red Hat或者CentOS 7 Cluster上配置GFS2文件系统的步骤开始。

为什么我们需要集群文件系统?

  • 在某些情况下,使用支持群集的文件系统是有意义的。

  • 支持群集的文件系统的目的是允许多个节点同时写入文件系统。

  • SUSE Linux Enterprise Server上默认的支持群集的文件系统是OCFS2,在Red Hat上,它是全局文件系统(GFS)2.

  • 文件系统通过在具有立即运行的文件系统资源的节点之间同步缓存来完成此操作,这意味着每个节点始终具有与文件系统上正在发生的事情完全相同的实际状态。

  • 通常,在活动/活动方案中需要它们,在该方案中,同一资源的多个实例在多个节点上运行并且都处于活动状态。

  • 如果我们只想同时运行一个资源实例,则不必创建集群文件系统。

使用集群文件系统有什么缺点吗?

除了优点之外,使用群集文件系统也有缺点。
最重要的缺点是必须在所有涉及的节点之间同步缓存。
在许多情况下,尤其是那些涉及大量元数据操作的情况,这会使群集文件系统比独立文件系统慢。
由于它们还提供了节点之间的更强耦合,因此群集很难防止故障扩散。

通常认为,与本地节点文件系统相比,群集文件系统在故障转移时间上具有优势,因为它已经安装了。
但是,这是不正确的。
文件系统仍会暂停,直到对发生故障的节点执行隔离/STONITH和日志恢复为止。
这将冻结所有节点上的集群文件系统。
它实际上是一组独立的本地文件系统,可提供更高的可用性!群集文件系统应在需要时使用,但必须经过仔细计划。

设置GFS2文件系统的准备工作

在开始使用GFS2文件系统之前,以下是对群集的强制性要求

  • CLVM(集群逻辑卷管理器)

  • DLM(分布式锁管理器)

重要的是,群集设置必须配置有fencing/STONITH。

我们在集群上的此处启用了防护。
我们可以使用pcs属性集stonith-enabled = true启用它

[root@node1 ~]# pcs property show
Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: mycluster
 dc-version: 1.1.18-11.el7_5.3-2b07d5c5a9
 have-watchdog: false
 last-lrm-refresh: 1546059766
 no-quorum-policy: freeze
 stonith-enabled: true

在下面我们可以看到群集状态,这里我配置了三个防护设备

[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: Sat Dec 29 10:33:16 2016
Last change: Sat Dec 29 10:33:01 2016 by root via cibadmin on node1.example.com
3 nodes configured
3 resources configured
Online: [ node1.example.com node2.example.com node3.example.com ]
Full list of resources:
 fence-vm1      (stonith:fence_xvm):    Started node2.example.com
 fence-vm2      (stonith:fence_xvm):    Started node1.example.com
 fence-vm3      (stonith:fence_xvm):    Started node3.example.com
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled
[root@node1 ~]# pcs stonith show
 fence-vm1      (stonith:fence_xvm):    Started node2.example.com
 fence-vm2      (stonith:fence_xvm):    Started node2.example.com
 fence-vm3      (stonith:fence_xvm):    Started node2.example.com

如果尚未安装gfs2-utils,lvm2-cluster,dlm,请在所有群集节点上安装

说明:

在RHEL系统上,我们必须具有RHN的有效订阅,或者我们可以配置本地脱机存储库,通过该本地脱机存储库,yum软件包管理器可以安装提供的rpm及其依赖项。

# yum -y install gfs2-utils lvm2-cluster dlm

将pcs属性更改为no-quorum-policy冻结。
此属性是必需的,因为它意味着群集节点在失去仲裁后将不执行任何操作,而这对于GFS2是必需的

# pcs property set no-quorum-policy=freeze

如果我们将默认设置保留为stop,则已挂载的GFS2文件系统将无法使用群集正确停止,这将导致整个群集被隔离。

配置DLM资源

"分布式块管理器"(也称为"受控")是集群的必需部分。
如果启动后它在监视器测试中失败,则需要对失败的节点进行防护,以保持群集的清洁。
这对于确保不会发生与设置为"冻结"的no-quorum政策相关的坏事情是必要的。

注意:与GFS2文件系统本身一样,必须在所有需要访问文件系统的节点上启动这些资源。
Pacemaker为此提供了克隆资源。
克隆手段可以应用于必须同时在多个节点上激活的任何资源。

[root@node1 ~]# pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true

检查电脑集群状态

[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: Sat Dec 29 10:57:58 2016
Last change: Sat Dec 29 10:57:52 2016 by root via cibadmin on node1.example.com
3 nodes configured
6 resources configured
Online: [ node1.example.com node2.example.com node3.example.com ]
Full list of resources:
 Clone Set: dlm-clone [dlm]
     Started: [ node1.example.com node2.example.com node3.example.com ]
 fence-vm1      (stonith:fence_xvm):    Started node2.example.com
 fence-vm2      (stonith:fence_xvm):    Started node2.example.com
 fence-vm3      (stonith:fence_xvm):    Started node2.example.com
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

因此,我们的dlmdlm-clone资源已在所有集群节点上正确启动。

配置CLVMD资源

  • 如果群集的多个节点需要同时对活动/活动系统中的LVM卷进行读/写访问,则必须使用CLVMD。

  • CLVMD提供了一个用于同时跨集群节点协调LVM卷的激活和更改的系统。

  • 当群集的各个节点与卷交互并更改其布局时,CLVMD的群集锁定服务可为LVM元数据提供保护。

要启用集群锁,请在" lvm.conf"中设置" locking_type = 3"。

[root@node1 ~]# grep locking_type /etc/lvm/lvm.conf | egrep -v '#'
    locking_type = 3

重要提示:这就是halvmclvm不兼容的原因,因为HALVM要求locking_type1,而CLVMD要求

locking_type3

我们可以使用以下命令动态更改此设置

# lvmconf --enable-cluster

禁用并停止lvm2-lvmetad服务

# systemctl disable lvm2-lvmetad --now

接下来创建clvmd资源

[root@node1 ~]# pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true

验证资源状态

[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: Sat Dec 29 10:57:58 2016
Last change: Sat Dec 29 10:57:52 2016 by root via cibadmin on node1.example.com
3 nodes configured
9 resources configured
Online: [ node1.example.com node2.example.com node3.example.com ]
Full list of resources:
 Clone Set: dlm-clone [dlm]
     Started: [ node1.example.com node2.example.com node3.example.com ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ node1.example.com node2.example.com node3.example.com ]
 fence-vm1      (stonith:fence_xvm):    Started node2.example.com
 fence-vm2      (stonith:fence_xvm):    Started node2.example.com
 fence-vm3      (stonith:fence_xvm):    Started node2.example.com
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

更改资源启动顺序

现在我们也需要托管约束。
这种共置约束,确保clvmd克隆始终与dlm克隆保持在一起。

[root@node1 ~]# pcs constraint order start dlm-clone then clvmd-clone
Adding dlm-clone clvmd-clone (kind: Mandatory) (Options: first-action=start then-action=start)
[root@node1 ~]# pcs constraint colocation add clvmd-clone with dlm-clone

在群集节点上设置共享存储

在上一篇文章中,我在所有群集节点上都使用了iscsi target,它将用于设置群集文件系统(GFS2)。

因此,连接到我的存储节点后,所有群集节点上都有/dev/sdc可用。

[root@node2 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0 Dec 29 09:47 /dev/sda
brw-rw---- 1 root disk 8,  1 Dec 29 09:47 /dev/sda1
brw-rw---- 1 root disk 8,  2 Dec 29 09:47 /dev/sda2
brw-rw---- 1 root disk 8, 16 Dec 29 09:47 /dev/sdb
brw-rw---- 1 root disk 8, 17 Dec 29 09:47 /dev/sdb1
brw-rw---- 1 root disk 8, 32 Dec 29 10:30 /dev/sdc

我将在我的一个集群节点上的"/dev/sdc"上设置逻辑卷。
相同的配置将自动同步到所有其他群集节点

[root@node1 ~]# pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created.
[root@node1 ~]# vgcreate -Ay -cy --shared vgclvm /dev/sdc
  Clustered volume group "vgclvm" successfully created

这里

  • -A | --autobackup y | n:指定更改后是否应自动备份元数据。

  • -c | --clustered y | n:如果LVM是在集群支持下编译的,则使用clvmd创建集群VG。
    这允许多个主机在共享设备上共享VG。
    clvmd和锁管理器必须已配置并正在运行。

显示可用的卷组

[root@node1 ~]# vgs
  VG     #PV #LV #SN Attr   VSize   VFree
  centos   2   2   0 wz--n- <17.52g 1020.00m
  vgclvm   1   0   0 wz--nc 992.00m  992.00m

使用我们的共享卷组创建新的逻辑卷

[root@node1 ~]# lvcreate -l 100%FREE -n lvcluster vgclvm
  Logical volume "lvcluster" created.

在逻辑卷上创建一个" GFS2"文件系统。

[root@node1 ~]# mkfs.gfs2 -j3 -p lock_dlm -t mycluster:gfs2fs /dev/vgclvm/lvcluster
/dev/vgclvm/lvcluster is a symbolic link to /dev/dm-2
This will destroy any data on /dev/dm-2
Are you sure you want to proceed? [y/n] y
Discarding device contents (Jan take a while on large devices): Done
Adding journals: Done
Building resource groups: Done
Creating quota file: Done
Writing superblock and syncing: Done
Device:                    /dev/vgclvm/lvcluster
Block size:                4096
Device size:               0.97 GB (253952 blocks)
Filesystem size:           0.97 GB (253951 blocks)
Journals:                  3
Journal size:              8MB
Resource groups:           7
Locking protocol:          "lock_dlm"
Lock table:                "mycluster:gfs2fs"
UUID:                      da1e5aa6-51a3-4512-ba79-3e325455007e

这里

  • -t clustername:fsname:用于指定锁定表的名称

  • -j nn:指定使用多少个日志(节点)

  • -J:允许指定日志大小。
    如果未指定,则日记的默认大小为128 MB。
    最小大小为8 MB(不推荐)

注意:在命令中," clustername"必须是起搏器群集名称,因为我已经使用了" mycluster",它是我的群集名称。

创建安装点并验证

现在,我们的逻辑卷已成功创建。
接下来让我们为文件系统创建挂载点

注意:在所有群集节点上手动创建此安装点

# mkdir /clusterfs

在为GFS2创建资源之前,让我们手动尝试验证lvcluster上的文件系统是否正常运行。

[root@node1 ~]# mount /dev/vgclvm/lvcluster /clusterfs/

验证相同

[root@node2 ~]# mount | grep clusterfs
/dev/mapper/vgclvm-lvcluster on /clusterfs type gfs2 (rw,noatime)

这样看来,lvm已成功安装。

创建GFS2FS群集资源

现在我们可以为GFS2文件系统的gfs2fs创建一个资源。

[root@node1 ~]# pcs resource create gfs2fs Filesystem device="/dev/vgclvm/lvcluster" directory="/clusterfs" fstype=gfs2 options=noatime op monitor interval=10s on-fail=fence clone interleave=true
Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')

验证集群状态

[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: Sat Dec 29 10:58:08 2016
Last change: Sat Dec 29 10:57:52 2016 by root via cibadmin on node1.example.com
3 nodes configured
12 resources configured
Online: [ node1.example.com node2.example.com node3.example.com ]
Full list of resources:
 Clone Set: dlm-clone [dlm]
     Started: [ node1.example.com node2.example.com node3.example.com ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ node1.example.com node2.example.com node3.example.com ]
 fence-vm1      (stonith:fence_xvm):    Started node2.example.com
 fence-vm2      (stonith:fence_xvm):    Started node2.example.com
 fence-vm3      (stonith:fence_xvm):    Started node2.example.com
 Clone Set: gfs2fs-clone [gfs2fs]
     Started: [ node1.example.com node2.example.com node3.example.com ]
Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

因此,我们的gfs2fs服务会在所有集群节点上自动启动。

现在,为GFS2和CLVMD安排资源启动顺序,以便在节点重新引导后以正确的顺序启动服务,否则服务将无法启动

[root@node1 ~]# pcs constraint order start clvmd-clone then gfs2fs-clone
Adding clvmd-clone gfs2fs-clone (kind: Mandatory) (Options: first-action=start then-action=start)
[root@node1 ~]# pcs constraint colocation add gfs2fs-clone with clvmd-clone

使用GFS2文件系统验证我们的集群

现在,由于我们的资源/服务在群集节点上正常运行。
让我们在一个群集节点上创建一个文件。

[root@node1 ~]# cd /clusterfs/
[root@node1 clusterfs]# touch file

现在连接到任何其他群集节点,并且该文件也应该存在于该位置。

[root@node2 ~]# ls /clusterfs/
file

因此,带有GFS2文件系统配置的群集可以按预期工作。