Dynamic Cluster Management

動的クラスタ管理機能

Aerospikeクラスタでは、データとそれに伴うメタデータ(インデックス等)、トランザクション負荷を均一に分散させることにより、キャパシティ・プラニングやスケールアップ/ダウン等の判断を容易にシンプルに行うことが可能になります。データの再配置は、クラスタ・ノードの増減があった場合のみです。キーの値の範囲により分散させる方法では、そのような範囲に入るデータが他に比べて不均一に大きくなった場合に再配置が必要となるのですが、Aerospikeでは全く思想が異なっています。


Aerospikeの動的クラスタ管理機能は、クラスタを構成する全てのノードを認識し、全てのノードが同じ情報を持つように確実に管理しています。ネットワークの不具合、新たなノードの追加、ノードの削除や停止といったイベントにより、クラスタの構成ノード情報が変化します。そのようなイベントは、予定されているものでも、されていないものでも発生します。そのようなイベントには、不規則なネットワークの切断や、予定された容量増加、ハードウエアやソフトウエアのアップグレード等、種々、あり得ます。そのような状況がある前提で、クラスタ管理に必要とされるものとして、以下が挙げられます。

Aerospikeでは、図1に示したように、データをノード全体に分散させて保持します。各レコードのプライマリ・キーは、衝突に極めて強いRipeMD160アルゴリズムを使い、160ビットのダイジェストにハッシュされます。このダイジェスト空間を重複しない4096個のパーティションに分割します。このパーティションが、Aerospikeではデータ群の最小単位となります。各レコードは、プライマリ・キーのダイジェストにより、一つのパーティションに属することになります。キー空間においてキーの分布が偏っていたとしても、ダイジェスト空間において、即ち、パーティション空間において、キーの分布は均一になります。これにより、データのアクセス時に、ホットスポットができないようにすること、つまりは、スケーラビリティの確保と障害耐性に寄与しています。

dcm1

図1. データの分布

Aerospikeでは、インデックスとデータは同じノードに共存し、読み出しやクエリの際のノード間通信が無いようにしています。書き込みは、リプリケーション・ファクタにより、複数のノード間の通信が必要になるかもしれません。インデックスとデータが共存していることとデータ分散ハッシュ関数の組み合わせにより、ノード全体に対して均一にデータが分布することになります。その結果、以下のような振る舞いとなります。

  1. アプリケーションに対する負荷はクラスタ全体に均一に分散される
  2. データベース操作のパフォーマンスが予測できる
  3. クラスタのサイズを容易に変更できる
  4. 運用中のクラスタの再構成とそれに伴うデータの再配置がシンプルになり、壊れることなく、効率的に行える

Aerospikeのパーティション割り当てアルゴリズムは、全てのパーティションをリスト化し、マップを生成します。このパーティション・マップは、クラスタ内のノードの順番を示し、最初のノードにマスタ・パーティションを、2番目のノードに最初のレプリカ・パーティションを、3番目には2つめのレプリカ等々を配置することになります。このパーティション割り当てアルゴリズムは、以下のメリットがあります。

  1. 決定論的であるため、分散システムの各々のノードにおいて、同じパーティションマップが独自に計算できる
  2. クラスタ内のすべてのノードに均一にマスタ・パーティション、レプリカ・パーティションを分布させることができる
  3. クラスタ構成が変更された場合に、パーティションの移動を最小限にすることができる
X