クラスタ環境を作った際にハマったこと

あけましておめでとうございます!Dです。

雑煮を食べ、惰眠を貪っていたあの年末年始に戻りたい。と思う気持ちを抑え今年も張り切っていきたいと思います!今年もよろしくお願いいたします。

ということで本題です。冗長化構成を組みたい時に候補に挙がってくることが多いと思いますが
作ったことが無かったのでPacemakerやDRBDでのクラスタ環境を作ってみました。

その際にハマってしまったことを備忘録として残しておきます。
(気づけばああって感じなんですが、、、)

内容

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

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

初めて構築したので、結構大変でした。
やっとのこと出来た!!ってなり、Pacemakerのステータスの確認コマンドを実行すると。。。

# pcs status
----------------------------------------------------------------
Cluster name: db_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: db1 (version 2.1.6-8.el8-6fdc9deea29) - partition with quorum
  * Last updated: Wed Nov 22 18:53:21 2023 on db1
  * Last change:  Wed Nov 22 18:53:17 2023 by hacluster via crmd on db1
  * 2 nodes configured
  * 3 resource instances configured

Node List:
  * Online: [ db1 db2 ]

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

Failed Resource Actions:
  * virtual_ip_start_0 on db1 'error' (1): call=40, status='complete', exitreason='[findif] failed', last-rc-change='Wed Nov 22 18:53:18 2023', queued=0ms, exec=54ms

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

Full List of Resources」部分が失敗してて激萎えですね。
何はともあれ「/var/log/masseges」のログを見てみました。

----------------------------------
IPaddr2(virtual_ip)[10336]: INFO: [findif] failed
IPaddr2(virtual_ip)[10369]: ERROR: Unable to find nic or netmask.
----------------------------------

なんかNICかサブネットマスクが見つからないってエラーが出てるようです。

このエラーでググるとNICに紐づけている仮想IPアドレスのサブネットマスクの設定がおかしいっていう記事が
ちらほら出てきて、確認用のコマンドまで出てきました。

/23で切っているIPアドレスを指定していたので確認!

※念のため、IPアドレスは伏せています。

# ip -o -f inet route list match *.*.*.*/23 scope link

何も出力されない。。。それがダメなようです。。。

正しいものだと以下のように応答があるそうです。
※例(*.*.*.* はIPアドレスに読み替えてください)


# ip -o -f inet route list match *.*.*.*/24 scope link
*.*.*.*/24 dev ens4 proto kernel src *.*.*.* metric 103

ここまできて気づきました。
実際のNICに指定していたサブネットマスクは/24なのに
仮想IPには/23を指定しているせいで通信が上手くいかず、仮想IPの起動に失敗していました。

そのため、仮想IPアドレス用のリソース設定を変更することで対応していきます。

まずはリソース設定を確認。

※他のリソースがあれば一緒に出力されます。以下は仮想IPアドレス部分だけ抜粋。仮想IPは伏字にしています。

# pcs config show
-------------------------------------------------------

    Resource: virtual_ip (class=ocf provider=heartbeat type=IPaddr2)
      Attributes: virtual_ip-instance_attributes
        cidr_netmask=23
        ip=*.*.*.*
      Operations:
        monitor: virtual_ip-monitor-interval-10
          interval=10
          timeout=20
        start: virtual_ip-start-interval-0
          interval=0
          timeout=20
        stop: virtual_ip-stop-interval-0
          interval=0
          timeout=20
-------------------------------------------------------

サブネットマスクが23なのでこれを24に変更します。


# pcs resource update virtual_ip cidr_netmask="24"

再度、確認するとサブネットマスクが24に変更されているのが確認出来ます。


# pcs config show
--------------------------------------------------------

    Resource: virtual_ip (class=ocf provider=heartbeat type=IPaddr2)
      Attributes: virtual_ip-instance_attributes
        cidr_netmask=24
        ip=*.*.*.*
      Operations:
        monitor: virtual_ip-monitor-interval-10
          interval=10
          timeout=20
        start: virtual_ip-start-interval-0
          interval=0
          timeout=20
        stop: virtual_ip-stop-interval-0
          interval=0
          timeout=20
--------------------------------------------------------

ステータス確認すると仮想IPアドレスが復旧していました。よかった。。。
# pcs status


---------------------------------------------------------
Cluster name: db_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: db1 (version 2.1.6-8.el8-6fdc9deea29) - partition with quorum
  * Last updated: Wed Nov 22 18:59:26 2023 on db1
  * Last change:  Wed Nov 22 18:56:38 2023 by root via cibadmin on db1
  * 2 nodes configured
  * 3 resource instances configured

Node List:
  * Online: [ db1 db2 ]

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

Failed Resource Actions:
  * mariadb_start_0 on db2 'error' (1): call=34, status='complete', exitreason='MySQL server failed to start (pid=82608) (rc=0), please check your installation', last-rc-change='Wed Nov 22 18:53:22 2023', queued=0ms, exec=4358ms

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

※参考にしたURL
https://access.redhat.com/ja/solutions/7036857

【まとめ】

複数台構成になると、ネットワークの疎通部分についても理解しながら進めていかないといけないなと感じました。また頭では分かったつもりでも、実際に手を動かしてみると上手くいかなかったりするので、実機での検証は大事ですね。。。