S-JIS[2010-06-02/2010-06-05] 変更履歴

Voldemort設定ファイル

Voldemortの設定のメモ。


設定ファイルの場所

Voldemortをインストールした場所の下にconfigというディレクトリーがあり、その下にsingle_node_clusterという単独ノードクラスターの設定ファイルがある。
Voldemortの起動時にこの設定ディレクトリーの場所を指定して起動する。

ディレクトリー ファイル 備考
VOLDEMORT_INSTALL/config/single_node_cluster/ config cluster.xml クラスターの構成。
server.properties  
stores.xml ストアの構成。
.temp 勝手に作られる。
.version 勝手に作られる。
data   勝手に作られる。

Voldemortを起動すると、データディレクトリーが自動的に作られる。

環境変数VOLDEMORT_HOMEにこのディレクトリーを指定しておくと、起動時にディレクトリーを指定しない場合はVOLDEMORT_HOMEの設定が使われる。


cluster.xml

<cluster>
	<name>mycluster</name>
	<server>
		<id>0</id>
		<host>localhost</host>
		<http-port>8081</http-port>
		<socket-port>6666</socket-port>
		<partitions>0, 1</partitions>
	</server>
</cluster>

とりあえず、クライアントからの通信を受け付けるポート(6666)が記されているようだ。


stores.xml

stores.xmlは、ストア(RDBのテーブルに相当)の定義を記述する。

<stores>
  <store>
    <name>test</name>
    <persistence>bdb</persistence>
    <routing>client</routing>
    <replication-factor>1</replication-factor>
    <required-reads>1</required-reads>
    <required-writes>1</required-writes>
    <key-serializer>
      <type>string</type>
    </key-serializer>
    <value-serializer>
      <type>string</type>
    </value-serializer>
  </store>
  <view>
    <name>test-view</name>
    <view-of>test</view-of>
    <view-class>
      voldemort.store.views.UpperCaseView
    </view-class>
    <value-serializer>
      <type>string</type>
    </value-serializer>
  </view>
</stores>

single_node_clusterでは、デフォルトで「test」という名前のストアが定義されている。

また、「test-view」という名前のビューが定義されている。[2010-06-05]
test-viewに接続すると、testに保存していた値は大文字に変換されてgetされる。
test-viewへのputは出来ない。(UpperCaseViewクラスがそういう作りになっている。)

新しいストアを定義したい場合は、store要素をコピペしてnameの値を変えればとりあえず作れる。(viewは不要)[/2010-06-05]

VoldemortのDBを再起動すると、新しいストアが反映される。


stores/store要素

store要素でストア(RDBのテーブルに相当)を定義する。[2010-06-05]

storeの要素
要素名 備考
name ストアの名前。RDBのテーブル名に相当。
replication-factor データが複製される個数。
preferred-reads 成功する読み込みの個数。この個数の読み込みが成功しないとクライアントがアプリケーションに値を返さない。
省略時のデフォルトはrequired-readsと同じ値。
required-reads 例外を発生させない、最小の読み込み個数。
preferred-writes 成功する書き込みの個数。この個数の書き込みが成功するまでクライアントの実行がブロックされる。
省略時のデフォルトはrequired-writesと同じ値。
required-writes 例外を発生させない、最小の書き込み個数。
persistence ストアデータの保持(永続化)に使われるバックエンドシステムの指定。
routing ルーティングポリシー。今のところはclient-side routingしかサポートされていないらしい。
key-serializer キーのシリアライズ方式。(タイプの種類はDefaultSerializerFactoryのソースを参照)
指定するタイプが間違ったものであっても、実行時まで分からない。
(定義読み込み時は特にチェックされず、ストアへアクセスした時に例外が発生する)
値(タイプ) 備考
string 文字列 <type>string</type>
<schema-info>utf8</schema-info>
java-serialization Java標準のシリアライズ
シリアライズではクラス名も保存されるので、
クラス名等を指定する必要は無い。
コーディング例
<type>java-serialization</type>
identity 単なるバイト列  
json JSON <type>json</type>
<schema-info>"string"</schema-info>
<type>json</type>
<schema-info>[{"id":"int32", "name":"string"}]</schema-info>
protobuff    
thrift Apache Thrift  
avro-generic
avro-specific
avro-reflective
Apache Avro  
value-serializer 値のシリアライズ方式。指定できるタイプはkey-serializerと同じ。

persistence要素

store/persistence要素でストアのデータを保存するバックエンドシステムを指定する。[2010-06-05]

バックエンドシステムを使うには、server.propertiesのstorage.configsでそのバックエンドシステムを扱うクラスを指定する必要がある。
併せて、server.properties内にそのシステムを使う為の設定も記述する。

persistenceに指定する値は、storage.configsに指定するStorageConfigurationクラスのgetType()によって取得される値。

概要 storage.configsに指定するクラス
bdb berkeley db。デフォルトで使用可能。
BDBの設定
voldemort.store.bdb.BdbStorageConfiguration
mysql MySQL。使う為には別途MySQLをインストールしておく必要あり。
MySQLの設定
voldemort.store.mysql.MysqlStorageConfiguration
memory データサイズがJavaVMのヒープサイズより大きくなるとOutOfMemoryが発生する。 voldemort.store.memory.InMemoryStorageConfiguration
cache データサイズが大きくなるとデータが破棄される。 voldemort.store.memory.CacheStorageConfiguration
read-only read-onlyの設定
read-onlyのデータの作り方
voldemort.store.readonly.ReadOnlyStorageConfiguration

stores/view要素

stores.xmlには、store以外にviewという要素が指定できる。[2010-06-05]
これは、RDBのビューに相当する。
ストアに格納されている内容(値)を変換して表示・格納したり、表示専用扱い(書き込みを禁止する)にしたりするのに使う。

viewの要素
要素名 備考
name ビューの名前。RDBのビュー名に相当。
ここで指定した名前をストア名としてクライアントから接続できる。
test-view
view-of 参照元ストアの名前。
store/nameと一致していなければならない。
test
view-class データを変換するクラスの指定。 voldemort.store.views.UpperCaseView
value-serializer 値のシリアライズ方式。store/value-serializerと同様。  

view-class要素

view/view-class要素でビューのクラスを指定する。[2010-06-05]
voldemort.store.views.Viewを実装する必要があるが、AbstractViewTransformationを継承するのが良さそう。

package jp.hishidama.sample.voldemort;
import org.apache.log4j.Logger;

import voldemort.store.Store;
import voldemort.store.views.AbstractViewTransformation;
public class UpperCaseWritableView extends AbstractViewTransformation<String, String, String> {

	private static final Logger logger = Logger.getLogger(UpperCaseWritableView.class);

	@Override
	public String storeToView(Store<String, String> store, String k, String s) {
		String v = s.toUpperCase();
		logger.info("storeToView: " + s + " -> " + v);
		return v;
	}

	@Override
	public String viewToStore(Store<String, String> store, String k, String v) {
		String s = v.toLowerCase();
		logger.info("viewToStore: " + v + " -> " + s);
		return s;
	}
}

クライアントからgetを実行するとサーバー側でstoreToView()が呼ばれる。
クライアントからputを実行するとサーバー側でviewToStore()が呼ばれる。
AbstractViewTransformationではUnsupportedViewOperationExceptionの例外が常に発生するようになっているので、読み込み専用のビューにしたい場合は、viewToStore()はオーバーライドしないようにすればいい。

AbstractViewTransformationの型引数は、<K, V, S>。ちと紛らわしいが(苦笑)、
K…キーの型(store/key-serializerに合わせる)
V…ビュー側の値の型(view/value-serializerに合わせる)
S…ストア側の値の型(store/value-serializerに合わせる)

サーバー起動時のクラスパスには、この独自ビュークラスも含まれるようにしないといけない。
また、クライアント側(クライアントシェル)も同様にクラスパスを指定する必要がある ようだ。(何に使ってるんだか分からないけど)

実行例
クライアント:ストアへ接続 クライアント:ビューへ接続 サーバーのログ
voldemort-shell.bat test tcp://localhost:6666 voldemort-shell.bat test-view tcp://localhost:6666  
> put "hello" "World"
> get "hello"
version(0:3): "World"
   
 
> get "hello"
version(0:3): "WORLD"
INFO voldemort.UpperCaseWritableView: storeToView: World -> WORLD
 
> put "hello" "Abc"
> get "hello"
version(0:4): "Abc"
INFO voldemort.UpperCaseWritableView: viewToStore: Abc -> abc
INFO voldemort.UpperCaseWritableView: storeToView: abc -> ABC
> get "hello"
version(0:4): "abc"
   

server.properties

server.propertiesには、個別の設定(プロパティー)を記述する。[2010-06-05]

「#」で始まる行はコメント。
長い設定を書きたい場合は、行末に「\」を付けて次の行に続ける。
バイト数を表す場合、単位を示す接尾辞が使える。「k」「kB」「M」「MB」「G」「GB」。当然1024の倍数。
真偽値を表す場合、「true」(大文字小文字は問わない)なら真、それ以外は全て偽。

どういったプロパティーが存在するのかは、VoldemortConfigのソースを見れば分かる。

分類 プロパティー名 概要 値の例
Voldemort voldemort.home Voldemortサーバー起動時の第1引数
あるいは環境変数VOLDEMORT_HOME
 
data.directory ストアのデータを置く場所。
デフォルトは「${voldemort.home}/data」
 
metadata.directory 設定ファイルのある場所。
デフォルトは「${voldemort.home}/config」
 
storage.configs ストアデータの永続化に使用するバックエンドシステムを扱うクラスの指定。
StorageConfigurationを実装したクラス。
カンマ区切りで複数指定可能。
起動時に読み込みが成功すると、以下のようなログが出力される。
INFO storage.StorageService: Initializing bdb storage engine.
INFO storage.StorageService: Initializing read-only storage engine.
voldemort.store.bdb.BdbStorageConfiguration, \
voldemort.store.readonly.ReadOnlyStorageConfiguration
slop.store.engine デフォルトは「bdb」。  
BDB bdb.cache.size デフォルトは200MB。 1GB
bdb.write.transactions デフォルトはfalse。 false
bdb.flush.transactions デフォルトはfalse。 false
bdb.data.directory デフォルトは「${data.directory}/bdb」。  
bdb.max.logfile.size デフォルトは60MB。 60MB
bdb.btree.fanout デフォルトは512。 512
bdb.checkpoint.interval.bytes デフォルトは20MB。 20MB
bdb.checkpoint.interval.ms デフォルトは30秒。 30000
bdb.enable.sorted.duplicates デフォルトはtrue。 true
bdb.one.env.per.store デフォルトはfalse。 false
bdb.cleaner.min.file.utilization デフォルトは5。 5
bdb.cleaner.minUtilization デフォルトは50。 50
bdb.cursor.preload デフォルトはfalse。 false
read-only readonly.backups デフォルトは1。 1
readonly.search.strategy デフォルトはBinarySearchStrategyクラス。 voldemort.store.readonly.BinarySearchStrategy
readonly.data.directory デフォルトは「${data.directory}/read-only」。  
MySQL mysql.user デフォルトは「root」。  
mysql.password デフォルトは空文字列。  
mysql.host デフォルトは「localhost」。  
mysql.port デフォルトは3306。  
mysql.database デフォルトは「voldemort」。  
  max.threads デフォルトは100。  
core.threads デフォルトはmax.threadsの半分。(最低1)  
socket.timeout.ms デフォルトは4秒。 4000
socket.buffer.size デフォルトは32kB。 32kB
socket.keepalive デフォルトはfalse。  
enable.nio.connector デフォルトはfalse。  
nio.connector.selectors デフォルトはプロセッサー(CPU)数。(最大8)  
クライアント client.max.connections.per.node デフォルトは5。  
client.connection.timeout.ms デフォルトは4秒。 4000
client.routing.timeout.ms デフォルトは5秒。 5000
client.max.threads デフォルトは100。  
client.thread.idle.ms デフォルトは5秒。 5000
client.max.queued.requests デフォルトは1000。  
  gossip.interval.ms デフォルトは30秒。 30000
pusher.poll.ms デフォルトは2分。 120000
失敗検知 failuredetector.bannage.period デフォルトは30秒。  
failuredetector.threshold デフォルトは80。  
failuredetector.threshold.countminimum デフォルトは10。  
failuredetector.threshold.interval デフォルトは10秒。  
failuredetector.asyncrecovery.interval デフォルトは10秒。  
failuredetector.catastrophic.error.types    
failuredetector.request.length.threshold    

Voldemortへ戻る / 技術メモへ戻る
メールの送信先:ひしだま