DRBDクラスターの落とし穴

おつかれさまです!Dです。

またまたクラスター構成(PacemakerやDRBD)についての記事になります。

何気なく構築すると思わずハマりそうなことだったので、実際に挙動を試してみました。

それではやっていきましょう。

内容

OSは前回同様にRHEL8で2台構成でマスター、スレーブ構成になります。

マスターがダウンすると、スレーブ側がマスターに切り替わって
サービスを引き継いてダウンタイムを減らすといったイメージになります。

今回は先に結論から伝えてから検証していきます。DRBD領域で利用するフォルダやファイルの権限のUIDを1号機、2号機で合わせておく必要があります。これを合わせていないと1号機がダウンし2号機に切り替わった際に思わぬトラブルになります。

字面で書くとなかなかイメージが難しいと思うので、実際に試していきましょう。

hogehogeというユーザー名は同じですがUIDは別の値になっています。

〇1号機

# id hogehoge
uid=1001(hogehoge) gid=1001(hogehoge) groups=1001(hogehoge)


〇2号機

# id hogehoge
uid=2001(hogehoge) gid=2001(hogehoge) groups=2001(hogehoge)

「/data」配下がDRBD領域なのですが、そこにテストファイルを作成しhogehogeの所有者に変更します。※1号機にて

----------------------------------
# cd /data
# vi testUID
---------------
test
---------------

# chown hogehoge: testUID
----------------------------------

この状態で1号機のクラスターを停止し、2号機へフェイルオーバーさせます。
ステータスも確認すると、2号機に正常にフェイルオーバーされているようです。

# pcs cluster stop

Stopping Cluster (pacemaker)...
Stopping Cluster (corosync)...

※2号機にて実行

# pcs status

Cluster name: db_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: db2 (version 2.1.6-8.el8-6fdc9deea29) - partition with quorum
  * Last updated: Mon Dec 11 19:54:32 2023 on db2
  * Last change:  Mon Dec 11 19:51:56 2023 by hacluster via crmd on db1
  * 2 nodes configured
  * 3 resource instances configured

Node List:
  * Online: [ db2 ]
  * OFFLINE: [ db1 ]

Full List of Resources:
  * Resource Group: db-ha:
    * filesystem        (ocf::heartbeat:Filesystem):     Started db2
    * mariadb   (ocf::heartbeat:mysql):  Started db2
    * virtual_ip        (ocf::heartbeat:IPaddr2):        Started db2

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

DRBD領域に作成したテストファイルを見てみましょう。2号機にもhogehogeユーザーを作成しているので、ファイルの所有者はhogehogeかと思いきや、、、UIDになっていますね、、

2号機でもhogehogeユーザーは存在するのですが、UIDが2001になってます。また1001のUIDに紐づくユーザーがいないため、1号機から引き継がれたUIDがもろに表示されている状態です。

# ls -al
total 8
drwxr-xr-x   3 root root  48 Dec 11 20:44 .
drwxr-xr-x. 19 root root 271 May 11  2018 ..
-rw-r--r--   1 1001 1001   5 Dec 11 20:44 testUID


2号機でhogehogeユーザーに切り替えて、DRBD領域のテストファイルに書き込もうとすると。。権限が無いぞ!と怒られますね。。

echo testtest > /data/testUID
bash: /data/testUID: Permission denied

ただ、ファイル権限的にはその他ユーザは読込可能なのでファイルを閲覧することは出来ますね。

cat testUID
test

例としてDRBD領域でWebコンテンツを公開している場合に、このようなことが起こると1号機ではうまく稼働していたのに2号機では不具合が起こるといったようなことが起こる可能性があります。こわい。。。

【まとめ】

冗長化構成はダウンした時の影響を最小限に抑えることが出来ますが、設定を理解した上で実装する必要がありますね。なかなか難しい。。