Solana Mainnet Validator - Миграция без простоя
🚀 Процедура миграции без простоя
В этом руководстве объясняется, как перенести существующий Solana mainnet validator на новый сервер без простоя.
Предварительные требования
Убедитесь, что уже настроены следующие два validator-узла:
- Активный узел Mainnet Validator (исходный, From)
- Новый узел Mainnet Validator (целевой, To)
⚠️ Оба узла должны быть настроены с помощью команды
slv v init.Убедитесь, что у вас уже есть запасной сервер. Если запасного сервера нет, выполнение этой процедуры может остановить активный validator и привести к сбою системы.
Оба узла должны быть полностью синхронизированы с последним slot (проверьте командой
solana catchup; разница по slot должна быть 0).В этом примере validator-узлы называются так:
- Имя исходного узла (активный, From):
main-node - Имя целевого узла (новый, To):
spare-node
⚠️ Оба узла должны иметь идентичные конфигурации, кроме IP-адресов (
ansible_host) и имен.Публичные ключи, используемые для обоих узлов:
yaml
identity_account: FgYddqZuWLWiHCxWGG3J7VdzD2TGcCzKEZTHWdeHSLV
vote_account: oY4zjHQuRE1MQYAnQmfrodoXukBkfGVfYWUZNrn7SLV
authority_account: hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVidentity_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 › 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 › hY9VpH6ahHLS4uhegd16cQ5wNaicejVtv2PxrzRySLVРазвертывание и синхронизация целевого узла
Сначала разверните целевой узел:
bash
slv v deploy -n mainnet -p spare-nodeslv v deploy -n mainnet -p spare-nodeУбедитесь, что синхронизация завершена и разница по slot равна 0.
Проверка конфигурации исходного и целевого узлов
Убедитесь, что конфигурации обоих узлов идентичны, с помощью:
bash
cat ~/.slv/inventory.mainnet.validators.ymlcat ~/.slv/inventory.mainnet.validators.yml⚠️ Оба узла должны иметь одинаковые настройки, кроме
ansible_host (IP-адрес) и name.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
...Выполнение миграции validator-узла
Выполните миграцию узла следующими командами:
1. Выберите сеть Solana
bash
slv v switch
? Select Solana Network (mainnet)
testnet
❯ mainnetslv v switch
? Select Solana Network (mainnet)
testnet
❯ mainnet2. Введите имя исходного validator
bash
✨ Switching Mainnet Validator Identity...
? From Validator Name › main-node✨ Switching Mainnet Validator Identity...
? From Validator Name › main-node3. Введите имя целевого validator
bash
? To Validator Name › spare-node? 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 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 IdentityМиграция вашего validator-узла завершена.