Solana テストネットバリデータ - ノーダウンタイム移行

🚀 ノーダウンタイムでの移行手順

既存のSolanaテストネットバリデータを停止せず、新しいサーバーへノーダウンタイムで移行する方法を説明します。

前提条件

以下の2つのバリデーターノードがセットアップされていることが前提です。
  1. アクティブなテストネットバリデーターノード(移行元, From)
  2. 新しいテストネットバリデーターノード(移行先, To)
⚠️ 新旧両方のノードは、必ず slv v init コマンドを使用してセットアップされたものでなければなりません。
また、必ずスペアのサーバーをすでに保有していることを確認してください。スペアのサーバーがない場合、この手順を実行すると稼働中のバリデータが停止し、システムがクラッシュする恐れがあります。
両ノードとも、最新スロットに同期していることを必ず確認してください。(solana catchup コマンドでスロット差が0であること)
以下の例では、それぞれのバリデーターノードの名前設定を以下の通りと仮定します。
  • 移行元(アクティブ, From)Name: main-node
  • 移行先(新規, To)Name: spare-node
⚠️ 両方のノードは、IPアドレス(ansible_host)と名前以外のすべての設定を同じにしてください。
また、それぞれ利用する公開鍵のアドレスは下記のとおりです。
yaml
identity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLV

新しいスペアノードのセットアップ例

新しいスペアノードをセットアップするためには、以下のようにコマンドを実行します。
bash
slv v init . . ? Do you want to create a new identity key now? (Y/n) › No ? Please Enter Your Identity Public Key › FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV ? Enter Inventory Name (FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV) › epics-spare-node ? Do you want to create a new vote account key now? (Y/n) › No ? Please Enter Your Vote Account Public Key › oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV ? Please Enter Your Vote Account's Authority Key › hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLV

移行先ノードのデプロイと同期確認

まず、移行先のノードをデプロイします。
bash
slv v deploy -n testnet -p spare-node
同期が完了し最新スロットとの差が0になったことを必ず確認します。

移行元と移行先の設定が正しいことを確認します

移行元と移行先の設定が正しいことを確認するために、以下のコマンドを実行します。
bash
cat ~/.slv/inventory.testnet.validators.yml
⚠️ 両方のノードは、IPアドレス(ansible_host)と名前以外のすべての設定を同じにしてください。
yaml
testnet_validators: hosts: main-node: name: main-node ansible_host: XXX.XXX.XXX.XXX ansible_user: solv ansible_ssh_private_key_file: ~/.ssh/id_rsa identity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLV validator_type: agave spare-node: name: spare-node ansible_host: YYY.YYY.YYY.YYY ansible_user: solv ansible_ssh_private_key_file: ~/.ssh/id_rsa identity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLV validator_type: agave

バリデーターノードの移行実行

以下のコマンドでノードの移行を実施します。

1. Solana ネットワークを選択

bash
slv v switch ? Select Solana Network (testnet) ❯ testnet mainnet

2. 移行元バリデーターの名前(name)を入力

bash
✨ Switching Testnet Validator Identity... ? From Validator Name › main-node

3. 移行先バリデーターの名前(name)を入力

bash
? To Validator Name › spare-node
成功すると以下のような出力が表示されます。
bash
PLAY RECAP ******************************************************************** main-node : ok=3 changed=1 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0 spare-node : ok=4 changed=3 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0 Successfully swapped hosts spare-node and main-node in testnet_validators ✅ Successfully Switched Validator Identity
以上で、ノードの移行は完了です。