作っておぼえるHAシステム3(2022年版)

DRBDのインストールと設定が終わりましたので、PacemakerをインストールしてMariaDBのHAクラスタを仕上げます。

Pacemakerのインストール

yum コマンドで PacemakerとCorosyncをインストールします。リポジトリの設定はDRBDのインストールで行っていますので、次のコマンドでPacemaker 2.0がインストールできます。

[root@node1 ~]# dnf install corosync pacemaker crmsh
サブスクリプション管理リポジトリーを更新しています。
依存関係が解決しました。
....
依存性の解決をしています
トランザクションを実行中
  準備             :                                                                        1/1 
  インストール中   : perl-Digest-1.17-395.el8.noarch                                       1/63 
  インストール中   : perl-Digest-MD5-2.55-396.el8.x86_64                                   2/63 
 .....

crmshはcrmコマンドのパッケージです。LINBITのリポジトリではcrmshを独自に保守しており、RHEL8、CentOS8向けにもcrmコマンドが公開されています。

yumコマンドの実行が終わるとPacemakerとCorosync、crmコマンドが使えるようになります。

Corosyncの設定

Corosyncは設定ファイル(/etc/corosync/corosync.conf)を定義して設定します。最低限の設定は次のようになります。

[root@node1 ~]# cat /etc/corosync/corosync.conf
totem {
    version: 2
    cluster_name: cluster2
    secauth: off
    transport: knet
    rrp_mode: passive
}

nodelist {
    node {
	name: node1
        ring0_addr: 10.9.0.1
        ring1_addr: 10.9.1.1
        nodeid: 1
    }

    node {
	name: node2
        ring0_addr: 10.9.0.2
        ring1_addr: 10.9.1.2
        nodeid: 2
    }
}

quorum {
    provider: corosync_votequorum
    two_node: 1
}

logging {
    to_logfile: yes
    logfile: /var/log/cluster/corosync.log
    to_syslog: yes
}

Corosyncではノード間の死活監視を2つのネットワークを利用します。
nodelist{..}のnode{..}にring0_addr、ring1_addrの定義があるのはそれぞれのネットワークの設定値になります。

Corosyncの起動

Corosyncは単独で起動することができません。systemctlコマンドでPacemakerを起動すると連動して起動する仕組みになっています。

[root@node1 ~]# systemctl start pacemaker

このsystemctlコマンドはnode1、node2両方のノードで実行します。

[root@node2 ~]# systemctl start pacemaker

Corosyncがちゃんと起動されたかはcorosync-cfgtoolで確認します。”status 〜nodeid 2: connected”と表示されれば問題ありません。

[root@node1 ~]# corosync-cfgtool -s
Printing link status.
Local node ID 1
LINK ID 0
	addr	= 10.9.0.1
	status:
		nodeid  1:	localhost
		nodeid  2:	connected
LINK ID 1
	addr	= 10.9.1.1
	status:
		nodeid  1:	localhost
		nodeid  2:	connected
[root@node1 ~]# 

Corosyncが正常に起動すると、Pacemakerの関連プロセスも起動するので、psコマンドで確認してみて下さい。(fオプションをつけて実行します。)

[root@node1 ~]# ps axf
    PID TTY      STAT   TIME COMMAND
      2 ?        S      0:00 [kthreadd]
      3 ?        I<     0:00  \_ [rcu_gp]
      4 ?        I<     0:00  \_ [rcu_par_gp]
      6 ?        I<     0:00  \_ [kworker/0:0H-events_highpri]
      7 ?        I      0:00  \_ [kworker/0:1-events]
  .....
  .....
   1552 ?        SLsl   0:03 /usr/sbin/corosync -f
   1660 ?        Ss     0:00 /usr/sbin/pacemakerd -f
   1662 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-based
   1663 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-fenced
   1664 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-execd
   1665 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-attrd
   1666 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-schedulerd
   1667 ?        Ss     0:00  \_ /usr/libexec/pacemaker/pacemaker-controld
[root@node1 ~]# 

Pacemaker 2.0の場合、pacemakerdの子プロセスとしてpacemaker-basedやpacemaker-fenced、pacemaker-execdなどが起動していることがわかります。

MariaDBのインストール

MariaDBを両ノードでインストールします。

[root@node1 ~]# dnf install mariadb-server -y
.....
.....
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                        1/1 
  インストール中   : mariadb-connector-c-config-3.1.11-2.el8_3.noarch                      1/13 
  インストール中   : mariadb-common-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64       2/13 

.....
.....
インストール済み:
  mariadb-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                                      
  mariadb-backup-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                               
  mariadb-common-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                               
  mariadb-connector-c-3.1.11-2.el8_3.x86_64                                                     
  mariadb-connector-c-config-3.1.11-2.el8_3.noarch                                              
  mariadb-errmsg-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                               
  mariadb-gssapi-server-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                        
  mariadb-server-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                               
  mariadb-server-utils-3:10.3.35-1.module+el8.6.0+15949+4ba4ec26.x86_64                         

完了しました!

インストール後、起動して動作を確認して下さい。

[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# systemctl status mariadb
● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since Thu 2022-12-15 15:56:22 JST; 11s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 2773 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS)
  Process: 2638 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, st>
  Process: 2614 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS)
 Main PID: 2741 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 11363)
   Memory: 78.8M
   CGroup: /system.slice/mariadb.service
           └─2741 /usr/libexec/mysqld --basedir=/usr

12月 15 15:56:18 node1 systemd[1]: Starting MariaDB 10.3 database server...
12月 15 15:56:18 node1 mysql-prepare-db-dir[2638]: Initializing MariaDB database
12月 15 15:56:22 node1 mysqld[2741]: 2022-12-15 15:56:22 0 [Note] /usr/libexec/mysqld (mysqld 1>
12月 15 15:56:22 node1 systemd[1]: Started MariaDB 10.3 database server.

起動確認ができたら停止します。

[root@node1 ~]# systemctl stop mariadb

停止を忘れると、PacemakerでMariaDBを起動したときにエラーになります。

データベースのデータをDRBDで管理

MariaDBのデータをDRBDでレプリケーションします。node1で/var/lib/mysqlの中にあるファイルをDRBDのデバイスにコピーします。/dev/drbd0を一時的に/mntにマウントしてここにファイルをコピーします。

[root@node1 ~]# drbdadm primary r0
[root@node1 ~]# mount /dev/drbd0 /mnt
[root@node1 ~]# cp -afpv /var/lib/mysql/* /mnt
[root@node1 ~]# umount /mnt
[root@node1 ~]# drbdadm secondary r0

Pacemakerの設定登録

crmコマンドを使ってPacemakerの設定を読み込みます。設定をcib.txtというファイルにしてcrmからロードすると確実に設定できます。

[root@node1 ~]# cat cib.txt 
primitive res_drbd_r0 ocf:linbit:drbd \
	params drbd_resource=r0 \
	op start interval=0 timeout=240 \
	op stop interval=0 timeout=100
primitive res_fsmnt Filesystem \
	params device="/dev/drbd0" directory="/var/lib/mysql" fstype=xfs options=noatime \
	op start interval=0 timeout=60 \
	op stop interval=0 timeout=60
primitive res_ipadr IPaddr2 \
	params ip=192.168.3.50 cidr_netmask=24 nic=enp0s3 \
	op start interval=0 timeout=20 \
	op stop interval=0 timeout=20 \
	op monitor interval=10 timeout=20
primitive res_mysql mysql \
	params binary="/usr/bin/mysqld_safe" \
	op start interval=0 timeout=120 \
	op stop interval=0 timeout=120 \
	op monitor interval=20 timeout=30
group rg_mariadb res_ipadr res_fsmnt res_mysql
ms ms_drbd_r0 res_drbd_r0 \
	meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true
colocation c_mariadb inf: rg_mariadb ms_drbd_r0:Master
location l_mariadb rg_mariadb 100: node1
order o_mariadb inf: ms_drbd_r0:promote rg_mariadb:start
property cib-bootstrap-options: \
	stonith-enabled=false \
	no-quorum-policy=ignore
rsc_defaults rsc-options: \
	resource-stickiness=200

このファイルをcrmコマンドを使って読み込みます。

[root@node1 ~]# crm configure load replace cib.txt

しばらくすると、PacemakerがMariaDBをnode1.sios.comで起動します。

Pacemakerにはcrm_monという監視のツールがあるので、これを使って動作を確認してます。

[root@node1 ~]# crm_mon -frAD1

Cluster Summary:
  * Stack: corosync
  * Current DC: node2 (version 2.0.5.linbit-1.0.el8-ba59be712) - partition with quorum
  * Last updated: Thu Dec 15 16:18:28 2022
  * Last change:  Thu Dec 15 16:17:40 2022 by hacluster via crmd on node1
  * 2 nodes configured
  * 5 resource instances configured

Node List:
  * Online: [ node1 node2 ]

Full List of Resources:
  * Resource Group: rg_mariadb:
    * res_ipadr	(ocf::heartbeat:IPaddr2):	 Started node2
    * res_fsmnt	(ocf::heartbeat:Filesystem):	 Started node2
    * res_mysql	(ocf::heartbeat:mysql):	 Started node2
  * Clone Set: ms_drbd_r0 [res_drbd_r0] (promotable):
    * Masters: [ node2 ]
    * Slaves: [ node1 ]

Node Attributes:
  * Node: node1:
    * master-res_drbd_r0              	: 10000     
  * Node: node2:
    * master-res_drbd_r0              	: 10000     

Migration Summary:

node1でDRBDがPrimaryになり、ファイルシステムが/var/lib/mysqlにマウントされ、MariaDBが起動したことがわかります。