Solana Mainnet Validator - 제로 다운타임 마이그레이션

🚀 제로 다운타임 마이그레이션 절차

이 가이드는 기존 Solana 메인넷 검증자를 다운타임 없이 새 서버로 마이그레이션하는 방법을 설명합니다.

전제 조건

다음 두 검증자 노드가 이미 설정되어 있는지 확인하세요:
  1. 활성 메인넷 검증자 노드 (소스, From)
  2. 새 메인넷 검증자 노드 (대상, To)
⚠️ 두 노드 모두 slv v init 명령으로 설정되어 있어야 합니다.
예비 서버가 이미 준비되어 있는지 확인하세요. 예비 서버가 없는 상태에서 이 절차를 실행하면 활성 검증자가 중단되어 시스템 크래시가 발생할 수 있습니다.
두 노드 모두 최신 슬롯까지 완전히 동기화되어 있어야 합니다(solana catchup 명령으로 확인하며, 슬롯 차이는 0이어야 합니다).
이 예에서는 검증자 노드의 이름을 다음과 같이 지정합니다:
  • 소스 (활성, From) 이름: main-node
  • 대상 (신규, To) 이름: 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 mainnet -p spare-node
동기화가 완료되었고 슬롯 차이가 0인지 확인합니다.

소스 노드와 대상 노드의 구성 확인

다음 명령으로 두 노드의 구성이 동일한지 확인합니다:
bash
cat ~/.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
      ...

검증자 노드 마이그레이션 실행

다음 명령으로 노드 마이그레이션을 실행합니다:

1. Solana 네트워크 선택

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

2. 소스 검증자 이름 입력

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

3. 대상 검증자 이름 입력

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 mainnet_validators
✅ Successfully Switched Validator Identity
이제 검증자 노드 마이그레이션이 완료되었습니다.