ドキュメント › Storia Cluster

Storia Relay

Storia Cluster のまとめ役。共有するワールドを保管し、どのワーカーがどこを動かすかを決めます。

Storia Relay は Storia Cluster のまとめ役です。

  • ワールドを保管します。普通の Minecraft のワールドフォルダ(Anvil 形式のリージョンファイル)と、プレイヤーデータ・ 進捗・統計、地図やスコアボードなどの共有データです。
  • ワールドを割り当てます。セル(32 × 32 チャンク)ごとに、同時に動かせるのは 1 台の Storia Worker だけです。
  • プレイヤーを配置します。近づいたプレイヤーは同じワーカーへ、忙しいワーカーの仕事は空いているワーカーへ移し、 境目にある回路のセルは一緒にしておきます。
  • Storia Proxy に伝えます。プレイヤーを別のワーカーへ移すタイミングです。

Relay に必要なのは Java 21 以上とワールド分のディスクだけで、Minecraft サーバーは要りません。ワールドを 動かす重い仕事はワーカーが行います。

導入#

  1. storia-relay-26.3.zip をダウンロードして展開します。
  2. 一度起動します。relay.properties を作って終了します。

    ./start-relay.sh        # Windows は start-relay.bat
    
  3. 合言葉(暗号化とセキュリティ を参照)を設定し、ワールドを cluster-world/ に置きます。

    bind=0.0.0.0
    port=25590
    secret=長い合言葉を決める
    compress=true
    cluster-world=cluster-world
    
  4. もう一度起動します。これ以降、cluster-world/ に書き込むのは Relay だけです。バックアップはここから取ります。

コンソール#

コマンド 内容
status 役割(本番・予備)、ワーカー、各ワーカーが動かしているセル、プレイヤー、移動、回路のつながり、読み書きの数、予備の状態。
promote 予備の Relay で使います。本番の Relay の代わりに、この Relay が本番になります(下の「予備の Relay」を参照)。
stop Relay を止めます。

Relay が止まったとき#

ワーカーは動き続けます。送れない書き込みは順番どおりワーカーのディスクの cluster-spool/ に貯め、Relay が戻ったら 送ります(ワーカーを再起動した後でも)。ワーカーはつながり直したときに、自分の場所をもう一度確保します。Relay が 戻るまで、新しいプレイヤーは入れず、移動も起きません。

予備の Relay#

バージョン

予備の Relay は Storia 26.2-10 以降の機能です(26.2-8-beta で先行公開)。

2 台目の Relay を予備として動かすと、本番の Relay が持っているものをすべて、その場で写し続けます。本番の マシンやディスクが壊れても、予備が引き継げるので、ワールドを失いません。

  • 書き込みを失わない:予備が同期済みの間は、本番と予備の両方に保存できてからワーカーに「保存した」と返します。 返事の前に本番が止まった書き込みは、ワーカーが新しい本番に送り直します。
  • 予備が止まっても本番は止まらない:予備が 2 秒返事をしないと、本番は予備なしで続けます(ログに警告が出ます)。 予備が戻ると、ワールドを写し直して同期済みに戻ります。
  • 切り替えは手動:本番が本当に止まったことを確かめてから、予備のコンソールで promote と打ちます。 ワーカーと Storia Proxy は、一覧の次の Relay に自分でつながり直し、待っていた書き込みを送ります。

設定#

# 本番の Relay(relay-a)の relay.properties
role=active
peer=relay-b:25590
# 予備の Relay(relay-b)の relay.properties。ワールドは空のままで構いません(最初に全部写します)
role=standby
peer=relay-a:25590

ワーカーの storia.yml と Storia Proxy の storia-proxy.toml には、両方の Relay を順番に書きます。

cluster:
  coordinator: "relay-a:25590,relay-b:25590"
[cluster]
coordinator = "relay-a:25590,relay-b:25590"

両方とも同じ secret を使います。予備には、本番と同じだけのディスク容量が必要です。

本番が止まったら#

  1. 本番の Relay が本当に止まっていることを確かめます(マシンが落ちた、ディスクが壊れたなど)。
  2. 予備のコンソールで promote と打ちます。 - 本番がまだ動いているときは断られます(ワールドを 2 か所で書かないため)。 - 予備が同期済みでなかったときも断られます。最近の書き込みが足りない可能性があるからです。それでも切り替えるときは promote force と打ちます。
  3. ワーカーと Storia Proxy は、数秒で新しい本番につながります。
  4. 古い本番を直したら、そのまま起動します。相手が引き継いだことに気づいて自分から予備になり、ワールドを写し直します。

役割と世代番号は、各 Relay の relay-state.txt に保存されます。動いている間は編集しないでください。

費用#

  • 書き込みのたびに、本番と予備の間の往復が 1 回増えます。本番の Relay の外向きの通信は、書き込みの分が約 2 倍になります。
  • 1 台のマシンで計測した事前生成(2,601 チャンク)では、予備なし 59 秒に対して予備あり 71〜84 秒でした。 計測は本番・予備・ワーカーがすべて同じマシンで CPU を取り合う条件です。

設定#

キー 初期値 内容
bind 0.0.0.0 待ち受けるアドレス。
port 25590 ワーカーと Storia Proxy 用のポート。
secret (空) 共通の合言葉。8 文字以上。必須。
compress true 暗号化の前にメッセージを圧縮します。
cluster-world cluster-world 共有するワールドのフォルダ。
role active active(本番)か standby(予備)。一度でも引き継いだり予備に戻ったりした Relay は、relay-state.txt に従います。
peer (空) もう 1 台の Relay の host:port。予備を使うときだけ設定します。