Oracle Berkeley DB - レプリケーションによる高可用性データ管理

Berkeley DBでは、分散システムまたは冗長ハードウェア・システムにおいて高可用性および水平方向の読取りスケーラビリティを得るために、レプリケーションを使用します。 Berkeley DB HAは、自動フェイルオーバー機能が搭載された、単一のマスター、複数のレプリカ・システムで構成されています。 レプリカは読取りの操作、マスターは読取りと書込みの操作を行うことができます。 レプリカは、マスターまたは他のレプリカから送信される更新をトランザクション・ログ・レコードとして受信し、それらをローカルで適用します。 レプリカからマスターに状況が伝えられ、マスターではその情報を使用してレプリカ・グループ間の整合性を管理します。 レプリケート・システムの各ノードは、データおよびログの完全なコピーを保持します。 このアーキテクチャにより、極めて高い読取りスケーラビリティが得られます。また、ほぼ瞬時にフェイルオーバーが行われる他、100%に近い稼働率を提供することができます。 Berkeley DB HAを使用しているアプリケーションは、単一システムの処理の制約範囲を超えるスケーラビリティにより、適切に障害を管理して最大の可用性を実現します。

Berkeley DB HAのインフラストラクチャは、TCP/IPだけでなく、どのような通信システムでもサポートできます。このサポートにより、(ブレードなどの)冗長システム間で内部高速カスタム・インターコネクトを使用して、組込みハードウェア・システム内のパフォーマンスを劇的に向上させることができます。 ただし、Berkeley DBではレプリケーション・グループの管理にビルトイン・サポートが提供されており、それにはTCP/IPネットワークが使用されます。

データベースの変更はマスター・ノードのみで行います。 アプリケーションでは、マスター側で要求の作成、更新、削除を実行し、マスターから、要求されている整合性の度合いに必要なアプリケーションと同数のレプリカにそれらの変更が自動的に配信されます。 トランザクションは、即座に整合性が取れ、ノードのクォーラム、または使用しているアプリケーションが要求する他の基準が必要です。 読取りは、どのノード、マスター、レプリカでも、また、どのタイミングでも処理することが可能です。 レプリカは、グループの結合、分離が柔軟にでき、再結合も可能です。つまり、ソリューションの規模を変更に応じて変えることができます。 マスターに障害が発生した場合、選択処理がコールされ、新規のマスターを特定し昇格させます。 このソリューションにより、以下が可能となります。

  • 停止時間が容認されない状況において、迅速なフェイルオーバーが可能
  • 複数の読取り専用レプリカを用意することで、読取りスケーラビリティを提供
  • より効率的なコミット処理を実行することで、アプリケーションによって、(処理の遅い)ディスクではなく、(処理の速い)ネットワークにコミットし、永続性を提供することが可能
  • すべての操作に対して単一の一貫性モデルを適用しないことによって、アプリケーションにより柔軟性を提供


Berkeley DB HAの適用場所:

  • 小規模のLANベースのレプリケーション: 企業サイトのような、地域のためにデータを提供するデータセンター・ベースのサービス。 このサービスは、同一のデータセンター内に配置され、高速LANで通信する2~3台のサーバーによって実施されます。
  • 広域データ・ストア: 世界のどこからでもアクセス可能な情報を格納している世界中のサービス・プロバイダ。 このサービスは、グローバルに散在し、異なるデータセンターに配置されているサーバー群によって実施され、高速なデータセンター間接続で通信します。
  • マスター/スレーブ: シンプルなインストレーションで、マスター・マシンとスレーブ・マシンとの間のフェイルオーバーを提供。 HAレプリケーション・データ全体にまたがる広範な環境の場合は、単一のデータセットの管理とレプリケーション・ポリシーは適切ではありません。 Berkeley DB HAでは、アプリケーションによって、マスターとレプリカ間のデータ整合性の度合い、トランザクションの永続性の他、データのパフォーマンス、堅牢性、および可用性に影響する設計上のさまざまな選択肢が管理されます。


マスターの選択は、一意のマスターが常に選択されるように、分散された2フェーズの投票プロトコルを使用します。 選択には、プロセスに関与している適格なノードのうち、少なくとも過半数が必要です。 関与している適格なノードで、もっとも最新の環境の状態にあるノードがマスターとして選択されます。 適格なノードは以下の状態にあるいずれかのノードから選出されます。

  • マスター: 適格なノードの過半数によって選択されたノード。 このノードがこのステータスの間は、読取りおよび書込みのトランザクションの両方を処理できます。
  • レプリカ: このノードは、マスターで生じた変更を追跡するために使用されるレプリケーション・ストリームを介して、マスターと通信します。 レプリケーション・ストリームの詳細については、後続のセクションで説明します。 レプリカは、読取りトランザクションのみをサポートします。


レプリカが変更をできるだけ早く処理できるように、マスターは、変更をレプリカに非同期的に送信します。 変更はレプリカに次々と送信されます。つまり、トランザクションが進行中でも、アプリケーションがマスター上のトランザクションのコミットを試みる前に送信されます。 その後、トランザクションがマスター上で中断されると、レプリカもトランザクションを中断します。 アプリケーション・スレッドは、特定のトランザクションに追いつくために、1つ以上のレプリカを待機する場合があります(トランザクションの永続性の要件で必要な場合)。 レプリカは、そのようなトランザクションに対して明示的な受信確認の応答に応えますが、これは、マスター上の進行を阻止するものではありません。他のトランザクション作業は続けられます。

マスターによるレプリケーション・ストリームへの書込み操作と、レプリカでの読取り(再生)操作はそれぞれ非同期に行われます。 マスターは、アプリケーションが新規のログ・エントリを作成後すぐに、レプリケーション・ストリームへ書き込むことができます。 レプリカは、レプリケーション・ストリームから変更を読み取り次第、その変更を再生します。また、マスターによって要求された場合は、コミット操作の再生に対する受信確認に応答します。

記事

 顧客事例: Building Highly-Available and Scalable Applications with Berkeley DB High Availability (PDF)
 ホワイト・ペーパー: Berkeley DB Java Edition High Availability (HA) (PDF)
 ホワイト・ペーパー: Oracle Berkeley DB Java Edition High Availability - Large Configuration and Scalability Testing (PDF)