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