LoginSignup
1
1

More than 5 years have passed since last update.

データロスト時の挙動(LOST action)と対応

Last updated at Posted at 2015-12-10

設定した冗長度以上の数のサーバが落ちて、冗長度が0になってしまった場合のROMAの挙動と、その際の対処法です。

環境

server: 3台
冗長度: 2
vnode数: 512

冗長度が0になった時の挙動

冗長度0(data lost)したvnodesの数

上記の環境でサーバが2台落ちて、1台しかインスタンスが生き残っていない場合、計算上170のvnodesが冗長度0になりデータのwriteもreadもできなくなります
512 - {(512(vnodes)/3(server)) * 2(冗長度)}

  • 生き残ったインスタンスが担当しているvnodesは342
    • primary vnodesが 512(vnodes)/3(server) ≒ 171
    • 同じくsecondary vnodesが512(vnodes)/3(server) ≒ 171
    • primaryとsecondaryを同じインスタンスが担当することはないので合わせて342
  • primaryかsecondaryどちらか生き残っていればdataの読み書きは出来るので、完全にアクセス出来ないvnodesは512-342=170vnodesになる
  • このvnodesのことをlost_vnodesと言います
> stat lost_vnodes
  routing.lost_vnodes 0 # 正常時は0

挙動

lost_vnodesが発生した場合のROMAの挙動はconfigファイルの設定によって3パターンに分かれます。

no_action

  • 何もしません
  • lostしたvnodesにはwriteもreadも出来ないままです

auto_assign(デフォルト設定)

  • 新たに生き残っているinstanceにlostしたvnodesを再アサインします
  • lostする前のdataはread出来ませんが、writeと、lost後にwriteしたdataはreadできます

shutdown

  • lostが発生した時点でROMAクラスターを停止します

設定の確認方法

config.rb

config.rb
.
.
# :no_action | :auto_assign | :shutdown
DEFAULT_LOST_ACTION = :auto_assign
.
.

stat

> stat lost_action
  routing.lost_action auto_assign

lostが発生した時の対処法

no_action, auto_assignの場合

  • 新しいインスタンスを追加(join)します
  • no_actionの場合はlostしたvnodesを優先的に、auto_assignの場合は全体のvnodesから満遍なくjoinされたインスタンスに再アサインされます
  • (落ちたサーバのinstanceをそのままjoinして戻しても構いませんが、落ちた原因を調べてからにした方がbetterでしょう)

joinの方法

shutdown

  • ROMAが停止した状態になるので、再度全インスタンスを立ち上げなおします
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