データベースは、基本的にデータベースサーバーとデータベースが格納されるストレージが1:1で構成されています。
ただし、サービスを運営していると、DBサーバーがトランザクションを受け入れない場合や、DBストレージに保存されているデータが破損する場合があります。クラスタリングとレプリケーションは、これらの問題を解決するために設計されたDBサーバー - DBストレージの構成方法です。
今回のポストでは、非開発者や開発勉強を始めた入門者のレベルに合わせてクラスタリングとレプリケーションについてご説明します。
データベースの中でクラスタリングは、複数のDBサーバーが1つのストレージを分割して処理する方法です。データベースのクラスタリングは、Active - Activeと Active - Standby構成に分けられます。
Active - Active構成のメリットは、あるDBサーバーが中断しても別のDBサーバーが作動することです。また、サーバーが2つあるため、DBサーバーのCPU、メモリなどが2倍になり、可用性の面も2倍以上のパフォーマンスが発揮できます。ただし、Active-Active構成は1つのストレージを共有するため、ボトルネックが発生する可能性があります。また、両方のサーバを同時に運用するため、費用負担が生じる場合があります。
Active - Standby構成は、 1 つの DB サーバーは Active(動作) 状態に、残りの DB サーバーは Stand by(待機)状態のままにすることです。ActiveなDBサーバーに問題が発生した場合は、Stand byサーバーをActiveサーバーとして機能させる方法です。Active - Standbyのメリットは、運用費用の削減です。
Standbyサーバーは通常は機能しないため、Active状態のDBサーバー費用を費やすだけです。一方、実際にはStand byサーバーは通常は機能しないため、Activeサーバーに切り替えるまでに時間が数十秒から数十分かかります。
レプリケーションは、さまざまな問題でデータの損失が発生した場合に備えてストレージまで複製することで、データの損失を最小限に抑えるためです。レプリケーションは、Source(Master)とReplica(Slave)という垂直構造で構築します。レプリケーションを構築する目的は大きく4つです。
単純バックアップは、2つ以上のデータベースサーバーとストレージをSource(Master)とReplica(Slave)に分割して同じデータを保存する方法です。分散方式はSlave DBをバックアップ用に活用するのではなく、Slave dbは負荷分散を行う方法で使用します。
Slaveをバックアップ目的に活用する方法は、2 つ以上のデータベースサーバーとストレージを MasterとSlave に分けて同じデータを同期して保存する方法です。Slaveを読み込み目的で利用する方法は、Masterの負荷を減らすためにSelect操作をSlaveで行うように設定する方法です。Select 操作に時間がかかるため、他の作業をするのが難しいため、Slaveを介して分散処理を行うことができ、パフォーマンスの向上に役立ちます。
レプリケーションのデメリットとして、Master、Slaveは異なるサーバーを運用しているため、別々のバージョン管理を行う必要があります。このときMasterとSlaveのデータベースも同じように合わせなければなりません。また、データの精度を保証することはできません。SlaveがMasterのデータ処理速度に追いついていない場合、2つのデータが一致しない可能性があります。最後に、レプリケーション方式で構成してもパフォーマンスの向上を体感できない場合があります。
クラスタリングとレプリケーションは、状況に応じたデータベース拡張方式であり、計画なしにデータベースを拡張することはお控えください。各自のサービスに合わせてデータベース拡張計画を立てれば、お客様により良い品質のサービスを提供することができます。