DBサーバ 比較 MySQL vs MariaDB

人気のRDBであるMySQLが方針の問題でMariaDBと分かれた形で開発が進んでいる。今回構築しようとしている新環境で両方使うというのは出来れば避けたいので、どちらを利用するか選定する必要がある。自宅環境はともかく問題はGMOクラウド環境で内部通信の品質が期待できない点をどうするかが課題。

wordpressチューニング(2) mysql編でまとめた通り、DB処理のボトルネックがネットワーク通信になってしまうので、出来れば全てのサーバにDBを持ちたい。例えばMariaDBにはgalera clusterという機能があり、マルチマスターを組める。これを使えば全サーバにDBを置いて参照も更新もローカル通信で完結させることが出来る、と思えなくもない。

ところが、マルチマスターの場合はノード間のデータ一貫性を保証するために非同期でなく、同期的なレプリケーションを行う事を考慮する必要がある。数台のうちはよいが、台数が増えてくるとそのすべてのサーバで同期的なレプリケーションを行うため、更新処理のcommitが著しく遅延する可能性が高い。かといって、マルチマスターで非同期レプリケーションを行うのはデータの一貫性保証を考えると恐ろしい。内部通信品質の不安なクラウド環境では更新の同期レプリによる処理遅延が怖いため、マルチマスター構成は取らないことにした。

ということで、いつも通り一般的なマスター・スレーブ構成を選択。この構成で安全なフェールオーバを実現するのに、以前まではmysql-master-haを使う必要があったが、今は標準の機能で対応できる。どちらのDBもGlobal Transaction IDという形で分散環境でのトランザクション管理に対応している。それぞれ特徴はあるものの、管理用のツールが充実してそうなのはMySQLの方だ。

mysqlはbaseリポジトリからは消えてしまったが、epel上からインストール可能。そのリポジトリにあるmysql-utilitiesというパッケージを入れれば、レプリケーション・スレーブの設定やフェールオーバがコマンドで処理できる。このユーティリティ面の充実を評価して、まずはMySQLを使ってみる事にする。マスターノードをdb1、スレーブノードをdb2、レプリ用のユーザーをreplとする。

ssh db2
sudo su -
mysqldump -uroot -hdb1 -A --single-transaction --master-data=2 --triggers --routines --events | mysql -uroot
mysql -uroot -e'flush privileges'

これでdb2側にdb1のDBをリストアする。この状態でレプリを開始するには、

mysqlreplicate --master=root@db1 --slave=root@db2 --rpl-user=repl

これだけ。うーん、便利。既にレプリケーション用の設定が入っている場合は、『reset master』してから実行する事。次にフェールオーバを試してみるので事前確認から。

mysqlrplcheck --master=root@db1 --slave=root@db2
mysqlrplshow --master=root@db1 --discover-slaves-login=root
mysqlrpladmin --master=root@db1 --discover-slaves-login=root health

mysqlreplcheckでレプリケーション状態を確認。mysqlrplshowでレプリ構成トポロジーを視覚的に確認。mysqlrpladminでトポロジーのステータスを確認。問題なければ、以下のコマンドでフェールオーバを実行する。

mysqlrpladmin --master=root@db1 --new-master=root@db2 --discover-slaves-login=root --demote-master --rpl-user=repl switchover

すげー簡単。mysql-master-haを使っていた頃はビクビクしながら実行していたが、これはかなり落ち着いてやれる。ユーティリティでプロダクトを選ぶなんてと思われるかもしれないが、忘れた頃に実施を求められるフェールオーバが、シンプルに実行できるのは本当にありがたい。しばらくはMySQLのマスター・スレーブ構成で運用を行っていく。

最後におまけでフェールバックのコマンド。想像つくとは思うけどw

mysqlrpladmin --master=root@db2 --new-master=root@db1 --discover-slaves-login=root --demote-master --rpl-user=repl switchover

以上。

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)