LoginSignup
1
1

More than 5 years have passed since last update.

ROMA裏技とか

Last updated at Posted at 2015-12-21

ROMAのあまり知られていない機能や裏技的なものの紹介です

evalコマンド

plugin_debug.rbを読み込んでいる場合、ROMAコンソール上でevalコマンドが使用できます
ROMAに関する値を参照したり、値の書き換え、進行中のプロセスの強制終了などが可能です

> eval @stats
#<Roma::Stats:0x00000001a79fa8>

> eval @stats.log_level
debug

> stat run_recover
stats.run_recover true
END

> eval @stats.run_recover=false
false

> stat run_recover
stats.run_recover false
END

evalで参照できる値の例

> eval methods
[:ev_eval, :get_key_info, :ev_alist_at, :ev_alist_clear・・・・

> eval self
#<Roma::Command::Receiver:0x000000009d7f88>

> eval @storages["roma"]
#<Roma::Storage::TCStorage:0x00000001bdd160>

> eval @rttable
#<Roma::Routing::ChurnbasedRoutingTable:0x00000002acaa10>

!!コマンド

!!コマンドは一つ前に実行されたコマンドを繰り返します

> stat version_of_nodes
routing.version_of_nodes {"localhost_10001"=>66048, "localhost_10002"=>66048}
END

> !!
routing.version_of_nodes {"localhost_10001"=>66048, "localhost_10002"=>66048}
END

> stat lost_action
routing.lost_action auto_assign
END

> !!
routing.lost_action auto_assign
END

disabled_cmd_protectオプション

ROMAは整合性を保つために、起動時に他のインスタンスが全て立ち上がるまではコマンドを受け付けないようにしています
しかし--disabled_cmd_protectオプションを使用すれば、強制的にこのプロテクトをoffにすることが出来ます

$ romad ${address} -p ${port} --disabled_cmd_protect

failover機能

ROMAは常にインスタンス同士でヘルスチェックを行っており、サーバエラーなどでインスタンスが落ちるとすぐに検知してroutingの書き換えなどを行います
メンテナンスなどで一時的にROMA間のアクセスが途切れる場合など、なんらかの理由でこのfailover機能を一時的に無効化したい場合はswitch_failoverコマンドでon/offの切り替えができます

> stat failover
routing.enabled_failover true
END

> switch_failover off
{"localhost_10002"=>"DISABLED", "localhost_10001"=>"DISABLED"}

> stat failover
routing.enabled_failover false
END

コンソール上でのログの確認

plugin_gui.rbを読み込んでいる場合、コンソール上でもログを確認することが可能です

ログ取得
> gather_logs <start_date> [end_date]\r\n 
ログ表示
> show_logs\r\n 

> gather_logs 2015-12-21T00:00:00
STARTED

> show_logs
2015-12-21 04:26:50 +0000
I, [2015-12-21T03:56:28.401614 #1586]  INFO -- : roma/plugin/plugin_storage.rb loaded
I, [2015-12-21T03:56:28.419204 #1586]  INFO -- : roma/plugin/plugin_mapcount.rb loaded
I, [2015-12-21T03:56:28.419858 #1586]  INFO -- : roma/plugin/plugin_gui.rb loaded
I, [2015-12-21T03:56:28.420322 #1586]  INFO -- : roma/plugin/plugin_cmd_aliases.rb loaded
I, [2015-12-21T03:56:28.420734 #1586]  INFO -- : roma/plugin/plugin_test.rb loaded.
.
.
.
W, [2015-12-21T04:26:27.759137 #3045]  WARN -- : failover disable now!!
W, [2015-12-21T04:26:37.759377 #3045]  WARN -- : failover disable now!!
W, [2015-12-21T04:26:47.759665 #3045]  WARN -- : failover disable now!!
D, [2015-12-21T04:26:50.775155 #3045] DEBUG -- : asyncev_start_get_logs ["2015-12-21T00:00:00", "current"]
D, [2015-12-21T04:26:50.775305 #3045] DEBUG -- : get_logs:start.
END

latency測定

コマンドを指定して、latencyのaverageをログに出力することが出来ます
set_latency_avg_calc_rule [on/off, time, command1, command2,....]
add_latency_avg_calc_cmd [command1, command2,....]
del_latency_avg_calc_cmd [command1, command2,....]
chg_latency_avg_calc_time_count [count]

> set_latency_avg_calc_rule on 10 set get
{"localhost_10002"=>"ACTIVATED", "localhost_10001"=>"ACTIVATED"}

log file

.
.
D, [2015-12-21T04:32:13.645454 #3045] DEBUG -- : Latency average[set]: 1.06072156(denominator=3 max=1.47735364 min=0.81634303)
D, [2015-12-21T04:32:15.213215 #3045] DEBUG -- : Latency average[get]: 0.00016599(denominator=3 max=0.00019756 min=0.00014080)
.
.

get_routing_history

構築時のインスタンス情報を確認することが出来ます

> get_routing_history
localhost_10001
localhost_10002
END

routing event

インスタンスの追加や破棄などのイベントを確認することが可能です

> stat event
routing.event ["2015-12-21T04:36:39.814602 leave localhost_10002", "2015-12-21T04:37:07.812046 join localhost_20001"]

動的変更コマンド

ROMAの設定を変更するときは、config.rbを編集して起動時に--configオプションで読み込むことで反映できますが、ROMA起動後もconfigのほとんどの項目を変更することが可能です

> set_lost_action shutdown
{"localhost_10002"=>STORED, "localhost_10001"=>"STORED"}

> set_log_level info
STORED

> set_hilatency_warn_time 10
{"localhost_10002"=>STORED, "localhost_10001"=>"STORED"}

参照URL

ROMA Commands Page: http://roma-kvs.org/commands.html

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1