鳥居です。
> 1) DATACOPY_STREAM_COPY_WAIT_PARAM パラメータの単位は、「秒」でしょうか?
単位は秒になります。
>2) 以下のWeb の記事を読むと、サーバ障害が発生した時に残ったサーバで円を作り直す
> 処理「フェイルオーバー」機能があると記載されています。
>
http://ascii.jp/elem/000/000/143/143399/
> この時に、残ったサーバで冗長化を担保するようなデータの再配分処理は行われない
> のでしょうか?
> また、別のタイミングでデータの再配分処理が行われるとしたら、それはどのような
> タイミングでしょうか?
>3) サーバ障害が発生して一部のデータについて冗長化の担保ができなくなった場合、
> 手動でデータの再配分処理を行わせて、再度冗長化を担保させる事は可能でしょうか?
> 可能な場合は、その方法をお教え下さい。
ROMA はサーバ障害を検知するとフェイルオーバします。
ご指摘の通りフェイルオーバ後は冗長度が低いデータが発生します。
冗長度低下の有無は telnet をして stats と入力することで確認できます。
下記の routing.short_vnodes の値が 0 の場合は冗長度低下はありません。
routing.short_vnodes 0
この数値が 0 以上の場合は、その個数のバーチャルノードに配置されたデータの
冗長度が低下しています。その場合は、手動で telnet し recover と入力します。
recover コマンドのタイミングでデータの再配分が行われます。
recover 中に stats を打って頂けると、routing.short_vnodes の値が減っていく
様子が観測できます。0 になると再配分は終了します。
再配分の起動を自動化する機能はありません。もしも自動化する場合は、ユーザによる監視
ツールで routing.short_vnodes 等の値をチェックし recover を入力する様な物を
作り込んでください。
これらの記事は OSS として公開する前に書かれたもので、その後アーキテクチャが変更されています。
大きな変更点としてはバーチャルノードと言う概念を導入したことにあります。
これはハッシュ空間を細かく分割し仮想的な複数のバケツを作り、そこにデータを配置する方式です。
stats コマンドで見た routing.short_vnodes の vnodes はバーチャルノードの数を意味しています。
上記の資料では前後のノードに冗長データを保持するように書かれておりますが、現在はバーチャル
ノード単位に異なる任意のサーバに冗長化されるようになりました。
冗長度の設定は mkroute で経路表を作成する段階で任意の冗長度が設定可能です。
良く使われそうな2をデフォルトとしています。
冗長度の最大値はございませんが、あまり多いとレイテンシが大きくなりますのでご注意ください。
ROMA のネットワーク処理は ruby のコンテキストスイッチの影響を回避するために
リアクタモデルを採用しております。このモデルはコマンドを1スレッドで処理するもので、
そのトレードオフとして冗長化が非同期に行われません。2~3がお勧めです。
以上、よろしくお願いします。