アーキテクチャ
Oracle NoSQL Databaseアプリケーションは、KVStoreと呼ばれるOracle NoSQL Databaseデータ・ストアに対してネットワーク・リクエストを実行することで、データの読取りおよび書込みを行います。KVStoreはストレージ・ノードを集めたもので、各ストレージ・ノードは1つ以上のレプリケーション・ノードをホストしています。KVStoreの内部メカニズムによって、データはこれらのレプリケーション・ノードに自動的に分散されます。従来の3層Webアーキテクチャを例にすると、KVStoreはバックエンド・データベースにかわるものか、バックエンド・データベースと併用されるものです。
オプションで、KVStoreを複数の物理的な場所に分散してインストールできます。これらの場所をそれぞれゾーンと呼びます。ゾーンについては、ゾーンで説明します。
ノート:
レプリケーション・ノードはBerkeley DB, Java Edition (JE)を使用して実装されます。JEはトランザクション保護型のエンタープライズクラスのデータベースです。この詳細は、Oracle Berkeley DB Java Editionで説明します。
ストアには、複数のストレージ・ノードが含まれます。ストレージ・ノードは、ローカル・ストレージを持った物理(あるいは、仮想)マシンです。マシンにはコモディティ・ハードウェアが想定されています。要件ではありませんが、各ストレージ・ノードは通常、ストア内の他のすべてのストレージ・ノードと同一です。
各ストレージ・ノードは、1つ以上のレプリケーション・ノードを容量によって決定されたとおりにホストします。ストレージ・ノードの容量は、ノードに関連付けられたハードウェア・リソースのだいたいのめやすとなります。ストアには様々な容量のストレージ・ノードを含めることができます。また、Oracle NoSQL Databaseによって、ストレージ・ノードの容量に比例したロード・サイズが割り当てられます。
レプリケーション・ノードにはストアのデータのサブセットが格納されます。ストレージ・ノードのデータは自動的に、パーティションと呼ばれる論理コレクションに均等に分割されます。各レプリケーション・ノードには少なくとも1つ、通常は複数のパーティションが含まれています。パーティションの詳細は、パーティションを参照してください。
各ストレージ・ノードには情報収集のための監視ソフトウェアが搭載されるため、ホストしているレプリケーション・ノードは確実に実行され健全性も確保されます。
容量をストレージ・ノードに関連付け、ストレージ・ノードとレプリケーション・ノードの数のバランスをとる最適な方法を調べる方法の詳細は、管理者ガイドのストアの構成の決定を参照してください。
レプリケーション・ノードとシャード
大まかに言うと、レプリケーション・ノードは、表、またはキーと値のペアを含む1つのデータベースとみなすことができます。ストレージ・ノードは1つ以上のレプリケーション・ノードをホストします。レプリケーション・ノードをホストするには適切な量のリソースが必要になるため、通常ストレージ・ノードでホストされるレプリケーション・ノードは1つのみです。しかし、潤沢なリソース(メモリー、CPUおよびディスク)があるハードウェアにインストールされたストレージ・ノードでは、複数のレプリケーション・ノードをホストできます。
ストアのレプリケーション・ノードはシャードに編成されます。1つのシャードには複数のレプリケーション・ノードが含まれます。各シャードにはマスター・ノードがあります。このマスター・ノードがすべてのデータベース書込みアクティビティを実行します。各シャードには1つ以上の読取り専用レプリカも含まれています。マスター・ノードがすべての新規書込みアクティビティ・データをレプリカにコピーします。レプリカは読取り専用操作のサービスに使用されます。
ある時点で1つのシャード内に存在できるマスター・ノードは1つのみですが、他のシャード・メンバーはいずれもマスター・ノードになることができます。ただし、後述するセカンダリ・ゾーンのノードは例外です。
次の図に、KVStoreがシャードに分かれている状態を示します。
マスターをホストするマシンになんらかの障害が発生すると、シャード内の別のいずれかのノードにマスターが自動的にフェイルオーバーします。レプリカ・ノードの1つが自動的にマスターに昇格します。
本番KVStoreには複数のシャードが含まれます。インストール時、ストアに含まれるシャードの数をOracle NoSQL Databaseで自動的に決定できるようにするための情報を指定します。ストアに含まれるシャードが多いほど、書込みリクエストをサービスするノードがストアに多く含まれるため、書込みのパフォーマンスが向上します。
レプリケーション係数
シャードに属するノードの数は、レプリケーション係数と呼ばれます。シャードのレプリケーション係数が大きいほど、読取りリクエストに応じるマシンが増えるため、読取りのスループットが向上します。ただし、大きなレプリケーション係数を使用すると、コピーの書込み先のマシンが増えるため、書込みのパフォーマンスが低下します。
ストアは、ゾーンと呼ばれる複数の物理的な場所にわたってインストールできます。レプリケーション係数はゾーンごとに設定します。ストア内の各ゾーンのレプリケーション係数を設定すると、Oracle NoSQL Databaseは、ストア内の各ゾーンに存在する各シャードに対して適切な数のレプリケーション・ノードが作成されるようにします。次に、Oracle NoSQL Databaseの側面を説明する用語を示します。
- レプリケーション係数: シャードに属するノードの数。
- ゾーン・レプリケーション係数: ゾーンで保持されるコピー、つまりレプリカの数。
- プライマリ・レプリケーション係数: すべてのプライマリ・ゾーン内のレプリカの合計数。
- セカンダリ・レプリケーション係数: すべてのセカンダリ・ゾーン内のレプリカの合計数。
- ストア・レプリケーション係数: ストア全体のすべてのゾーン内のレプリカの合計数。
プライマリ・レプリケーション係数とその値の関連性を特定する方法の詳細や、複数のゾーンとレプリケーション係数の詳細は、管理者ガイドのレプリケーション係数を参照してください。
パーティション
ストア内のすべてのデータは1つ以上のキーによってアクセスされます。キーは表内の1つの列である場合と、キー/値ペアのキー部分である場合があります。
キーはパーティションと呼ばれる論理コンテナに配置され、各シャードには1つ以上のパーティションが含まれています。キーは、パーティションへの配置後は別のパーティションに移動できません。Oracle NoSQL Databaseは各レコードのキーをハッシュすることによって、すべての使用可能なパーティションにレコードを均等に配分します。
計画の一環として、ストアに含めるパーティションの数を決める必要があります。ストアのインストール後にパーティションの数を構成することはできません。ストアを計画する方法の詳細は、管理者ガイドの初期容量計画を参照してください。
ストアで使用するストレージ・ノードの数は拡張して変更することが可能です。こうすることで、新規シャードの追加によって、新規リソースを利用するようにストアを再構成できます。この場合、あるシャードから別のシャードにパーティションを再配布することで、新規シャードと既存シャードの間にわたって既存のデータが分散されます。このような理由から、多数のパーティションを用意して、ストアをきめ細かく再構成できるようにしておくことが推奨されます。
一般的なガイドラインとして、各シャードには少なくとも10から20のパーティションが必要です。パーティションの数はシャードの数で均等に割り切れる必要があります。初回のデプロイメント後にパーティション数を変更することはできないため、将来的なストアの最大サイズを考慮してパーティション数を計画します。たとえば、膨大な数のシャードを構成するにはオーバーヘッドが生じますが、将来ストアで保持するであろう最大シャード数の100倍のパーティションを指定することは妥当だと考えられます。
ゾーン
ゾーンは物理的な場所のことで、ゾーン内にデプロイされたストレージ・ノードの間には大容量のネットワーク接続が提供されます。各ゾーンは物理的にある程度分離しています。各ゾーンには通常、冗長またはバックアップ電源供給、冗長データ通信接続、環境制御(たとえば、エアコン、消火)およびセキュリティ・デバイスがあります。ゾーンは、個々のデプロイメントによって、物理的なデータ・センターを表すこともあれば、建物のフロア、部屋、ポッドまたはラックを表すこともあります。
複数のゾーンにわたってストアをインストールおよび構成することをお薦めします。ゾーンが複数あると障害を分離できるため、1つのゾーンに障害が起こった場合でもデータの可用性が高まります。複数のゾーンを使用することで、大規模な停電やネットワーク障害など、物理的な場所全体に影響を与えるシステム障害を軽減できます。
ゾーンには、プライマリとセカンダリの2つのタイプがあります。プライマリ・ゾーンがデフォルトになります。ここにはマスター・ノードまたはレプリカとしてサービスを提供できるノードが含まれます。セカンダリ・ゾーンには、レプリカとしてのみサービスを提供できるノードが含まれています。セカンダリ・ゾーンは、離れた場所にデータのコピーを作成したり、データの追加のコピーを保持して冗長性または読取り容量を増やしたりするために使用できます。
レプリケーション係数をゼロに設定できるのはプライマリ・ゾーンのみです。ゼロ容量ストレージ・ノードは調停ノードに使用されます。調停ノードをホストできるのはプライマリ・ゾーンのみです。
コマンドライン・インタフェースを使用して、1つ以上のゾーンを作成してデプロイできます。各ゾーンは、デプロイされたストレージ・ノードをホストします。ゾーンおよびその作成方法の詳細は、管理者ガイドのゾーンの作成を参照してください。
調停ノード
軽量のプロセスである調停ノード
は、2つの状況において書込み可用性を提供します。まず、プライマリ・レプリケーション係数が2で1つのレプリケーション・ノードが使用不可になった場合です。もう1つは、2つのレプリケーション・ノードで通信ができず、どちらがマスターであるかを判断できない場合です。このような状況が発生すると、調停ノードが選出に参加して、確認要求に応答します。
調停ノードにデータはホストされません。ストレージ容量がゼロのストレージ・ノードを作成し、調停ノードをホストします。容量が0よりも大きいストレージ・ノードに調停ノードを割り当てることもできますが、それらの調停ノードの割当て時の優先順位は、容量0のストレージ・ノード上の調停ノードよりも低くなります。
調停ノードはシャード外部のストレージ・ノードに割り当てられます。他のシャード・メンバーとは別のストレージ・ノードに調停ノードをホストするための十分なストレージ・ノードがない場合、エラーが発生します。調停ノードは1つのストレージ・ノードの不在時に書込みの可用性を提供します。調停ノードの割当てには、調停ノードのホスト用として構成されたプライマリ・ゾーン上のストレージ・ノード・プールが使用されます。
調停ノードの詳細は、管理者ガイドの調停ノード対応トポロジのデプロイを参照してください。
トポロジ
トポロジは、NoSQL Databaseストアを構成するゾーン、ストレージ・ノード、シャード、レプリケーション・ノードおよび管理サービスの集合体です。デプロイされた各ストアには、ある時点の状態を示すトポロジが1つあります。
初期のデプロイ後、特定のシャードで単一障害点が発生する可能性が最小限になるようにトポロジが配置されます。つまり、ストレージ・ノードは複数のレプリケーション・ノードをホストする可能性がありますが、そのレプリケーション・ノードが同じシャードに属することはありません。これにより、ハードウェア障害でホスト・マシンが停止しても、シャードの読取りおよび書込みの可用性は維持される可能性が高くなります。
プライマリ・レプリケーション係数が2で、調停ノードを
ホストするようにゾーンが構成されている場合、トポロジに調停ノードが自動的に構成されます。
トポロジは、様々なパフォーマンス特性を実現する場合や、ストレージ・ノードの数または特性の変更に対応する場合に変更できます。トポロジの変更およびデプロイは反復的なプロセスです。コマンドライン・インタフェースを使用してトポロジを作成、変換、表示、検証およびプレビューする方法の詳細は、管理者ガイドのストアのトポロジの変更ステップを参照してください。