FAQ
質問
- インストレーション
- Q. TokyoCabinetのコンパイルがエラーになった...
- Q. TokyoCabinetのインストールがエラーになった..
- Q. libyamlをインストールしたが、ROMAが動作しない...
- Q. ROMAを起動したにも拘らず、process No. が表示され、プロセスが起動しない。
- 構造
- Q. vnodeのカウントをどうやって変更するか?
- Q. メモリの使用率をどうやって変更するか?
- Q. メモリ率の設定を上回るサイズを設定すると何が起きるか?
- Q. short vnodeとは何か?
- Q. vnodeで何が失われたか?
- 機能
- ストレージ
- その他
- エラーメッセージ
- line 253: cap: command not found
- roma/plugin/plugin_***.rb (LoadError)
- libtokyocabinet.so.9: cannot open shared object file
- EM connection expired at ***.***.***.**_*****,remains 15
- rset NOT_STORED:error:0 > 300 && cmp_clk(7,8)>=0 3774873600 key_6843oma 3778788880 7 2147483647
- WARN -- : forward xxx(get , set, delete....)
- Send command failed that node-id is #{Host}_#{port},command is whoami
- 実行が有効期限切れになった
- `require': no such file to load -- sqlite3 (LoadError)
質問
インストール
Q. TokyoCabinetのコンパイルがエラーになった...
ライブラリ(bzip2-devel) がインストールされなかった可能性があります。
インストールしてください。
Q. TokyoCabinetのインストールがエラーになった..
よくあるのはパーミッションのエラーです。
ディレクトリのパーミッションをチェックしてください。
Q. libyamlをインストールしたが、ROMAが動作しない...
RVMを使ってRubyをインストールする場合。
Rubyをインストールする前にlibyaml-develをインストールします。
Q. ROMAを起動したにも拘らず、process No. が表示され、プロセスが起動しない。
この問題は、ROMAがパーミッションエラーによりデータディレクトリを作成できなかった場合に起こります。
ディレクトリのパーミッションをチェックしてください。
構造
Q. vnodeのカウントをどうやって変更するか?
-d オプションを使ってルーティングファイルを再構築します(vnodes は 2 ** のパラメータです)。
そして、このルーティングファイルを使ってROMAを再起動します。
- vnodes = 1024(2 ** 10) の場合
- vnodes = 2048(2 ** 11) の場合
$ bin/mkroute -d 10 localhost_10001 localhost_10002 .....
$ bin/mkroute -d 11 localhost_10001 localhost_10002 .....
Q. メモリの使用率をどうやって変更するか?
config.rb(STORAGE_OPTION)を修正してメモリの使用率を変更することができます。
- xmsiz(bytes)
各tcファイルごとに使うことができるメモリ量
xmsiz * tc file count = ROMAの消費メモリ
STORAGE_OPTION = "bnum=5000000#xmsiz=80000000#opts=d#dfunit=10"
例) [xmsiz=80000000] & [tc file(dfunit) = 10] & [instance = 2] の場合には、このROMAは各サーバの中でROMAのために1.6GBメモリを使用します。
80000000(bytes) * 10(tc files) * 2(instance) = 1.6GB/server
Q. メモリ率の設定を上回るサイズを設定すると何が起きるか?
ROMAは動作することができますが、おそらくパフォーマンスの低下が起きるでしょう。
Q. short vnodeとは何か?
- short vnodes は冗長性が低いvnodeです。
- しかし、set/get データをすることができます。
-
基本的にROMAの冗長性は2です(カスタマイズすることができます)。
ROMAが1つのクラスタ内に複製データを持つことを意味します。
通常のノードは両方のデータにアクセスすることができます。
しかしshort vnodeは一つのデータにのみアクセスすることができます。
それを"冗長性の低下"と呼びます。
Q. vnodeで何が失われたか?
- 紛失したvnodeは冗長性の無いvnodeです。
- そして、set/get データ をすることができません。
-
基本的にROMAの冗長性は2です(カスタマイズすることができます)。
ROMAが1つのクラスタ内に複製データを持つことを意味します。
通常のノードは両方のデータにアクセスすることができます。
しかし紛失したvnodeは両方のデータにアクセスすることができません。
つまり、データにアクセスすることができません。
それを"data lost"と呼びます。
- しかし、設定のlost設定が"auto_assign"の場合には、基本的にROMAはノードを自動的に再割り当てします。
機能
Q. ROMAは遅延書き込みファイルのための自動削除機能を持つか?
- いいえ。なぜなら、遅延書き込みファイルは事故あるいは問題を調査する価値があるからです。
Q. 値を設定できない。
-
ROMAは全てのプロセスの起動およびお互いの認識後にデータを管理することができます。
ですので全てのプロセスが起動しているかどうかを確認してください。
Q. joinコマンドが動作しない。
-
もしvnode数がROMAノード数よりも少ない場合には、joinコマンドを使うことができません。
ですのでその数を増やす必要があります。 - div_bits:
- 4 => 16 vnode
- 11 => 1024 vnode
ストレージ
Q. ROMAのキーリストをどうやって取得することができるか?
キー リスト コマンドあるいはツールを使ってください。
-
キー リスト コマンド (ROMA コマンド)。
このコマンドは全てのデータのチェック後にデータディレクトリの下にキーリストファイルを作成します。
[regexp]オプションを使って特定のキー名を取得することができます。 - キー リスト ツール (シェルコマンド)。
set_cleanup_regexp [regexp]
例) set_cleanup_regexp ^abc
このツールを使う前にROMAのプロセスをkill します。
ROMAを停止せずにこのツールを使いたい場合は、データディレクトリをコピーしロックファイルを削除してください。
ROMAを停止せずにこのツールを使いたい場合は、データディレクトリをコピーしロックファイルを削除してください。
$ bin/key_list ${tc file directory path}
例)
$ bin/key_list /roma/act/ds/localhost_10001
### roma localhost_10001/roma
key1
key2
.
.
.
done
Q. tcファイルのhealthをどうやってチェックできるか?
- TokyoCabinet はチェックツールを提供します。
$ cd ${tokyo-cabinet HOME direcotry}/bin
$ ./tchmgr inform ${tc file's path}
例えば)
$ ./tchmgr inform /usr/local/src/20140124/3.tc
path: /usr/local/src/20140124/3.tc
database type: hash
additional flags: fatal
bucket number: 3145721
alignment: 16
free block pool: 1024
inode number: 40648
modified time: 2014-01-24T18:35:00+09:00
options: deflate
record number: 87901
file size: 976008944
http://fallabs.com/tokyocabinet/spex-en.html
Q. 各キーの有効期限をどうやってチェックできるか?
- key_access ツールは指定されたキーの有効期限を表示します。
使い方:
$ bin/key_access ${storage-path} ${key} -v
- ${storage directory} : ROMA ストレージ ディレクトリ。
- ${key} : 有効期限を取得したいキーの名前。
- ROMAがロックファイルを持つ場合は、このツールを使うことができません。ですので、このツールを使う前にROMAを停止するかスナップショットを取ってください。
- スナップショットファイルに対してこのツールを使う場合は、ファイル名の最後の日付を削除してください("0.tc.20150914145903" => "0.tc")。
例えば)
$ bin/key_access /ds/localhost_10001 foo -v
hash : roma
vnode: 2667577344
last : 2015-09-14 14:58:37 +0900
clock: 0
expt : 2015-09-14 15:58:37 +0900 <===This is the expired date
value: bar
その他
Q. ログのシフトとローテートの挙動について。
- configファイル(config.rb)をチェックしてください。
- LOG_SHIFT_SIZE
ログファイルがこの値までサイズが大きくなっていた場合は、ROMAはログのバックアップファイルを作成します。 - LOG_SHIFT_AGE
ROMAがどれだけ古いログのバックアップファイルを保持するか。
Q. "kill -9 $process_no"の操作をしROMAを再び開始した時に、再起動できない。
-
もし偶然にROMAプロセスがダウンすると、ロックファイルはその状態を維持します。
この場合、データディレクトリの下にある'lock file'を削除し、ROMAを再び開始しなければなりません。
エラーメッセージ
line 253: cap: command not found
- Rubyのパスが設定されていません。設定してください。
roma/plugin/plugin_***.rb (LoadError)
-
[config.rb]に設定されているプラグインがプラグインディレクトリの中に配置されていない。
正しく配置するか、config.rbから記述を削除します。
libtokyocabinet.so.9: cannot open shared object file
-
It happened by TokyoCabinet can't call library(libtokyocabinet.so.9).
ですので、libtokyocabinet.so.9が含まれるディレクトリをLD_LIBRARY_PATH(環境変数)に設定してください。
EM connection expired at ***.***.***.**_*****,remains 15
-
このログがあまりにも多くある場合、幾つかの設定パラメータを変更しなければなりません。
ネットワークの再接続のコストによって高いレイテンシが起きているかもしれません。 - それを避けるには、以下の設定をお勧めします。
# CONNECTION_EMPOOL_EXPTIME = 30 #=> default on v1.0.0
CONNECTION_EMPOOL_EXPTIME = 600
# CONNECTION_EMPOOL_MAX = 15 #=> default on v1.0.0
CONNECTION_EMPOOL_MAX = 30
rset NOT_STORED:error:0 < 300 && cmp_clk(7,8)<=0 3774873600 key_6843oma 3778788880 7 2147483647
WARN -- : forward xxx(get , set, delete....)
- このメッセージは"not covered instance"が命令され、インスタンスが"covered instance"を転送するというものです。
- 誰かがtelnetコマンドを使うなどしてデータを直接更新したか、主要なインスタンスがbusyでリクエストを2次のインスタンスに渡した時に起こります。
Send command failed that node-id is #{Host}_#{port},command is whoami
- このメッセージはhealth-checkが失敗し、ROMAインスタンスがお互いにhealth-checkをするというものです。
- また、health-checkが何回も失敗した場合に、ROMAインスタンスはインスタンスがダウンしていると判断します。config.rbファイルで判定の回数を設定することができます。
実行が有効期限切れになった
-
このメッセージは接続エラーに関するものです。
このメッセージが1日あたり数回出る場合は問題ありません。 -
以下は原因を調べる方法です
- set_hilatency_warn_time = 1 second に設定します。
- 同時に Hi_Latency caution が起きることを確認します。
- 上のことが起きる場合、おそらく接続のレイテンシが原因です。
`require': no such file to load -- sqlite3 (LoadError)
-
このメッセージはRubyのライブラリのエラーを示します。
ですので、Sqlite3のRuby-gemのライブラリをインストールしてください。