おつかれさまです!Dです。
前回もクラスター構成(PacemakerやDRBD)についての記事を書いたのですが、書ききれなかったので今回はパート2です。
またまた、その際にハマってしまったことを備忘録として残しておきます。
内容
OSは前回同様にRHEL8で2台構成でマスター、スレーブ構成になります。
マスターがダウンすると、スレーブ側がマスターに切り替わって
サービスを引き継いてダウンタイムを減らすといったイメージになります。
構築時はMariaDB10.3をPacemakerのリソースに登録して冗長構成を構成したのですが、MySQL8.0をインストールした場合、うまくpcs経由で立ち上がらない事象がありました。
その際の「pcs status 」コマンドで確認した内容は以下です。
MySQL8.0を登録しているリソース名をmariadbにしてるのでややこしいのですが、failしていることが確認できます。(後からリソース名も変更すればよかったと思いました。。)
# 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: Wed Nov 22 20:01:18 2023 on db1
* Last change: Wed Nov 22 20:00:57 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): Started db1
* mariadb (ocf::heartbeat:mysql): Stopped
* virtual_ip (ocf::heartbeat:IPaddr2): Stopped
Failed Resource Actions:
* mariadb_start_0 on db2 'not installed' (5): call=23, status='complete', exitreason='Setup problem: couldn't find command: /usr/bin/mysqld_safe', last-rc-change='Wed Nov 22 20:00:57 2023', queued=0ms, exec=69ms
* mariadb_start_0 on db1 'not installed' (5): call=27, status='complete', exitreason='Setup problem: couldn't find command: /usr/bin/mysqld_safe', last-rc-change='Wed Nov 22 20:00:59 2023', queued=0ms, exec=84ms
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
---------------------------------------------------------------
前回同様「Full List of Resources」部分が失敗してて激萎えですね。
何はともあれ「/var/log/masseges」のログを見てみます。
----------------------------------
mysql(mariadb)[805881]: ERROR: Setup problem: couldn't find command: /usr/bin/mysqld_safe
----------------------------------
なんか起動時に利用されるファイルが見つからないってエラーが出てるようです。
とりあえずほんとに無いのか確認してみると。。。ないですね。。
# ls -la /usr/bin/mysqld_safe
ls: cannot access '/usr/bin/mysqld_safe': No such file or directory
結論から言うとMySQL8.0とMariaDB10.3はそこまで変わらないと思い込んでいたのですが、起動ファイルが違ったり、PIDファイルの場所が違ったりするので、違う点ををpacemakerのリソースに反映させてやる必要がありました。
MySQL8の起動ファイルを探していきます。
MySQL8のステータスを確認して、ロードしているサービスファイルから確認します。(Loadedの部分)
# systemctl status mysqld
---------------------------------------------------------
* mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: inactive (dead)
サービスファイルの中身を見てみます。
# less /usr/lib/systemd/system/mysqld.service
※いろいろ書いてあるので抜粋しています。
----------------------------------------
~
ExecStart=/usr/libexec/mysqld --basedir=/usr
~
----------------------------------------
サービス起動時に実行しているファイルは上記になるので、こちらを指定する必要があります。
また、PIDファイルの場所は「/etc/my.cnf.d/mysql-server.cnf」に記載があり
「/run/mysqld/mysqld.pid」のパスを指定する必要があるそうです。
# cat /etc/my.cnf.d/mysql-server.cnf
-----------------------------------------
#
# This group are read by MySQL server.
# Use it for options that only the server (but not clients) should see
#
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/en/server-configuration-defaults.html
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
-----------------------------------------
まとめるとMySQL8ではPacemakerのMySQL8制御用リソース起動設定を変更する必要があるので変更していく。
まずは現在のPacemakerリソース設定を確認。
※リソース全部表示される。
# pcs config show
------------------------------------------------------
Cluster Name: db_cluster
Corosync Nodes:
db1 db2
Pacemaker Nodes:
db1 db2
Resources:
Group: db-ha
Resource: filesystem (class=ocf provider=heartbeat type=Filesystem)
Attributes: filesystem-instance_attributes
device=/dev/drbd0
directory=/data
fstype=xfs
Operations:
monitor: filesystem-monitor-interval-20
interval=20
timeout=40
start: filesystem-start-interval-0
interval=0
timeout=60
stop: filesystem-stop-interval-0
interval=0
timeout=60
Resource: mariadb (class=ocf provider=heartbeat type=mysql)
Attributes: mariadb-instance_attributes
binary=/usr/bin/mysqld_safe
pid=/var/lib/mysql/Rhel8.pid
Operations:
demote: mariadb-demote-interval-0s
interval=0s
timeout=120s
monitor: mariadb-monitor-interval-10
interval=10
timeout=30
notify: mariadb-notify-interval-0s
interval=0s
timeout=90s
promote: mariadb-promote-interval-0s
interval=0s
timeout=120s
start: mariadb-start-interval-0
interval=0
timeout=120
stop: mariadb-stop-interval-0
interval=0
timeout=120
Resource: virtual_ip (class=ocf provider=heartbeat type=IPaddr2)
Attributes: virtual_ip-instance_attributes
cidr_netmask=24
ip=192.168.230.187
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
Stonith Devices:
Fencing Levels:
Location Constraints:
Resource: db-ha
Enabled on:
Node: db1 (score:100) (id:location-db-ha-db1-100)
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
Alerts:
No alerts defined
Resources Defaults:
Meta Attrs: rsc_defaults-meta_attributes
migration-threshold=1
resource-stickiness=200
Operations Defaults:
No defaults set
Cluster Properties:
cluster-infrastructure: corosync
cluster-name: db_cluster
dc-version: 2.1.6-8.el8-6fdc9deea29
have-watchdog: false
last-lrm-refresh: 1700650857
no-quorum-policy: ignore
stonith-enabled: false
Tags:
No tags defined
Quorum:
Options:
------------------------------------------------------
後から知りましたが、個々のリソースを確認したい場合は
「pcs resource config」の引数にリソース名を指定すれば確認可能でした....
# pcs resource config mariadb
----------------------------------------------
Resource: mariadb (class=ocf provider=heartbeat type=mysql)
Attributes: mariadb-instance_attributes
binary=/usr/bin/mysqld_safe
pid=/var/lib/mysql/Rhel8.pid
Operations:
demote: mariadb-demote-interval-0s
interval=0s
timeout=120s
monitor: mariadb-monitor-interval-10
interval=10
timeout=30
notify: mariadb-notify-interval-0s
interval=0s
timeout=90s
promote: mariadb-promote-interval-0s
interval=0s
timeout=120s
start: mariadb-start-interval-0
interval=0
timeout=120
stop: mariadb-stop-interval-0
interval=0
timeout=120
----------------------------------------------
この部分がMySQL8では差異があるので、アップデートしていきます。
----------------------------------------------
binary=/usr/bin/mysqld_safe
pid=/var/lib/mysql/Rhel8.pid
----------------------------------------------
リソース設定値の変更は以下コマンドで反映します。
# pcs resource update mariadb binary=/usr/libexec/mysqld
# pcs resource update mariadb pid=/run/mysqld/mysqld.pid
設定確認すると変更されているのが分かります。
# pcs resource config mariadb
---------------------------------------------------
Resource: mariadb (class=ocf provider=heartbeat type=mysql)
Attributes: mariadb-instance_attributes
binary=/usr/libexec/mysqld
pid=/run/mysqld/mysqld.pid
Operations:
demote: mariadb-demote-interval-0s
interval=0s
timeout=120s
monitor: mariadb-monitor-interval-10
interval=10
timeout=30
notify: mariadb-notify-interval-0s
interval=0s
timeout=90s
promote: mariadb-promote-interval-0s
interval=0s
timeout=120s
start: mariadb-start-interval-0
interval=0
timeout=120
stop: mariadb-stop-interval-0
interval=0
timeout=120
---------------------------------------------------
設定変更出来たので一旦失敗したリソースをリセットします。
# pcs resource cleanup
起動を確認します。無事に立ち上がりましたね。。
# 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: Thu Nov 23 16:54:43 2023 on db1
* Last change: Thu Nov 23 16:54:26 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
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
---------------------------------------------------
念のためスレーブにフェイルオーバーしても同じDBが見れるか確認していきます。
適当なテストDB(test)を作成。
-------------------------------------------------------
mysql> create database test;
Query OK, 1 row affected (0.06 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
-------------------------------------------------------
フェイルオーバーさせるために1号機再起動して、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: Thu Nov 23 17:04:30 2023 on db2
* Last change: Thu Nov 23 16:54:26 2023 by root via cibadmin 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
-------------------------------------------------------
2号機にて同じtestDBが存在することを確認。
# mysql -u root
-------------------------------------------------------
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+--------------------+
5 rows in set (0.00 sec)
-------------------------------------------------------
ちゃんと先ほど作成したテストDBが存在しますね。成功です!
【まとめ】
今回はMariadb10.3をMySQL8.0に置き換えてハマりましたが、OSのリプレイス等でミドルウェアのバージョンが上がることで少しパラメータが変わる場合もあるかと思うので、きちんと実際の値を確認しながら進めることが大事かと思いました。