はじめに
Red Hat Enterprise Linux 7 の High Availability アドオンについて、クラスタ内で共有ストレージを利用できるようリソース設定する例を記載します。
前提
環境
- クラスタノード1
- OS:Red Hat Enterprise Linux 7.3
- ホスト名:ha01
- IP アドレス:192.168.139.133
- クラスタノード2
- OS:Red Hat Enterprise Linux 7.3
- ホスト名:ha02
- IP アドレス:192.168.139.134
- 共有ストレージ
- iSCSI デバイスを使用(Red Hat マシンを使用)
- クラスタの構築とフェンスデバイスの設定までは完了している状態をスタート地点とする
- クラスタ構築手順についてはこちらの記事参照
- フェンスデバイスの設定手順についてはこちらの記事参照
- フェンスデバイスについては存在しない環境で検証しているため、以降の例ではエラーが出ていますが無視してください
実装する内容
- 共有ストレージとして利用できるリソースを作成し、そのリソースが起動しているノードでのみ共有ストレージにアクセスできるようにする、アクティブ/スタンバイな構成とする
- フローティング IP アドレスリソースを作成して共有ストレージのリソースとグループ化し、アクティブなノードにアクセスできるようにする
共有ストレージに論理ボリュームを作成する
この項の作業はいずれか一つのノードでのみ実施します
共有ストレージに論理ボリュームを作成します。
以下の通り iSCSI デバイス(共有ストレージ)は /dev/sdb
です。
[root@ha01 ~]# fdisk /dev/sdb
NAME HCTL TYPE VENDOR MODEL REV TRAN
sda 32:0:0:0 disk VMware, VMware Virtual S 1.0 spi
sdb 33:0:0:0 disk LIO-ORG lun0 4.0 iscsi
sr0 3:0:0:0 rom NECVMWar VMware SATA CD01 1.00 sata
まず fdisk
コマンドでパーティションを作成します。
[root@ha01 ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
コマンド (m でヘルプ): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
パーティション番号 (1-4, default 1):
最初 sector (8192-62906367, 初期値 8192):
初期値 8192 を使います
Last sector, +sectors or +size{K,M,G} (8192-62906367, 初期値 62906367):
初期値 62906367 を使います
Partition 1 of type Linux and of size 30 GiB is set
コマンド (m でヘルプ): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'
コマンド (m でヘルプ): p
Disk /dev/sdb: 32.2 GB, 32208060416 bytes, 62906368 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 4194304 バイト
Disk label type: dos
ディスク識別子: 0xe56e26e1
デバイス ブート 始点 終点 ブロック Id システム
/dev/sdb1 8192 62906367 31449088 8e Linux LVM
コマンド (m でヘルプ): w
パーティションテーブルは変更されました!
ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。
[root@ha01 ~]#
次に pvcreate
コマンドで /dev/sdb1
上に物理ボリュームを作成します。
[root@ha01 ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
次に vgcreate
コマンドを使用してボリュームグループ my_vg
を作成します。
[root@ha01 ~]# vgcreate my_vg /dev/sdb1
Volume group "my_vg" successfully created
最後にlvcreate
コマンドを使用して論理ボリュームmy_vg
を作成します。なお、サイズは空き容量全てとしています。
[root@ha01 ~]# lvcreate -l 100%FREE -n my_lv my_vg
Logical volume "my_lv" created.
lvs
コマンドで論理ボリュームを表示してみます。
[root@ha01 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
my_lv my_vg -wi-a----- <29.99g
root rhel -wi-ao---- <26.00g
swap rhel -wi-ao---- 3.00g
mkfs.ext4
コマンドでファイルシステムを作成します。
[root@ha01 ~]# mkfs.ext4 /dev/my_vg/my_lv
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=1024 blocks
1966080 inodes, 7861248 blocks
393062 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2155872256
240 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: done
Writing inode tables: done
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done
共有ストレージの確認
この項の作業はいずれか一つのノードでのみ実施します
共有ストレージをマウントして後々の確認用でサンプルファイルを作成しておきます。
マウントポイントとなるディレクトリを作成します。/iscsi
にマウントすることとします。
[root@ha01 ~]# mkdir /iscsi
/iscsi
に /dev/my_vg/my_lv
をマウントします。
[root@ha01 ~]# mount /dev/my_vg/my_lv /iscsi
共有ストレージ内に空ファイル hoge.piyo
を作成します。
[root@ha01 ~]# touch /iscsi/hoge.piyo
[root@ha01 ~]# ls -l /iscsi
合計 16
-rw-r--r--. 1 root root 0 8月 13 14:18 hoge.piyo
drwx------. 2 root root 16384 8月 13 14:08 lost+found
マウントを解除し、物理ボリュームを非アクティブ化します。
[root@ha01 ~]# umount /dev/my_vg/my_lv
[root@ha01 ~]# vgchange -an my_vg
0 logical volume(s) in volume group "my_vg" now active
ボリュームグループのアクティブ化をクラスタ内に限定する設定
この項の設定はすべてのノードで実施します
LVM ボリュームグループを設定して、クラスタ内のみでボリュームグループをアクティブ化でき(クラスタリソースとしてのみアクティブ化でき)、クラスタ外(個々のノードにおける設定として)ではアクティブ化されないようにします。
/etc/lvm/lvm.conf の設定
まず、以下コマンドを実行します。
lvmconf --enable-halvm --services --startstopservices
[root@ha01 ~]# lvmconf --enable-halvm --services --startstopservices
Warning: Stopping lvm2-lvmetad.service, but it can still be activated by:
lvm2-lvmetad.socket
このコマンドの効果は以下です。
/etc/lvm/lvm.conf
ファイルのlocking_type
が 1 に設定される/etc/lvm/lvm.conf
ファイルのuse_lvmetad
が 0 に設定される- すべての
lvmetad
プロセスがすぐに無効になり、停止される
次に、以下コマンドを実行しボリュームグループ一覧を確認します。
vgs --noheadings -o vg_name
[root@ha01 ~]# vgs --noheadings -o vg_name
my_vg
rhel
リストの中の共有ストレージに対応するボリュームグループ以外を /etc/lvm/lvm.conf
ファイルの volume_list
項目の設定値として使用します。/etc/lvm/lvm.conf
に対して、以下の通り記載します。(記載位置の参考のため、前後のコメントアウト行も掲載しています。)
# Example
# volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
#
# This configuration option does not have a default value defined.
volume_list = [ "rhel" ]
# Configuration option activation/auto_activation_volume_list.
# Only LVs selected by this list are auto-activated.
# This list works like volume_list, but it is used only by
記載対象のボリュームグループが複数ある場合は以下の様にカンマで区切ります。
volume_list = [ "rhel_root", "rhel_home" ]
initramfs 起動イメージの再構築
ノードの起動イメージがクラスタで制御しているボリュームグループを作動させないように initramfs
起動イメージを再構築します。次のコマンドで initramfs
デバイスを更新します。このコマンドは完了までに 1 分ほどかかる場合があります。
dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
[root@ha01 ~]# dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
ノードの再起動
ここまでの設定ができたら対象ノードを再起動させます。
[root@ha01 ~]# shutdown -r now
クラスタリソースの設定
この項の作業はいずれか一つのノードでのみ実施します
クラスタのリソースを作成します。なお、ここで作成する各リソースをリソースグループ myGroup
に所属させることにします。
ボリュームグループリソースの作成
以下コマンドでボリュームグループリソースを作成します。
pcs resource create リソース名 LVM volgrpname=ボリュームグループ名 exclusive=true --group リソースグループ名
exclusive=true
パラメーターを指定することで、クラスタのみが LVM 論理ボリュームをアクティブ化できるようにします
[root@ha01 ~]# pcs resource create my_lvm LVM volgrpname=my_vg exclusive=true --group myGroup
Assumed agent name 'ocf:heartbeat:LVM' (deduced from 'LVM')
作成したリソースが起動していることを確認します。
[root@ha01 ~]# pcs status
Cluster name: my_cluster
Stack: corosync
Current DC: ha02 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Aug 13 15:02:03 2020
Last change: Thu Aug 13 14:58:50 2020 by root via cibadmin on ha01
2 nodes configured
2 resources configured
Online: [ ha01 ha02 ]
Full list of resources:
myapc (stonith:fence_apc_snmp): Stopped
Resource Group: myGroup
my_lvm (ocf::heartbeat:LVM): Started ha01
Failed Resource Actions:
* myapc_start_0 on ha01 'unknown error' (1): call=6, status=Error, exitreason='',
last-rc-change='Thu Aug 13 14:49:10 2020', queued=0ms, exec=13436ms
* myapc_start_0 on ha02 'unknown error' (1): call=32, status=Error, exitreason='',
last-rc-change='Thu Aug 13 11:38:46 2020', queued=0ms, exec=13425ms
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
※myapc はフェンスエージェントのリソースです。エラーとなっていますが無視してください
ファイルシステムリソースの作成
以下コマンドでファイルシステムリソースを作成します。
pcs resource create リソース名 Filesystem device=論理ボリュームのパス directory=マウントポイント fstype=ext4 --group グループ名
[root@ha01 ~]# pcs resource create my_fs Filesystem device=/dev/my_vg/my_lv directory=/iscsi fstype=ext4 --group myGroup
Assumed agent name 'ocf:heartbeat:Filesystem' (deduced from 'Filesystem')
作成したリソースが起動していることを確認します。
[root@ha01 ~]# pcs status
Cluster name: my_cluster
Stack: corosync
Current DC: ha02 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Aug 13 15:09:18 2020
Last change: Thu Aug 13 15:09:14 2020 by root via cibadmin on ha01
2 nodes configured
3 resources configured
Online: [ ha01 ha02 ]
Full list of resources:
myapc (stonith:fence_apc_snmp): Stopped
Resource Group: myGroup
my_lvm (ocf::heartbeat:LVM): Started ha01
my_fs (ocf::heartbeat:Filesystem): Started ha01
Failed Resource Actions:
* myapc_start_0 on ha01 'unknown error' (1): call=6, status=Error, exitreason='',
last-rc-change='Thu Aug 13 14:49:10 2020', queued=0ms, exec=13436ms
* myapc_start_0 on ha02 'unknown error' (1): call=32, status=Error, exitreason='',
last-rc-change='Thu Aug 13 11:38:46 2020', queued=0ms, exec=13425ms
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
この時点で、リソースを持つノードで共有ストレージがマウントされます。
[root@ha01 ~]# mount | grep my_lv
/dev/mapper/my_vg-my_lv on /iscsi type ext4 (rw,relatime,seclabel,stripe=1024,data=ordered)
[root@ha01 ~]# ls -l /iscsi/
合計 16
-rw-r--r--. 1 root root 0 8月 13 14:18 hoge.piyo
drwx------. 2 root root 16384 8月 13 14:08 lost+found
フローティング IP アドレスリソースの作成
以下コマンドでフローティング IP アドレスリソースを作成します。
pcs resource create リソース名 IPaddr2 ip=IPアドレス cidr_netmask=プレフィックス --group リソースグループ名
[root@ha01 ~]# pcs resource create my_ip IPaddr2 ip=192.168.139.200 cidr_netmask=24 --group myGroup
Assumed agent name 'ocf:heartbeat:IPaddr2' (deduced from 'IPaddr2')
作成したリソースが起動していることを確認します。
[root@ha01 ~]# pcs status
Cluster name: my_cluster
Stack: corosync
Current DC: ha02 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Aug 13 15:24:09 2020
Last change: Thu Aug 13 15:23:43 2020 by root via cibadmin on ha01
2 nodes configured
4 resources configured
Online: [ ha01 ha02 ]
Full list of resources:
myapc (stonith:fence_apc_snmp): Stopped
Resource Group: myGroup
my_lvm (ocf::heartbeat:LVM): Started ha01
my_fs (ocf::heartbeat:Filesystem): Started ha01
my_ip (ocf::heartbeat:IPaddr2): Started ha01
Failed Resource Actions:
* myapc_start_0 on ha01 'unknown error' (1): call=6, status=Error, exitreason='',
last-rc-change='Thu Aug 13 14:49:10 2020', queued=0ms, exec=13436ms
* myapc_start_0 on ha02 'unknown error' (1): call=32, status=Error, exitreason='',
last-rc-change='Thu Aug 13 11:38:46 2020', queued=0ms, exec=13425ms
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
以上でリソースの作成は完了です。
動作確認
フローティング IP アドレスへの疎通確認
クラスタ外の端末からフローティング IP アドレスへ ping を打ってみます。
C:\WINDOWS\system32>ping 192.168.139.200
192.168.139.200 に ping を送信しています 32 バイトのデータ:
192.168.139.200 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.139.200 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.139.200 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.139.200 からの応答: バイト数 =32 時間 <1ms TTL=64
192.168.139.200 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
疎通確認ができました。
ボリュームグループの操作権限確認
ha01 がリソースグループを持っている状態で、ha02 にて共有ストレージをマウントできるかを確認します。
[root@ha02 ~]# mount /dev/my_vg/my_lv /iscsi
mount: special device /dev/my_vg/my_lv does not exist
設計の通り、マウントできない状態であることが確認できます。
フェイルオーバー確認
クラスタノード ha01 を standby 状態にして、リソースが ha02 に移動することを確認します。
[root@ha01 ~]# pcs cluster standby
[root@ha01 ~]# pcs status
Cluster name: my_cluster
Stack: corosync
Current DC: ha02 (version 1.1.21-4.el7-f14e36fd43) - partition with quorum
Last updated: Thu Aug 13 15:31:53 2020
Last change: Thu Aug 13 15:31:43 2020 by root via cibadmin on ha01
2 nodes configured
4 resources configured
Node ha01: standby
Online: [ ha02 ]
Full list of resources:
myapc (stonith:fence_apc_snmp): Stopped
Resource Group: myGroup
my_lvm (ocf::heartbeat:LVM): Started ha02
my_fs (ocf::heartbeat:Filesystem): Started ha02
my_ip (ocf::heartbeat:IPaddr2): Started ha02
Failed Resource Actions:
* myapc_start_0 on ha01 'unknown error' (1): call=6, status=Error, exitreason='',
last-rc-change='Thu Aug 13 14:49:10 2020', queued=0ms, exec=13436ms
* myapc_start_0 on ha02 'unknown error' (1): call=32, status=Error, exitreason='',
last-rc-change='Thu Aug 13 11:38:46 2020', queued=0ms, exec=13425ms
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
各リソースが ha02 に移動していることが確認できます。
ha01 のマウント状況です。共有ストレージがアンマウントされています。
[root@ha01 ~]# mount | grep my_lv
[root@ha01 ~]#
[root@ha01 ~]# ls -l /iscsi/
合計 0
ha02 のマウント状況です。共有ストレージがマウントされています。
[root@ha02 ~]# mount | grep my_lv
/dev/mapper/my_vg-my_lv on /iscsi type ext4 (rw,relatime,seclabel,stripe=1024,data=ordered)
[root@ha02 ~]# ls -l /iscsi/
合計 16
-rw-r--r--. 1 root root 0 8月 13 14:18 hoge.piyo
drwx------. 2 root root 16384 8月 13 14:08 lost+found
以上です。
参考資料

―――――――――――――