Storia Relay
Storia Cluster のまとめ役。共有するワールドを保管し、どのワーカーがどこを動かすかを決めます。
Storia Relay は Storia Cluster のまとめ役です。
- ワールドを保管します。普通の Minecraft のワールドフォルダ(Anvil 形式のリージョンファイル)と、プレイヤーデータ・ 進捗・統計、地図やスコアボードなどの共有データです。
- ワールドを割り当てます。セル(32 × 32 チャンク)ごとに、同時に動かせるのは 1 台の Storia Worker だけです。
- プレイヤーを配置します。近づいたプレイヤーは同じワーカーへ、忙しいワーカーの仕事は空いているワーカーへ移し、 境目にある回路のセルは一緒にしておきます。
- Storia Proxy に伝えます。プレイヤーを別のワーカーへ移すタイミングです。
Relay に必要なのは Java 21 以上とワールド分のディスクだけで、Minecraft サーバーは要りません。ワールドを 動かす重い仕事はワーカーが行います。
導入#
storia-relay-26.3.zipをダウンロードして展開します。-
一度起動します。
relay.propertiesを作って終了します。./start-relay.sh # Windows は start-relay.bat -
合言葉(暗号化とセキュリティ を参照)を設定し、ワールドを
cluster-world/に置きます。bind=0.0.0.0 port=25590 secret=長い合言葉を決める compress=true cluster-world=cluster-world -
もう一度起動します。これ以降、
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 を使います。予備には、本番と同じだけのディスク容量が必要です。
本番が止まったら#
- 本番の Relay が本当に止まっていることを確かめます(マシンが落ちた、ディスクが壊れたなど)。
- 予備のコンソールで
promoteと打ちます。 - 本番がまだ動いているときは断られます(ワールドを 2 か所で書かないため)。 - 予備が同期済みでなかったときも断られます。最近の書き込みが足りない可能性があるからです。それでも切り替えるときはpromote forceと打ちます。 - ワーカーと Storia Proxy は、数秒で新しい本番につながります。
- 古い本番を直したら、そのまま起動します。相手が引き継いだことに気づいて自分から予備になり、ワールドを写し直します。
役割と世代番号は、各 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。予備を使うときだけ設定します。 |