MySQLで可用性をあげる為に、2台以上からなるサーバで構築するのにはどうしたら良いか軽く調べてみました。一番簡単で確実なのは単純なレプリケーションですが、これだとマスターサーバがダウンした時に更新系の処理が全く出来なくなります。それは悲しいので、更新系も冗長化出来るという前提で考えてみます。
マルチマスターレプリケーション
個人的には、この構成が一番シンプルで良いのではないのではと思っています。Yahoo!オークションでの事例が解り易いのですが、普段はMasterのPrimaryに更新をしておいて、Primary障害時にSecondaryに切り替える方法です。レプリケーションという技術は、アーキテクチャとしても単純な分、使いどころを間違えなければ信頼性が高いと思っています。ただアプリの方でもある程度考慮する必要があったり、復旧の際に手間がかかるのも事実です。また可用性は上がりますが、処理負荷の分散が行われる訳ではないのでご注意を。
Yahoo!オークションでのMySQL 冗長化技術
MySQLレプリケーションを安全に利用するための10のテクニック
MySQL Cluster
5.1からオンメモリDB以外にも使えるようになったMySQL CLusterも選択肢の一つとして良いと思います。ただshared nothing型のクラスタ機能というのはアーキテクチャが複雑になりがちなので、どの程度の完成度までいっているかは気になる所です。
MySQL :: MySQL 5.1 リファレンスマニュアル :: 14 MySQL Cluster
MySQL Cluster 7.0.4 beta has been released
MySQL 5.4!! MySQL Cluster 7.0!!
MySQL + DRBD
最近人気の構成のようです。HeartBeatなどを使ってDBより一つ下のレイヤーで、データを同期してしまうという方法です。ただこれもDRBDの仕組み次第と言う所ですが、HeartBeatに泣かされたことは多々あるので半信半疑だったりします。昔の記憶を引きずるのは良くないとは知っていますがね。。。
MySQL :: MySQL 高可用性のための DRBD
うーん。マルチマスタのレプリケーションを少し試してみましょうかね。
また今回の話とは関係ないけど、下記の機能は気になります。
最強のMySQL HA化手法 - Semi-Synchronous Replication