2014年3月11日火曜日

[MySQL on ZFS]CentOS6.5にZFSプールを作ってZFSファイルシステムにMySQL5.7のデータをぶっこんだ話

時間を見つけてはちょくちょく作業して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 件のコメント:

コメントを投稿