NOSQLの新顔、分散KVS「okuyama」の機能

2011年2月10日(木)
岩瀬 高博

(2)マスター・ノード

マスター・ノードは、okuyamaへのクライアント・インタフェースを提供するとともに、データ・ノードの管理を行います。

クライアントが直接接続するインタフェースを提供

クライアントのプロトコルの違いを吸収するのも、このノードの役割です。現在対応しているプロトコルは、以下の通りです。

  1. オリジナル

    okuyama専用のプロトコル。okuyamaの持つすべての機能を高速に利用可能。

  2. memcached

    キー・バリュー・ストアの中で最もよく利用されている、memcachedライブラリのプロトコル。アスキー・プロトコルのみに対応しており、現在は以下のコマンドを利用可能です。

    • get
    • set
    • add
    • delete
    • gets
    • cas
    • incr
    • decr

    flagおよびexpireTimeも利用できます。ただし、memcachedプロトコルで受信したコマンドをokuyama用に内部で変換しているため、処理能力は専用プロトコルよりも低下します。

  3. http

    httpプロトコル。GETでのデータ取得に限って利用できます。

データ・ノード管理

データ・ノード管理の機能として、データ入出力、データ・ノードの動的追加、死活管理、障害時のフェール・オーバー、自動リカバリを行います。

  1. データ入出力

    複数のサーバーでデータを分散管理する場合、ユーザーからリクエストのあったデータをどのサーバーが保持しているのかを知る必要があります。分散されたデータを管理する方法には、大きく以下の2種類があります。

    • メタサーバー方式:
      すべてのデータの保存先を、何らかの方法で記録し管理します。
    • アルゴリズム方式:
      保存依頼のあったデータを、何らかのアルゴリズムを使って、常に特定の値に変換します。変化した値を使って保存先を特定します。

    okuyamaは、アルゴリズム方式を採用しています。サポートしているアルゴリズムは、ModとConsistentHashingの2種類です。Modアルゴリズムは分散方法がシンプルですが、ノードの変更に弱いという特性があります。ConsistentHashingは、アルゴリズムは若干複雑になりますが、ノードの追加に強いという特性があります。

    あらかじめデータ数やサーバー数が限定されている場合はModでシンプルに分散し、データ数の増減が予想できない場合はConsistenteHasingを採用するのがよいと思います。

    アルゴリズムを用いてデータ保存先を決定した後は、実際にデータ・ノードに対するデータ保存や取り出しを行います。この際、同時に同じデータを保存するデータ・ノードを最大3台まで設定できます。

  2. ノードの動的追加

    データ・ノードを追加することで、処理能力を向上させ、保存容量を拡大できます。ノードを追加すると、追加ノードに対して、従来のノードのデータの一部を再配置する処理が自動的に行われます。

    データの再配置中でも、データの取得、更新、削除は、すべて行うことができます。この仕組みは、データの移行中に、ノード追加前と追加後の2つのノードの配置表を用いて実現しています。マスター・ノードに関しても、同様に無停止で追加することが可能です。

  3. データ・ノードの死活監視、フェール・オーバー、オート・リカバリ

    データ・ノードの管理は、マスター・ノード内の代表ノードが担当して実施しています。一定間隔でPingによる死活監視を実施し、状態を監視しています。応答がない場合は停止ノードとしてマークし、その情報を別のマスター・ノードに伝播します。

    データ・ノードが復旧した場合は、リカバリ処理を実施します。この際も、生存しているノードに処理を行わせることで、データ・アクセスが可能です。また、マスター・ノードの障害で代表ノードが停止した場合は、ほかのマスター・ノードが自動的に代表ノードに昇格します。

    図2-3-1: データ・ノード障害時のフェール・オーバー

    図2-3-2: マスター・ノードの自動昇格

    図2-3: データ・ノード障害時のフェール・オーバー(左)、マスター・ノードの自動昇格(右)(クリックで拡大)
株式会社神戸デジタル・ラボ

2006年神戸デジタル・ラボに入社。企業内業務アプリケーション開発に従事。
2008年末から大規模ECサイトのアプリケーション、インフラ周りの運用に従事。
2009年末に分散Key-Value Store”okuyama”をオープンソースとして公開。
2010年から各都道府県で開催されるオープンソースカンファレンスへの出展やセミナー登壇、「NOSQL afternoon in Japan」や、「JavaCloud Meeting Kansai」での登壇といった”okuyama”の普及活動の傍ら、”okuyama”を使ったアプリケーション開発などに従事し、現在に至る。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています