作っておぼえるHAシステム3
DRBDのインストールと設定が終わりましたので、PacemakerをインストールしてMariaDBのHAクラスタを仕上げます。
Pacemakerのインストール
yum コマンドで PacemakerとCorosyncをインストールします。リポジトリの設定はDRBDのインストールで行っていますので、次のコマンドでPacemaker 1.1.21がインストールできます。
[root@node1 ~]# yum install corosync pacemaker crmsh 読み込んだプラグイン:fastestmirror, linbit Loading mirror speeds from cached hostfile * base: mirror.aktkn.sg * extras: download.nus.edu.sg * updates: ftp-srv2.kddilabs.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ corosync.x86_64 0:2.4.5.linbit-1.44.c245.el7 を インストール .....
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: udpu
rrp_mode: passive
}
nodelist {
node {
ring0_addr: 10.5.0.1
ring1_addr: 10.5.1.1
nodeid: 1
}
node {
ring0_addr: 10.5.0.2
ring1_addr: 10.5.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 = ring X active with no faults”と表示されれば問題ありません。
[root@node1 ~]# corosync-cfgtool -s Printing ring status. Local node ID 1 RING ID 0 id = 10.5.0.1 status = ring 0 active with no faults RING ID 1 id = 10.5.1.1 status = ring 1 active with no faults
Corosyncが正常に起動すると、Pacemakerの関連プロセスも起動するので、psコマンドで確認してみて下さい。(fオプションをつけて実行します。)
[root@node1 ~]# ps axf
PID TTY STAT TIME COMMAND
2 ? S 0:00 [kthreadd]
4 ? S< 0:00 \_ [kworker/0:0H]
6 ? S 0:02 \_ [ksoftirqd/0]
7 ? S 0:00 \_ [migration/0]
.....
.....
1314 ? Ss 0:00 /usr/libexec/postfix/master -w
1319 ? S 0:00 \_ qmgr -l -t unix -u
29411 ? S 0:00 \_ pickup -l -t unix -u
24474 ? SLsl 3:24 corosync
14911 ? Ss 0:00 /usr/sbin/pacemakerd -f
14912 ? Ss 0:00 \_ /usr/libexec/pacemaker/cib
14913 ? Ss 0:00 \_ /usr/libexec/pacemaker/stonithd
14914 ? Ss 0:00 \_ /usr/libexec/pacemaker/lrmd
14915 ? Ss 0:00 \_ /usr/libexec/pacemaker/attrd
14916 ? Ss 0:00 \_ /usr/libexec/pacemaker/pengine
14917 ? Ss 0:00 \_ /usr/libexec/pacemaker/crmd
[root@node1 ~]#
Pacemaker 1.1.21の場合、pacemakerdの子プロセスとしてcibやstonithd、lrmdなどが起動していることがわかります。
MariaDBのインストール
MariaDBを両ノードでインストールします。
[root@node1 ~]# yum install mariadb-server -y 読み込んだプラグイン:fastestmirror, linbit Loading mirror speeds from cached hostfile * base: ftp.iij.ad.jp * extras: ftp.iij.ad.jp * updates: ftp.iij.ad.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ mariadb-server.x86_64 1:5.5.68-1.el7 を インストール ..... ..... インストール: mariadb-server.x86_64 1:5.5.68-1.el7 依存性関連をインストールしました: mariadb.x86_64 1:5.5.68-1.el7 perl-Compress-Raw-Bzip2.x86_64 0:2.061-3.el7 perl-Compress-Raw-Zlib.x86_64 1:2.061-4.el7 perl-DBD-MySQL.x86_64 0:4.023-6.el7 perl-DBI.x86_64 0:1.627-4.el7 perl-Data-Dumper.x86_64 0:2.145-3.el7 perl-IO-Compress.noarch 0:2.061-2.el7 perl-Net-Daemon.noarch 0:0.48-5.el7 perl-PlRPC.noarch 0:0.2020-14.el7 完了しました!
インストール後、起動して動作を確認して下さい。
[root@node1 ~]# systemctl start mariadb
[root@node1 ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
Active: active (running) since 木 2020-12-17 20:37:01 JST; 1min 9s ago
Process: 21080 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
Process: 21045 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
Main PID: 21079 (mysqld_safe)
CGroup: /system.slice/mariadb.service
├─21079 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
└─21244 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb...
12月 17 20:36:58 node1.sios.com systemd[1]: Starting MariaDB database server...
12月 17 20:36:58 node1.sios.com mariadb-prepare-db-dir[21045]: Database MariaDB is probably initialized in /var/lib/mysql already, nothing is done.
12月 17 20:36:59 node1.sios.com mysqld_safe[21079]: 201217 20:36:59 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
12月 17 20:36:59 node1.sios.com mysqld_safe[21079]: 201217 20:36:59 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
12月 17 20:37:01 node1.sios.com systemd[1]: Started MariaDB 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.sios.com 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
Online: [ node1.sios.com node2.sios.com ]
Full list of resources:
Resource Group: rg_mariadb
res_ipadr (ocf::heartbeat:IPaddr2): Started node1.sios.com
res_fsmnt (ocf::heartbeat:Filesystem): Started node1.sios.com
res_mysql (ocf::heartbeat:mysql): Starting node1.sios.com
Master/Slave Set: ms_drbd_r0 [res_drbd_r0]
Masters: [ node1.sios.com ]
Slaves: [ node2.sios.com ]
Node Attributes:
* Node node1.sios.com:
+ master-res_drbd_r0 : 10000
* Node node2.sios.com:
+ master-res_drbd_r0 : 10000
Migration Summary:
* Node node1.sios.com:
* Node node2.sios.com:
node1でDRBDがPrimaryになり、ファイルシステムが/var/lib/mysqlにマウントされ、MariaDBが起動したことがわかります。