MariaDB, MySQLの冗長化、負荷分散の構成を考える

mariadb_mysql_replicationWordPressのデータベースを複数サーバーで冗長化して、負荷分散しながら管理しやすく、将来的にも拡張しやすい構成を考えたときの覚書。

調査した関連技術

MariaDB Server スタンドアローン版。
他のサーバーとはレプリケーション機能で冗長化する。
10.0からは並列レプリケーションが実装されて同期スピードが速くなったらしい。
更新はマスターに。参照はスレーブからというのが一般的。
MariaDB Galera Cluster 複数のサーバーでお互いを監視して同期してくれる。
マスター、スレイブの概念がない。
全てのノードに対して更新/参照が可能で、一つのノードへの更新が全てに伝搬される。
ノードの追加・削除は自動でやってくれる。
負荷分散(ロードバランス)の仕組みは別途用意しないといけない。
MySQL Cluster 管理ノード、データノード、SQLノードでクラスタを実現する。
データノードがデータの一部を持ち合うこと(シャーディング)で負荷分散になる。その分ネットワークがボトルネックになりやすい。
MySQL Cluster 構築・運用バイブル」が分かりやすい
Spider Storage Engine 複数サーバー間でデータを分散させるシャーディングを実現可能なストレージエンジン。
分散されたデータの管理はSpiderが行うため、使う側は通常のテーブルと同じように扱える。
MariaDB 10.0.4からバンドルされている。
MySQL Proxy MySQL専用のロードバランサー。
MariaDBとの組み合わせで動作するのかな?
参考:漢(オトコ)のコンピュータ道: MySQL Clusterへの接続方法
PHP mysqlnd_ms mysqlnd(MySQL Native Driver)のプラグイン。
設定に従いロードバランスしてくれる。情報少ない。
参考:PHP: mysqlndプラグイン と MySQL Proxyの比較 - Manual
参考:PHP: mysqlnd_ms - Manual
Linux Vertual Server
(LVS)
Linuxの負荷分散ソリューションの仕組み。
LinuxカーネルにはIPVSというロードバランスソフトウェアが組み込まれているので、管理ツール「ipvsadm」から設定することで簡単にロードバランサになれる。
特定のポートを監視すればMySQLのロードバランサーになる。
ただ死活監視は別途「Keepalived」が必要。
参考:「Linux Virtual Server」と「Keepalived」で作る冗長化ロードバランサ - さくらのナレッジ
Keepalived 複数のサーバーを監視してLVSの設定を動的に変更するソフトウェア。
HAProxy LinuxカーネルのIPVSに頼らずにロードバランスと死活監視をするソフトウェア。

MySQL Clusterをやってみたいけど、「MySQL Cluster 構築・運用バイブル」を読むと

「仮想化の環境でMySQL Clusterを構築するのは、公道でレーシングカーを走らせるようなものだ」

とあるので激しく迷う。

少ないサーバー資源から始めれて、将来的な拡張性、管理運用のコストなどを考慮すると、総合的に「MariaDB Galera Cluster + HAProxy」がいい気がしてきた。

 

< Related Posts >