CentOS7 2台でレプリケーション
- pacemaker » gmt-24.net
- Building a high-available failover cluster with Pacemaker, Corosync & PCS | Jensd's I/O buffer
- インフラ構築手順書 PaceMaker環境の構築・運用で使うコマンド集
を実践した。
corosync.conf
corosync.conf
quorum {
provider: corosync_votequorum
expected_votes: 2
+ two_node: 1
}
MariaDBの設定
server-idをそれぞれ一意に定義
(n1)/etc/my.cnf.d/my_custom.cnf
+ log-bin=mysql-bin
+ relay-log=relay-bin
+ server-id=1
(n2)
server-id=2
(n1)ひな形作成
mariadb起動
systemctl start mariadb
レプリケーション用ユーザを作成
-- 他のサーバからアクセスできるようにレプリケーション用ユーザを作成
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.100.%' IDENTIFIED BY 'tieP7iLu';
-- 読み取り専用に切り替えるためにlocalhostにもユーザを作成
GRANT SUPER,REPLICATION SLAVE,REPLICATION CLIENT,PROCESS ON *.* TO 'repl'@'localhost' IDENTIFIED BY 'tieP7iLu';
-- 設定反映
FLUSH PRIVILEGES;
- パスワードは同じものにしておく。
mariadb停止
systemctl stop mariadb
n1の/var/lib/mysql/をn2にコピー
(n1)圧縮
(n1)圧縮
tar czf ~/mysql.tar.gz /var/lib/mysql
(n2)転送
転送n1->n2
scp n1:mysql.tar.gz ~
(n2)削除
rm -rf /var/lib/mysql/
(n2)解凍
tar xzf ~/mysql.tar.gz
mv ~/var/lib/mysql/ /var/lib/
(n1)pacemakerの設定
n2はStandbyにしておく(Slaveとして稼働させるため)
pcs cluster standby n2
(n1)cib編集
現在の設定をファイルに保存
pcs cluster cib mysql_repl
コマンドが長いのでalias
alias cib="pcs -f mysql_repl resource"
設定
cib create mysql ocf:heartbeat:mysql \
binary=/usr/bin/mysqld_safe \
pid=/var/run/mariadb/mariadb.pid
cib update mysql replication_user=repl
cib update mysql replication_passwd=tieP7iLu
cib op add mysql start interval=0 timeout=120s
cib op add mysql stop interval=0 timeout=120s
cib op add mysql monitor interval=20s timeout=30s
cib op add mysql monitor interval=10s role=Master timeout=30s
cib op add mysql monitor interval=30s role=Slave timeout=30s
cib op add mysql promote interval=0 timeout=120s
cib op add mysql demote interval=0 timeout=120s
cib op add mysql notify interval=0 timeout=90s
Error: add_operation has been deprecated, please use 'op add'
これだけ注意。
設定反映
pcs cluster cib-push mysql_repl
(n1)Master/Slave設定を作成
pcs resource master mysql-clone mysql \
master-max=1 master-node-max=1 \
clone-max=2 clone-node-max=1 notify=true
設定にエラーがないか確認
# crm_verify -L -V
error: unpack_resources: Resource start-up disabled since no STONITH resources have been defined
error: unpack_resources: Either configure some or disable STONITH with the stonith-enabled option
error: unpack_resources: NOTE: Clusters with shared data need STONITH to ensure data integrity
Errors found during check: config not valid
stonith-enabledを無効にしないとエラー扱いになる
pcs property set stonith-enabled=false
エラーがないことを確認。
# crm_verify -L -V
ignore low quorum
pcs property set no-quorum-policy=ignore
pcs property
mysqlリソースの起動を確認
pcs resource enable mysql
# pcs resource
...
Master/Slave Set: mysql-clone [mysql]
Masters: [ n1 ]
Stopped: [ n2 ]
...
他ノードのスタンバイ状態の解除
pcs cluster unstandby --all
# pcs resource
...
Master/Slave Set: mysql-clone [mysql]
Masters: [ n1 ]
Slaves: [ n2 ]
...
MariaDB master/slave確認
SHOW BINLOG EVENTS\G
SHOW MASTER STATUS;
Master_Host値を確認
SHOW SLAVE STATUS\G
その他
START SLAVE;
STOP SLAVE;
トラブルシューティング
mysqlのSlaveが起動してこない
〜 'unknown error' (1): 〜
-
pcs resource enable mysql
しても起動できない。
状態確認
# pcs resource failcount show mysql
Failcounts for mysql
n2: INFINITY
エラー解除
# pcs resource failcount reset mysql
# pcs resource failcount show mysql
n2
をOS再起動するとSlaveが起動してくる。
- ログは
/var/log/mysqld.log
に出力されます。
@takehironetさんからご指摘いただきました。
resourceのfailcountのリセットはfailcount resetで良いと思います。cleanupはresource直下のサブコマンドだったかと(ご確認ください)
気づいた点
- レプリケーションの障害時、復旧まで手作業で1時間はかかる予感がするので
DRBD
が良い気がしてきた。