MySQLサーバ semi-synchronous replication メモ その2

semi-synchronous replication でレプリケーションが上手くいったので調子に乗っていたら、
Masterに障害が発生したとき、SlaveをMasterにして運用しなければならないので、
そのときの手順を明確にしておいたほうが良いという神の声が聞こえました。

で実際入れ替えてみたりして分かったことなんですが。

分かったこと・すべきこと

MasterとSlaveの立場が逆転することを考えて構成するならば、
semi-synchronous replication のプラグインは Master用、Slave用どちらもインストールしておく。

障害時の対応方法

仮に host1(Master)とhost2(Slave)とすると。

host1が死んでしまった場合、アプリケーション側の参照先DBを
Slaveへ切り替えて事なきを得るのですが。

host1 もしくは別筐体のhostX をレプリケーション構成に復帰させる場合、
既にhost2がMasterとして動作しているため、Slaveとして追加することになります。

設定方法

通常の非同期レプリケーションの設定は 簡単にMasterとSlaveを入れ替えることが出来るのですが、
今回使用している準同期レプリケーション(semi-synchronous replication)は、簡単に切り替えることが出来ません。

準同期レプリケーションでは、my.cnfに設定を書くことでMaster・Slaveとして動作させます。

Master側
rpl_semi_sync_master_enabled = 1

Slave側
rpl_semi_sync_slave_enabled = 1

他にも必要な設定はありますが、抜粋です。

単純に準同期レプリケーションが出来ている状態から、
SlaveをMasterに、MasterをSlaveにしようとすると、
プラグインを両方とも入れている状態じゃないと、
設定が適用できずにMySQLが動かなくなってしまいます。

mysql> show plugins;
+-----------------------+----------+--------------------+--------------------+---------+
| Name                  | Status   | Type               | Library            | License |
+-----------------------+----------+--------------------+--------------------+---------+
| rpl_semi_sync_slave   | ACTIVE   | REPLICATION        | semisync_slave.so  | GPL     |
| rpl_semi_sync_master  | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
+-----------------------+----------+--------------------+--------------------+---------+

MasterSlaveの立場を逆転させる前に、
プラグインのインストール状況を確認するのが大事だって事ですね。