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

第4回 Kaiの詳細(2)―Kaiの設定をチューニングする

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

ノードが格納できるデータのサイズ

ここでは,Kai設定ファイル内のnumber_of_tablesについて説明します。

number_of_tables は,データをディクスに保存する際のサイズを調節するために使用します。より具体的には,ノードがディスクに格納できるデータのサイズは「number_of_tables * 2G Byte」となります。

第2回では,データをディスクに保存する方法と,store,dets_dirについて説明しました。

その際,データの保存先にディスクを指定するのは,念には念を入れたい場合や,何らかの事情でクラスタ全体を停止したい場合と説明しましたが,もう一つだけ理由があります。

その理由を説明する前に,以下の表をご覧ください。

 32bit64bit
ets3G Byte3G Byte 以上(メモリサイズによる)
dets2G Byte2G Byte

この表は,Erlangのストレージets,detsのテーブル一つが保存できるデータの最大サイズを示したものです。

etsテーブルは,32bitアーキテクチャであれば3G Byte まで,64bitアーキテクチャであれば3G Byte以上のデータを保存できます。Kaiでは,ストレージとしてメモリを選択すると etsテーブルを使うので,3G Byte以上のデータを保存するならば,64bitアーキテクチャ上に環境を構築する必要があります。

detsテーブルは,アーキテクチャとは無関係に,常に 2G Byteまでデータを保存できます。Kaiでは,ストレージとしてディスクを選択すると,容量の制限を回避するため,複数のdetsテーブルを束ねて使います。detsテーブルの数は,number_of_tablesに設定します。例えば,number_of_tables = 256であるならば,そのノードの最大ストレージサイズは512G Byteとなります。

このため,メモリに収まらないサイズのデータを保存するために,ストレージとしてディスクを使用するという選択肢が増えます。ただし,detsテーブルの最大サイズは2G Byteであるため,一つのデータが2G Byteを超える場合,そのデータは保存できない点に注意してください。また,当たり前の事ですが,メモリよりディスクは低速である点に注意してください。

なお,ets,detsテーブル共に保存するデータの件数に制限はありません。

その他の設定値

ここでは,Kai設定ファイル内のまだ説明を行なっていない設定について説明します。

設定名説明
logfileログを残すファイルのパスを設定します。未設定の場合は,Erlang VM のコンソールにログが出力されます。
初期は "kai.log" がコメントアウトされているので,使用する際は,コメントを解除し,フルパスに書き換えてください。
hostnameノード情報に利用されるホスト名を設定します。名前解決できるホスト名か,IP アドレスを設定してください。
IPアドレスを設定する場合は,以下のような形式で設定してください。
{hostname, {10, 0, 0, 1}} 
% .(ドット) ではなく , (カンマ) 区切りです
rpc_portノード間通信を待ち受けるTCP/IPのポート番号を設定します。
memcache_portmemcachedクライアントからの接続を待ち受けるTCP/IPのポート番号を設定します。

hostnameに設定された値は,名前解決された後にノードの情報として利用されます。より具体的には,IPアドレスとポート番号の組み合わせがノードの一意情報として利用されています。

このため,ノードは,必ずクラスタを構成する他のノードと,IPアドレスかポート番号が異なっている必要があります。

本連載の第2回第3回では,Kaiを簡単に試していただけるように,一台の物理マシン上で複数のノードを起動していたので,ノードごとに異なる値をrpc_portに設定していました。

しかし,複数の物理マシンごとにノードを起動する場合は,hostnameを初期値の"localhost"から,その物理マシンのホスト名 (もしくは,ループバックアドレス以外のIPアドレス) に変更してください。

蛇足ですが,hostnameはListenするIPアドレスを設定する項目ではありません。

将来的には,NICの負荷を分散するため,memcached,ノード間通信インターフェース,それぞれにListenするIPアドレスを設定できるようにする予定です。

次回の予告

本連載の第2回から今回まで,Kaiを導入するために必要となる情報を一通り説明してきました。Kaiとは「AmazonのインフラであるDynamoを手軽に導入できる現実的な実装」である事が,お分かりいただけたでしょうか?

次回は,Kaiの導入事例の紹介と運用のノウハウを説明します。どうぞ,ご期待ください。

著者プロフィール

幾田雅仁(いくたまさひと)

酪農,ゴルフのキャディさん,某大手パソコン通信の下請け,某大手ポータルサイトなどを経て,決済代行を生業とする株式会社ゼロに入社。

p2p?なにそれ?美味しいの?の状態で,Erlang 分散処理勉強会に参加し,Kai のプレゼンを見て感銘を受け,無理矢理開発に参加し,現在に至る。