Solana Mainnet Validator - Migration ohne Ausfallzeit
🚀 Ablauf der Migration ohne Ausfallzeit
Dieser Leitfaden erklärt, wie Sie einen bestehenden Solana-Mainnet-Validator ohne Ausfallzeit auf einen neuen Server migrieren.
Voraussetzungen
Stellen Sie sicher, dass die folgenden zwei Validator-Knoten bereits eingerichtet sind:
- Aktiver Mainnet-Validator-Knoten (Quelle, „From“)
- Neuer Mainnet-Validator-Knoten (Ziel, „To“)
⚠️ Beide Knoten müssen mit dem Befehl
slv v init eingerichtet sein.Stellen Sie sicher, dass bereits ein Ersatzserver verfügbar ist. Wenn Sie keinen Ersatzserver haben, könnte die Ausführung dieses Verfahrens Ihren aktiven Validator anhalten und einen Systemabsturz verursachen.
Beide Knoten müssen vollständig auf den neuesten Slot synchronisiert sein (prüfen Sie dies mit dem Befehl
solana catchup; die Slot-Differenz muss 0 sein).In diesem Beispiel heißen die Validator-Knoten wie folgt:
- Name der Quelle (aktiv, „From“):
main-node - Name des Ziels (neu, „To“):
spare-node
⚠️ Beide Knoten müssen bis auf die IP-Adressen (ansible_host) und die Namen identische Konfigurationen haben.
Öffentliche Schlüssel, die für beide Knoten verwendet werden:
yaml
identity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV
vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV
authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVidentity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV
vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV
authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVNeuen Ersatzknoten einrichten
Richten Sie den neuen Ersatzknoten mit folgendem Befehl ein:
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 › hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVslv 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 › hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVZielknoten bereitstellen und synchronisieren
Stellen Sie zuerst den Zielknoten bereit:
bash
slv v deploy -n mainnet -p spare-nodeslv v deploy -n mainnet -p spare-nodePrüfen Sie, ob die Synchronisierung abgeschlossen ist und die Slot-Differenz 0 beträgt.
Konfiguration von Quell- und Zielknoten prüfen
Prüfen Sie mit folgendem Befehl, ob die Konfigurationen beider Knoten identisch sind:
bash
cat ~/.slv/inventory.mainnet.validators.ymlcat ~/.slv/inventory.mainnet.validators.yml⚠️ Beide Knoten müssen bis auf
ansible_host (IP-Adresse) und name identische Einstellungen haben.yaml
mainnet_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
...mainnet_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
...Migration des Validator-Knotens ausführen
Führen Sie die Knotenmigration mit den folgenden Befehlen aus:
1. Solana-Netzwerk auswählen
bash
slv v switch
? Select Solana Network (mainnet)
testnet
❯ mainnetslv v switch
? Select Solana Network (mainnet)
testnet
❯ mainnet2. Namen des Quell-Validators eingeben
bash
✨ Switching Mainnet Validator Identity...
? From Validator Name › main-node✨ Switching Mainnet Validator Identity...
? From Validator Name › main-node3. Namen des Ziel-Validators eingeben
bash
? To Validator Name › spare-node? To Validator Name › spare-nodeNach erfolgreicher Migration sehen Sie eine Ausgabe ähnlich der folgenden:
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 mainnet_validators
✅ Successfully Switched Validator IdentityPLAY 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 mainnet_validators
✅ Successfully Switched Validator IdentityDie Migration Ihres Validator-Knotens ist jetzt abgeschlossen.