分散Key/Valueストア,Kaiを使ってみよう!

第5回 gooホームにおけるKaiの運用例 ─監視や統計情報の活用

この記事を読むのに必要な時間:およそ 3 分

監視について

statsの値をcactiを使って統計的に利用する方法について紹介しましたが,ここでは監視について説明します。

定期的にstatsコマンドを送信して正常に値が取得できるかを確認することでノードの死活監視は十分に行えます。Kaiを使われる方はクラスタを構成することがほとんどだと思いますが,この場合はクラスタ構成が正常であるかどうかを監視する必要があります。それには理由があります。

一部のノードがダウンしてクラスタから脱落してもデータが失われることはないと,これまでの連載で説明してきました。ノードがダウンしたら再起動するだけでいい場合もありますが,実際の運用ではもう少し配慮が必要です。

クラスタを構成した場合,クライアントからのリクエストを適切に全ノードで分散して処理するためにロードバランサを用いたり,またはクライアント側でリクエストを分散するなどの対応を行います。このような状況で,あるノードがクラスタから脱落してしまったが,完全にダウンした状態ではなくgetやsetなどの応答は返すケースを考えてみましょう。

5台のノードでdetsを用いてクラスタを構成していたとして,ノードが1台,クラスタから脱落すると4台+1台の状態になります。ノードの死活監視しか行っていない場合はこの状態でも正常に見えます。正常ですのでクラスタを利用しているクライアント側は4台の側か,1台の側か区別なく5台の全ノードにgetやsetを行います。あるキー名をもつデータを頻繁にsetしていると,4台の側と,1台の側で同じキー名を持つデータをそれぞれで持ってしまう可能性があります。この状態を以下に示します。

図2 キー名が同じデータが存在してしまった状態

図2 キー名が同じデータが存在してしまった状態

このまま脱落していたノードを4台の側に復帰させると問題が発生します。同じキー名のデータを持ったノードが存在してしまうことになります。つまり,第3回で説明したWrite/Write Conflictが発生することになります。このデータに対してgetするとデータは得られますが,2つのデータが返ってきてしまいます。

多くのmemcachedクライアントの実装はこのような事態を想定していませんので,エラーを返したり,どちらかのデータが返ってきたりする状態になります。クラスタとして正常に動作しているように見えますが,クライアント側ではデータの取得時にエラーが多発したり,異なる値を取得したりするように見えてしまいます。こうなると状態を切り分けて原因を特定するのが難しくなります。この問題については,開発ブランチ branches/shino_data_in_bag/ で取り組んでいます。

etsを使用している場合は再起動する際にノード上のデータは消えますのでこのような事態は発生しません。detsを使用している場合,データが重複する恐れがある場合は一度ノード上のデータを消去してからクラスタに復帰させましょう。

消去の方法はconfigファイルのdets_dirで指定されたディレクトリ以下のファイルをすべて消去することで行えます。

ノードが脱落していたことに気づかずに運用していると,いつか必ずこのような事態に遭遇します。ノードが脱落したことを素早く検知して,クラスタに復帰させるか一時的にクライアントからアクセスしないような仕組みにする必要があります。

導入事例で紹介したgooホームではKaiの監視にオープンソースの監視ソフトウェア「Nagios」を使っています。Perlなどで簡単に監視プラグインを作成できるのが特徴です。memcachedの監視プラグインに改良を加え,Kaiの監視プラグインとしています。それぞれのノードが認識しているクラスタのメンバ数を数えて,メンバ数が変わることがあったら即座にアラートを発するようにしています。

課題

実際に導入して,課題となる点を上げておきたいと思います。

KaiはaptやRPMなどのパッケージングがまだされていません。多数のノードを構築するのにキックスタートインストールを行って自動的に行いところですが,現状では簡単ではありません。また,ディストリビューションが備える標準的なプロセス起動のコマンドも備えていませんのでこちらも管理上問題になります。現状では第2回で説明されたErlang VMのコンソールをDetacheするしかありません。

これらの運用上の課題は近日中に取り組んでフィードバックできればと考えています。

最後に

5回に渡ってKaiのコンセプトから運用までをご紹介してきました。memcachedが登場し多くの現場で採用された今,シンプルなKey/Valueストアが特にWebサイトの構築現場で注目を集めています。この分野は発展途上で様々なエンジニアがそれぞれの課題を解決すべく奮闘を続けています。本連載がKey/Valueストアを考えているエンジニアの参考になれば幸いです。

著者プロフィール

橋本智哉(はしもとともや)

NTTレゾナント株式会社所属。金融系システム構築に参画ののち,gooの担当に。2005年ごろgooブログのシステム構築・運用を通じてmemcachedを導入しKey/Valueの世界に触れる。現在はSNSであるgooホームの担当。