MariaDB, MySQLの冗長化、負荷分散の構成を考える
WordPressのデータベースを複数サーバーで冗長化して、負荷分散しながら管理しやすく、将来的にも拡張しやすい構成を考えたときの覚書。
調査した関連技術
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 >