時間を見つけてはちょくちょく作業してLVSとvarnishでL4+L7な冗長ロードバランサ構成を組みました。
Webサーバは複数構成で冗長化しているのですが、DBサーバはサービス毎に物理的にマスターサーバを一台ずつ設置しています。
当然LVSと組み合わせて冗長化したいところですが、サーバを置く場所が無いのと資金がありません。
仕方ないのでデータのリアルタイムバックアップのみ実現させます。
(KeepAlivedを使ったMySQLの高可用性のあるサーバ構築方法は下記のサイトが大変参考になります)
http://dev.tapweb.co.jp/2011/01/325
まず、適当にサーバを一台作ってMySQL5.7を導入し、マルチソースレプリケーション機能で、各マスターDBサーバのレプリケーションサーバとします。
このレプリケーションにはクライアントから一切クエリが飛んできません。
単純に、マスターDBサーバのバックアップのみに使用します。
機能を限定することでITXベアボーンで十分実現可能です。
MySQL5.7からのマルチソースレプリケーション機能により複数DBサーバのレプリケーションになれます。
今回は、以前NAS用としてZFSで組んだファイルサーバがあったのでそれを利用しました。
ZFSの耐久性は魅力的なのでMySQL5.7のdatadirをZFSのファイルシステム上に設定します。
ここで問題なのが、innodbは非同期IOをサポートしますが、ZFS上では使えません。
innodb_use_native_aio=0のように設定すれば旧来のIOを使うのでZFSでも動作します。
しかし、MySQLをインストールするときにmy.cnfを読んでくれないのでインストールに失敗します。
そんな時は、
mysql_install_db --no-defaults --force --innodb_use_native_aio=0 --datadir=/zfs/mysql
のようなコマンドでデータベースを初期化します。
ZFS上にMySQLを配置するのって意外と需要ないのかもしれません。
解決を模索すること数時間、結構ハマってしまいました。
0 件のコメント:
コメントを投稿