🎊

Agaveテストネット再起動ガイド:2025年1月クラスタ停止からの復旧手順

2025/01/17に公開

🔄 Agaveテストネット再起動ガイド:2025年1月クラスタ停止からの復旧手順

👋 はじめに

前回の記事の(ある意味)続きです。

2025年1月15日に計画的なテスネットクラスタの停止が行われました。最終楽観スロットについては決定できましたが、クラスタの再起動はうまくいかず……テストネットの停止から一日が経過しました。
日本時間の16日早朝、AnzaのWill Hickeyより再起動指示が公開されました。

本記事では、この再起動プロセスについて解説します。

⚠️ 注意事項

この再起動は緊急性のないものです。通常の生活リズムを優先し、余裕のあるときに実施してください。

🎯 再起動の要件

v2.0.22でテストネットを再起動するには、メインネットベータでまだ有効化されていない8つのフィーチャーゲートのロールバックが必要です。

📝 パラメータ一覧

Attribute Value
Validator version Agave: v2.0.22 (and v2.1.9 for creating the snapshot)
Snapshot slot 312256120
Restart slot 312256121
Shred version 64475
Expected bank hash 6A7U1X8WqnWRXWtqaxF15sSYHLT66j1ycBEyFigGwr2Z

🛠️ 再起動手順

1️⃣ バリデータープロセスの停止

まずは既存のバリデータープロセスを停止します。

2️⃣ Agave v2.1.9のインストール

これはステップ3で正しいスナップショットを作成するために必要です。

agave-install init v2.1.9

📌 Frankendancerユーザーへの注意点

Frankendancerの場合、この再起動とその後のアップグレード/ダウングレードサイクルのために、Agaveに切り替えてください。

3️⃣ スナップショットの作成

このコマンドはスナップショットを作成しますが、有効化されたv2.1フィーチャーゲートアカウントを1つ削除します。

agave-ledger-tool --ledger <ledger-path> create-snapshot \
--incremental \
--snapshot-archive-path  <snapshot-path> \
--hard-fork 312256120 \
--deactivate-feature-gate \
    3opE3EzAKnUftUDURkzMgwpNgimBAypW1mNDYH4x4Zg7 \
    CLCoTADvV64PSrnR6QXty6Fwrt9Xc6EdxSJE4wLRePjq \
    tSynMCspg4xFiCj1v3TDb4c7crMR5tSBhLz4sF7rrNA \
    4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky \
    2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV \
    8U4skmMVnF6k2kMvrWbQuRUT3qQSiTYpSjqmhmgfthZu \
    CGB2jM8pwZkeeiXQ66kBMyBR6Np61mggL7XUsmLjVcrw \
    CJzY83ggJHqPGDq8VisV3U91jDJLuEaALZooBrXtnnLU \
--enable-capitalization-change \
--  312256120 <snapshot-path>

私の場合はsnapshotのあるディレクトリとledgerディレクトリが同じなので以下のようになります。

agave-ledger-tool --ledger /mnt/ledger create-snapshot \
--incremental \
--snapshot-archive-path /mnt/ledger \
--hard-fork 312256120 \
--deactivate-feature-gate \
    3opE3EzAKnUftUDURkzMgwpNgimBAypW1mNDYH4x4Zg7 \
    CLCoTADvV64PSrnR6QXty6Fwrt9Xc6EdxSJE4wLRePjq \
    tSynMCspg4xFiCj1v3TDb4c7crMR5tSBhLz4sF7rrNA \
    4eohviozzEeivk1y9UbrnekbAFMDQyJz5JjA9Y6gyvky \
    2Fr57nzzkLYXW695UdDxDeR5fhnZWSttZeZYemrnpGFV \
    8U4skmMVnF6k2kMvrWbQuRUT3qQSiTYpSjqmhmgfthZu \
    CGB2jM8pwZkeeiXQ66kBMyBR6Np61mggL7XUsmLjVcrw \
    CJzY83ggJHqPGDq8VisV3U91jDJLuEaALZooBrXtnnLU \
--enable-capitalization-change \
--  312256120 /mnt/ledger

🔍 成功時の出力例

出力には、以下のようなものが最後に(または最後に近い位置に)表示されるはずです

    Successfully created snapshot for slot 312256121, hash 6A7U1X8WqnWRXWtqaxF15sSYHLT66j1ycBEyFigGwr2Z, base slot: <BASE_SLOT>>: /home/sol/ledger-snapshots/incremental-snapshot-<BASE_SLOT>-312256121-<SNAPSHOT_HASH>.tar.zst
    Capitalization change: -7628160 lamports
    Shred version: 64475

Capitalization changeは、フィーチャーゲートを無効化したため、想定通りの表示です。各オペレーターのスナップショットファイル名には、異なるベーススロット番号とハッシュが含まれる可能性がありますが、以下の点が重要です。

  • バンクハッシュは6A7U1X8WqnWRXWtqaxF15sSYHLT66j1ycBEyFigGwr2Zであるべき
  • 2番目のスロット番号は312256121であるべき
  • shredバージョンは64475であるべき

スナップショットを作成したら、他のすべてのスナップショットをバックアップディレクトリに移動し、スナップショットディレクトリに1つのフルスナップショットと1つのインクリメンタル・スナップショットのみが含まれるようにしてください。

これら2つのファイル名の <BASE_SLOT> は一致している必要があります

snapshot-<BASE_SLOT>-<BASE_SNAPSHOT_HASH>.tar.zst
incremental-snapshot-<BASE_SLOT>-312256121-<SNAPSHOT_HASH>.tar.zst

スナップショットの作成に失敗した場合は、appendixを参照してください。

ちなみに私は失敗しました 😢

おそらく今回も同じ楽観的確定スロットを使いすでにスナップショットは存在するため、ほとんどの人も失敗すると思うので、appendixの数字をよく読んで実行してみてください。

前回と同じスナップショットは使えません

4️⃣ Agave v2.0.22をインストールする

これはクラスターを再起動するために使用したいバージョンです。

agave-install init v2.0.22

5️⃣ 起動設定の更新とバリデーターの起動

スタートアップ設定を更新し、バリデーターを起動します

--wait-for-supermajority 312256121 \
--expected-shred-version 64475 \
--expected-bank-hash 6A7U1X8WqnWRXWtqaxF15sSYHLT66j1ycBEyFigGwr2Z \

前回とexpected-bank-hashが異なることに注意。

バリデーターが起動すると、スロット312256121のスナップショットを読み込み、新しいブロックの生成/検証を開始する前に、80%のステークがオンラインになるのを待ちます。

再起動したバリデーターが正しく80%のステークを待っていることを確認するには、以下の定期的なログメッセージを探して確認してください

INFO  solana_core::validator] Waiting for 80% of activated stake at slot 312256121 to be in gossip...

RPCが有効になっている場合は、現在のスロットをsolanaコマンドで尋ねてください

solana --url http://127.0.0.1:8899 slot

312256121以外の数字は、手順を正しく完了していないことを意味します。

開始すると、ゴシップで「アクティブステーク」のログエントリが表示され、「ステークの80%が表示されるのを待機中」となるはずです。これでステークの進行状況を確認できます。

🔧 Appendix(ステップ3が失敗した場合のみ)

スナップショット作成失敗時の対処方法

このようなエラーが発生した場合。

Error: Slot 312256120 is not available

または以下のような表示の場合。

Unable to process blockstore from starting slot <slot> to 312256120; the ending slot is less than the starting slot. The starting slot will be the latest snapshot slot, or genesis if the --no-snapshot flag is specified or if no snapshots are found.

この場合、スナップショットディレクトリには、slot >312256120のスナップショットが含まれています。

slot<=312256120のスナップショットもある場合は、slot>312256120のスナップショットをバックアップディレクトリに移動し、agave-ledger-toolコマンドを再度実行してください。

slot<=312256120用のスナップショットがない場合は、スナップショットをダウンロードする必要があります。

スナップショットの作成に成功した場合は、上記の手順のステップ4から再開してください。スナップショットを作成できない場合は、以下のスナップショットのダウンロードに関する指示に従ってください。ローカルでスナップショットを作成できなかった場合は、これらのAppendixの手順に従ってください。

ステップ1: known validatorからスナップショットをダウンロードする

スロット312256121のスナップショットをローカルで生成できない場合は、known validatorからダウンロードする必要があります。

以下の行をスタートアッフスクリプトに追加してください。

--known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
--expected-shred-version 64475 \

スタートアップスクリプトに --no-snapshot-fetch フラグが存在する場合は、それを削除してください。

ステップ2: ダウンロード後、再起動

スナップショットディレクトリに新しいスナップショットがあることを確認してください。

スナップショットのダウンロードが完了したら、バリデータプロセスを停止します。
起動スクリプトに --no-snapshot-fetch フラグを追加します。
上記の手順のステップ4から再開してください。

🐍 蛇足

再起動後はスタートアップスクリプトから不要な行を削除しておきましょう!
万一忘れたままagaveのアップデートなどしたりすると面倒なことになります!

またmonitorコマンドで自分のIdentityでバリデーターが動いてる確認も忘れずに

$ agave-validator --ledger /mnt/ledger monitor
Ledger location: /mnt/ledger
Identity: <自分のアイデンティティ>
Genesis Hash: 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY
⠓ 00:29:41 | Processed Slot: 312280143 | Confirmed Slot: 312280143 | Finalized Slot: 312280110 | Full Snapshot Slot: 312267489 | In

追記

この記事を書いてる間に再起動成功していました。
今回は日本時間で早朝5時12分頃からの再起動だったので、かなり早かったのではないでしょうか?

Discussion