一般にレプリケーションとは、他のサーバにデータベースを複製することをいいます。複製はLANやインターネットなどネットワークを経由して行われるので、物理的に離れた場所にあるサーバへデータベースをレプリケートすることもできます。
複製方法の種類
複製の方法には同期と非同期の2種類があります。
同期複製の場合は、レプリケーションを構成する全てのサーバで常に全く同じデータが保持されることが保証されますが、一方でデータの同期を取るために他のサーバの応答を待つ必要があるので、サーバの台数が多くなる程、全体の応答性が低下する可能性があります。
逆に非同期複製は、サーバ台数の増加によるパフォーマンスの低下はほとんどありませんが、短い時間で観測した場合、サーバ間でデータの同期が保証されないという問題があります。
構成の種類
主なレプリケーションの構成にはマスタスレーブとマルチマスタがあります。
マスタスレーブ構成は、更新系のクエリを受け付けるのはマスタサーバのみで、スレーブはマスタから伝搬されたもの以外の更新処理は行いません。
マルチマスタは、どのサーバでも更新系のクエリを受け付けるような構成です。
MySQLのレプリケーションでできること
負荷分散
負荷分散機を経由して、スレーブサーバ群に参照系のクエリを負荷分散することができます。ただし、前述した通りMySQLのレプリケーションは非同期なの で注意が必要です。具体的には、全く更新しないテーブル、もしくは、クライアントアクセスがない夜間のバッチ処理でしか更新しないマスタテーブルに対する 参照系のクエリのような、スレーブへの伝搬の遅延が問題にならないクエリは負荷分散することができますが、ユーザ情報の更新をマスタに対して行った直後に スレーブにそのユーザの情報を問い合わせるような場合には、得られた結果が食い違う危険性があります。
MySQLのレプリケーションでできないこと
更新系の負荷分散
更新系クエリの負荷を複数のサーバに分散することはできません。
まず、単純なマスタスレーブ構成ではマスタは1つしかないので、更新系のクエリはこのマスタに集中させるしかありません。
次にデュアルマスタ構成を考えてみます。MySQLのレプリケーションでは、スレーブは他のスレーブのマスタになることができるので図3のようなデュアル マスタ構成にすることができます。しかし、マスタ間で更新処理が競合する可能性があるので、より上位のレイヤで更新対象となるテーブルごとにクエリの発行 先のマスタを区別するなど工夫が必要です。例えばユーザー情報の更新はマスタAへ、商品情報の更新はマスタBへ、というようにです。
これで更新系のクエリを分散することができるようになるわけですが、実は負荷の分散にはなっていません。なぜなら、マスタAに対して行われた更新処 理は、レプリケーションによりマスタBでも実行されるので、結局、両方のマスタで更新系のクエリが実行されることになり、更新系クエリの受け付けの分散は できても更新処理の負荷を分散したことにはならないからです。
Reference http://www.irori.org/doc/mysql-rep.html