Solana Testnet Validator - 제로 다운타임 마이그레이션
🚀 제로 다운타임 마이그레이션 절차
이 가이드는 기존 Solana 테스트넷 검증자를 다운타임 없이 새 서버로 마이그레이션하는 방법을 설명합니다.
전제 조건
다음 두 검증자 노드가 이미 설정되어 있는지 확인하세요:
- 활성 테스트넷 검증자 노드 (소스)
- 새 테스트넷 검증자 노드 (대상)
⚠️ 두 노드 모두
slv v init 명령으로 설정되어 있어야 합니다.예비 서버가 이미 준비되어 있는지 확인하세요. 예비 서버가 없는 상태에서 이 절차를 실행하면 활성 검증자가 중단되어 시스템 크래시가 발생할 수 있습니다.
두 노드 모두 최신 슬롯까지 완전히 동기화되어 있어야 합니다(
solana catchup으로 확인하며, 슬롯 차이는 0이어야 합니다).이 예에서는 검증자 노드의 이름을 다음과 같이 지정합니다:
- 소스 (활성, 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 testnet -p spare-nodeslv v deploy -n testnet -p spare-node동기화가 완료되었고 슬롯 차이가 0인지 확인합니다.
소스 노드와 대상 노드의 구성 확인
다음 명령으로 두 노드의 구성이 동일한지 확인합니다:
bash
cat ~/.slv/inventory.testnet.validators.ymlcat ~/.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: agavetestnet_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
mainnetslv v switch
? Select Solana Network (testnet)
❯ testnet
mainnet2. 소스 검증자 이름 입력
bash
✨ Switching Testnet Validator Identity...
? From Validator Name › main-node✨ Switching Testnet Validator Identity...
? From Validator Name › main-node3. 대상 검증자 이름 입력
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 testnet_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 testnet_validators
✅ Successfully Switched Validator Identity이제 검증자 노드 마이그레이션이 완료되었습니다.