CentOS Stream 9
Sponsored Link

Pacemaker : GFS2 ファイルシステムを設定する2023/12/05

 
クラスターリソースに GFS2 ファイルシステムを設定します。
当例では以下のような環境で設定します。事前に下記の項目を設定済みであることが前提です。
  1) クラスターの基本構成を設定済み
  2) フェンスデバイスを設定済み
                        +--------------------+
                        | [  ISCSI Target  ] |
                        |    dlp.srv.world   |
                        +---------+----------+
                         10.0.0.30|
                                  |
+----------------------+          |          +----------------------+
| [  Cluster Node#1  ] |10.0.0.51 | 10.0.0.52| [  Cluster Node#2  ] |
|   node01.srv.world   +----------+----------+   node02.srv.world   |
|                      |                     |                      |
+----------------------+                     +----------------------+

[1]
こちらを参考に、ISCSI ターゲットに GFS2 ファイルシステム用の共有ストレージを作成しておきます
当例では、IQN (iSCSI Qualified Name) を [iqn.2021-06.world.srv:dlp.target02] として [10G] のストレージを設定しています。
[2] クラスターを構成する全ノードで、必要なパッケージをインストールして LVM の設定を変更します。
# [HighAvailability, ResilientStorage] リポジトリを有効にしてインストール (デフォルトは無効)

[root@node01 ~]#
dnf --enablerepo=highavailability,resilientstorage -y install lvm2-lockd gfs2-utils dlm
[root@node01 ~]#
vi /etc/lvm/lvm.conf
# 1172行目 : コメント解除して変更

use_lvmlockd =
1
[3] クラスターのいずれかのノード上で、GFS2 ファイルシステムに必要な DLM リソースを設定します。
# GFS2 では [no-quorum-policy=freeze]

[root@node01 ~]#
pcs property set no-quorum-policy=freeze
# controld リソース作成
# [dlm] ⇒ 任意の名称
# [group] ⇒ 任意のグループ名

[root@node01 ~]#
pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence group locking --future
# クラスター内の全ノードでリソースがアクティブになるよう [locking] のクローンを作成

[root@node01 ~]#
pcs resource clone locking interleave=true
# lvmlockd リソース作成
# [lvmlockdd] ⇒ 任意の名称
# [group] ⇒ controld リソースと同じグループ

[root@node01 ~]#
pcs resource create lvmlockdd ocf:heartbeat:lvmlockd op monitor interval=30s on-fail=fence group locking --future
# ステータス確認
# 全て [Started] であれば OK

[root@node01 ~]#
pcs status --full

Cluster name: ha_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: node02.srv.world (2) (version 2.1.6-10.1.el9-6fdc9deea29) - partition with quorum
  * Last updated: Tue Dec  5 12:45:00 2023 on node01.srv.world
  * Last change:  Tue Dec  5 12:44:49 2023 by root via cibadmin on node01.srv.world
  * 2 nodes configured
  * 6 resource instances configured

Node List:
  * Node node01.srv.world (1): online, feature set 3.17.4
  * Node node02.srv.world (2): online, feature set 3.17.4

Full List of Resources:
  * scsi-shooter        (stonith:fence_scsi):    Started node01.srv.world
  * Resource Group: ha_group:
    * lvm_ha    (ocf:heartbeat:LVM-activate):    Started node01.srv.world
  * Clone Set: locking-clone [locking]:
    * Resource Group: locking:0:
      * dlm     (ocf:pacemaker:controld):        Started node01.srv.world
      * lvmlockdd       (ocf:heartbeat:lvmlockd):        Started node01.srv.world
    * Resource Group: locking:1:
      * dlm     (ocf:pacemaker:controld):        Started node02.srv.world
      * lvmlockdd       (ocf:heartbeat:lvmlockd):        Started node02.srv.world

Migration Summary:

Fencing History:
  * unfencing of node01.srv.world successful: delegate=node01.srv.world, client=pacemaker-controld.4616, origin=node02.srv.world, completed='2023-12-05 11:15:32.582894 +09:00'
  * unfencing of node02.srv.world successful: delegate=node02.srv.world, client=pacemaker-fenced.4606, origin=node01.srv.world, completed='2023-12-05 11:15:32.564894 +09:00'

Tickets:

PCSD Status:
  node01.srv.world: Online
  node02.srv.world: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled
[4] クラスターのいずれかのノード上で、共有ストレージ上に 共有ボリュームグループ を設定します。
下例の [sdb] は ISCSI ターゲット サーバーの共有ストレージです。
# ディスカバー

[root@node01 ~]#
iscsiadm -m discovery -t sendtargets -p 10.0.0.30

10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target01
10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target02
# ログイン

[root@node01 ~]#
iscsiadm -m node --login --target iqn.2022-01.world.srv:dlp.target02
[root@node01 ~]#
iscsiadm -m session -o show

tcp: [1] 10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target01 (non-flash)
tcp: [2] 10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target02 (non-flash)
# 共有ストレージに LVM タイプをセット

[root@node01 ~]#
parted --script /dev/sdb "mklabel gpt"

[root@node01 ~]#
parted --script /dev/sdb "mkpart primary 0% 100%"

[root@node01 ~]#
parted --script /dev/sdb "set 1 lvm on"
# 物理ボリューム作成

[root@node01 ~]#
pvcreate /dev/sdb1

  Physical volume "/dev/sdb1" successfully created.

# 共有ボリュームグループ作成

[root@node01 ~]#
vgcreate --shared vg_gfs2 /dev/sdb1

  Volume group "vg_gfs2" successfully created
  VG vg_gfs2 starting dlm lockspace
  Starting locking.  Waiting until locks are ready...
[5] [5] で 共有ボリュームグループ を設定していない方のノード上で、共有ボリュームグループのロックマネージャーを起動します。
[root@node02 ~]#
iscsiadm -m discovery -t sendtargets -p 10.0.0.30

10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target01
10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target02
[root@node02 ~]#
iscsiadm -m node --login --target iqn.2022-01.world.srv:dlp.target02
[root@node02 ~]#
iscsiadm -m session -o show

tcp: [1] 10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target01 (non-flash)
tcp: [2] 10.0.0.30:3260,1 iqn.2022-01.world.srv:dlp.target02 (non-flash)
[root@node02 ~]#
lvmdevices --adddev /dev/sdb1

[root@node02 ~]#
vgchange --lock-start vg_gfs2

  VG vg_gfs2 starting dlm lockspace
  Starting locking.  Waiting until locks are ready...
[root@node02 ~]#
vgs

  VG      #PV #LV #SN Attr   VSize   VFree
  cs        1   2   0 wz--n- <29.00g     0
  vg_gfs2   1   0   0 wz--ns  <9.98g <9.98g
[6] 共有ボリュームグループを作成したノードに戻って、論理ボリュームを作成し GFS2 ファイルシステムを設定します。
# 論理ボリューム作成

[root@node01 ~]#
lvcreate -l 100%FREE -n lv_gfs2 vg_gfs2

  Logical volume "lv_gfs2" created.

# GFS2 でフォーマット

[root@node01 ~]#
mkfs.gfs2 -j2 -p lock_dlm -t ha_cluster:gfs2-01 /dev/vg_gfs2/lv_gfs2

This will destroy any data on /dev/dm-3
Are you sure you want to proceed? [y/n] y
Discarding device contents (may 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/vg_gfs2/lv_gfs2
Block size:                4096
Device size:               9.98 GB (2615296 blocks)
Filesystem size:           9.98 GB (2615293 blocks)
Journals:                  2
Journal size:              32MB
Resource groups:           42
Locking protocol:          "lock_dlm"
Lock table:                "ha_cluster:gfs2-01"
UUID:                      1f5ed3d1-4785-4ecd-bc02-02c282bac54f

# LVM-activate リソース作成
# [shared_lv] ⇒ 任意の名称
# [group] ⇒ 任意のグループ名

[root@node01 ~]#
pcs resource create shared_lv ocf:heartbeat:LVM-activate lvname=lv_gfs2 vgname=vg_gfs2 activation_mode=shared vg_access_mode=lvmlockd group shared_vg --future
# [LVM-activate] リソースのクローンを作成

[root@node01 ~]#
pcs resource clone shared_vg interleave=true
# [locking] → [shared_vg] の起動順序に設定

[root@node01 ~]#
pcs constraint order start locking-clone then shared_vg-clone

Adding locking-clone shared_vg-clone (kind: Mandatory) (Options: first-action=start then-action=start)
# [shared_vg] と [locking] が同一ノードで起動するように設定

[root@node01 ~]#
pcs constraint colocation add shared_vg-clone with locking-clone
# Filesystem リソース作成
# [shared_fs] ⇒ 任意の名称
# [device] ⇒ GFS2 でフォーマットしたデバイス
# [directory] ⇒ GFS2 をマウントしたい任意のディレクトリ
# [group] ⇒ LVM-activate リソースと同じグループ

[root@node01 ~]#
pcs resource create shared_fs ocf:heartbeat:Filesystem device="/dev/vg_gfs2/lv_gfs2" directory="/home/gfs2-share" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence group shared_vg --future
# ステータス確認
# 全て [Started] であれば OK

[root@node01 ~]#
pcs status --full

Cluster name: ha_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: node02.srv.world (2) (version 2.1.6-10.1.el9-6fdc9deea29) - partition with quorum
  * Last updated: Tue Dec  5 13:11:43 2023 on node01.srv.world
  * Last change:  Tue Dec  5 13:11:19 2023 by root via cibadmin on node01.srv.world
  * 2 nodes configured
  * 10 resource instances configured

Node List:
  * Node node01.srv.world (1): online, feature set 3.17.4
  * Node node02.srv.world (2): online, feature set 3.17.4

Full List of Resources:
  * scsi-shooter        (stonith:fence_scsi):    Started node01.srv.world
  * Resource Group: ha_group:
    * lvm_ha    (ocf:heartbeat:LVM-activate):    Started node01.srv.world
  * Clone Set: locking-clone [locking]:
    * Resource Group: locking:0:
      * dlm     (ocf:pacemaker:controld):        Started node01.srv.world
      * lvmlockdd       (ocf:heartbeat:lvmlockd):        Started node01.srv.world
    * Resource Group: locking:1:
      * dlm     (ocf:pacemaker:controld):        Started node02.srv.world
      * lvmlockdd       (ocf:heartbeat:lvmlockd):        Started node02.srv.world
  * Clone Set: shared_vg-clone [shared_vg]:
    * Resource Group: shared_vg:0:
      * shared_lv       (ocf:heartbeat:LVM-activate):    Started node01.srv.world
      * shared_fs       (ocf:heartbeat:Filesystem):      Started node01.srv.world
    * Resource Group: shared_vg:1:
      * shared_lv       (ocf:heartbeat:LVM-activate):    Started node02.srv.world
      * shared_fs       (ocf:heartbeat:Filesystem):      Started node02.srv.world

Migration Summary:

Fencing History:
  * unfencing of node01.srv.world successful: delegate=node01.srv.world, client=pacemaker-controld.4616, origin=node02.srv.world, completed='2023-12-05 11:15:32.582894 +09:00'
  * unfencing of node02.srv.world successful: delegate=node02.srv.world, client=pacemaker-fenced.4606, origin=node01.srv.world, completed='2023-12-05 11:15:32.564894 +09:00'

Tickets:

PCSD Status:
  node01.srv.world: Online
  node02.srv.world: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

# 両方のノードで設定したディレクトリに GFS2 ファイルシステムがマウントされていれば OK

[root@node01 ~]#
df -hT /home/gfs2-share

Filesystem                  Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg_gfs2-lv_gfs2 gfs2   10G   67M   10G   1% /home/gfs2-share

[root@node02 ~]#
df -hT /home/gfs2-share

Filesystem                  Type  Size  Used Avail Use% Mounted on
/dev/mapper/vg_gfs2-lv_gfs2 gfs2   10G   67M   10G   1% /home/gfs2-share
関連コンテンツ