CentOS 7
Sponsored Link

Pacemaker : CLVM + GFS2
2015/07/08
 
CLVM + GFS2 による共有ストレージを利用したクラスター環境の設定です。
ここでは例として、以下のようなクラスター環境を構築します。
                        +--------------------+
                        | [ Shared Storage ] |
                        |   ISCSI Target     |
                        +---------+----------+
                         10.0.0.30|
                                  |
+----------------------+          |          +----------------------+
| [       Node01     ] |10.0.0.51 | 10.0.0.52| [       Node02     ] |
|   node01.srv.world   +----------+----------+   node02.srv.world   |
|         CLVM         |                     |          CLVM        |
+----------------------+                     +----------------------+

[1]
[2]
こちらを参考に、共有ストレージとするサーバーにストレージを作成しておきます。
ストレージは、通常のデータ共有用とフェンスデバイス用の 2デバイスを準備します。
当例では、データ共有に iqn.2015-07.world.srv:storage.target01 を 20G,
フェンスデバイスに iqn.2015-07.world.srv:fence.target00 を1G で作成しています。
さらにクラスターの各ノードがアクセスできるよう両デバイスに ACL を設定しています。
[3]
こちらを参考に、クラスターの全ノードで ISCSI イニシエーターとしての設定を実施しておきます。
設定はターゲットへのログインまでで、ストレージサーバーからのデータ共有用デバイスとフェンスデバイスが認識できれば OK です。
[4] クラスターの全ノードに追加で必要なパッケージをインストールします。
[root@node01 ~]#
yum -y install fence-agents-all lvm2-cluster gfs2-utils
[root@node01 ~]#
lvmconf --enable-cluster

[root@node01 ~]#
reboot

[5] フェンスデバイスを設定します。いずれかのノード上で設定すれば OK です。 なお、以下で設定している /dev/sda はストレージサーバーから提供されているフェンスデバイス用ディスクを指定しています。
# フェンスデバイス用ディスク確認 (当例では sda に割り当てられている)

[root@node01 ~]#
cat /proc/partitions

major minor  #blocks  name
.....
.....
 253        2    1048576 dm-2
   8        0    1048576 sda
   8       16   20971520 sdb

# ディスクの ID を確認

[root@node01 ~]#
ll /dev/disk/by-id | grep sda

lrwxrwxrwx 1 root root  9 Jul 10 11:44 scsi-36001405189b893893594dffb3a2cb3e9 -> ../../sda
lrwxrwxrwx 1 root root  9 Jul 10 11:44 wwn-0x6001405189b893893594dffb3a2cb3e9 -> ../../sda

[root@node01 ~]#
pcs stonith create scsi-shooter fence_scsi devices=/dev/disk/by-id/wwn-0x6001405189b893893594dffb3a2cb3e9 meta provides=unfencing
[root@node01 ~]#
pcs property set no-quorum-policy=freeze

[root@node01 ~]#
pcs stonith show scsi-shooter

 Resource: scsi-shooter (class=stonith type=fence_scsi)
  Attributes: devices=/dev/disk/by-id/wwn-0x6001405189b893893594dffb3a2cb3e9
  Meta Attrs: provides=unfencing
  Operations: monitor interval=60s (scsi-shooter-monitor-interval-60s)
[6] 必要なリソースを追加します。いずれかのノード上で設定すれば OK です。
[root@node01 ~]#
pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true

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

[root@node01 ~]#
pcs constraint order start dlm-clone then clvmd-clone

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

[root@node01 ~]#
pcs status resources

 Clone Set: dlm-clone [dlm]
     Started: [ node01.srv.world node02.srv.world ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ node01.srv.world node02.srv.world ]
[7] 共有ストレージ用のデバイスにボリュームを作成し、GFS2 ファイルシステムでフォーマットします。いずれかのノード上で設定すれば OK です。 当例の場合、事前に sdb として認識されている共有ストレージ用デバイスに fdisk で パーティションを作成し、パーティションタイプを LVM に設定しています
[root@node01 ~]#
pvcreate /dev/sdb1

Physical volume "/dev/sdb1" successfully created
# クラスター用ボリュームグループ作成

[root@node01 ~]#
vgcreate -cy vg_cluster /dev/sdb1

Clustered volume group "vg_cluster" successfully created
[root@node01 ~]#
lvcreate -l100%FREE -n lv_cluster vg_cluster

Logical volume "lv_cluster" created.
[root@node01 ~]#
mkfs.gfs2 -p lock_dlm -t ha_cluster:gfs2 -j 2 /dev/vg_cluster/lv_cluster

/dev/vg_cluster/lv_cluster is a symbolic link to /dev/dm-3
This will destroy any data on /dev/dm-3
Are you sure you want to proceed? [y/n]
y

Device:                    /dev/vg_cluster/lv_cluster
Block size:                4096
Device size:               0.99 GB (260096 blocks)
Filesystem size:           0.99 GB (260092 blocks)
Journals:                  2
Resource groups:           5
Locking protocol:          "lock_dlm"
Lock table:                "ha_cluster:gfs2"
UUID:                      cdda1b15-8c57-67a1-481f-4ad3bbeb1b2f
[8] 共有ストレージをリソースに追加します。いずれかのノード上で設定すれば OK です。
[root@node01 ~]#
pcs resource create fs_gfs2 Filesystem \
device="/dev/vg_cluster/lv_cluster" directory="/mnt" fstype="gfs2" \
options="noatime,nodiratime" op monitor interval=10s on-fail=fence clone interleave=true
[root@node01 ~]#
pcs resource show

 Clone Set: dlm-clone [dlm]
     Started: [ node01.srv.world ]
     Stopped: [ node02.srv.world ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ node01.srv.world ]
     Stopped: [ node02.srv.world ]
 Clone Set: fs_gfs2-clone [fs_gfs2]
     Started: [ node01.srv.world ]

[root@node01 ~]#
pcs constraint order start clvmd-clone then fs_gfs2-clone

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

[root@node01 ~]#
pcs constraint show

Location Constraints:
Ordering Constraints:
  start dlm-clone then start clvmd-clone (kind:Mandatory)
  start clvmd-clone then start fs_gfs2-clone (kind:Mandatory)
Colocation Constraints:
  clvmd-clone with dlm-clone (score:INFINITY)
  fs_gfs2-clone with clvmd-clone (score:INFINITY)
[9] 以上で設定完了です。アクティブノード側で以下のように設定したデバイスが GFS2 でマウントされているか、アクティブノードをダウンさせるとマウントが別ノードに正常に切り替わるか 等々を確認しておきます。
[root@node01 ~]#
df -hT

Filesystem                        Type      Size  Used Avail Use% Mounted on
/dev/mapper/centos-root           xfs        27G  1.1G   26G   4% /
devtmpfs                          devtmpfs  2.0G     0  2.0G   0% /dev
tmpfs                             tmpfs     2.0G   76M  1.9G   4% /dev/shm
tmpfs                             tmpfs     2.0G  8.4M  2.0G   1% /run
tmpfs                             tmpfs     2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda1                         xfs       497M  126M  371M  26% /boot
/dev/mapper/vg_cluster-lv_cluster gfs2     1016M  259M  758M  26% /mnt
 
Tweet