作っておぼえる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が起動したことがわかります。