Solana Mainnet Validator - การย้ายแบบ Zero Downtime
🚀 ขั้นตอนการย้ายแบบ Zero Downtime
คู่มือนี้อธิบายวิธีย้าย Solana mainnet validator ที่มีอยู่ไปยังเซิร์ฟเวอร์ใหม่โดยไม่มี downtime
ข้อกำหนดเบื้องต้น
ตรวจสอบให้แน่ใจว่าได้ตั้งค่าโหนด validator สองโหนดต่อไปนี้ไว้แล้ว:
- โหนด Mainnet Validator ที่ใช้งานอยู่ (ต้นทาง, From)
- โหนด Mainnet Validator ใหม่ (ปลายทาง, To)
⚠️ ต้องตั้งค่าทั้งสองโหนดด้วยคำสั่ง
slv v initตรวจสอบให้แน่ใจว่าคุณมีเซิร์ฟเวอร์สำรองพร้อมใช้งานแล้ว หากไม่มีเซิร์ฟเวอร์สำรอง การทำตามขั้นตอนนี้อาจทำให้ validator ที่ทำงานอยู่ของคุณหยุดทำงานและทำให้ระบบล่มได้
ทั้งสองโหนดต้องซิงค์จนถึงสล็อตล่าสุดอย่างสมบูรณ์ (ตรวจสอบด้วยคำสั่ง
solana catchup โดยส่วนต่างของสล็อตต้องเป็น 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การ deploy และซิงค์โหนดปลายทาง
ให้ deploy โหนดปลายทางก่อน:
bash
slv v deploy -n mainnet -p spare-nodeslv v deploy -n mainnet -p spare-nodeตรวจสอบว่าการซิงค์เสร็จสมบูรณ์และส่วนต่างของสล็อตเป็น 0
ตรวจสอบการกำหนดค่าของโหนดต้นทางและปลายทาง
ยืนยันว่าการกำหนดค่าของทั้งสองโหนดเหมือนกันด้วยคำสั่ง:
bash
cat ~/.slv/inventory.mainnet.validators.ymlcat ~/.slv/inventory.mainnet.validators.yml⚠️ ทั้งสองโหนดต้องมีการตั้งค่าเหมือนกันทุกประการ ยกเว้น
ansible_host (ที่อยู่ IP) และ nameyaml
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 ของคุณเสร็จสมบูรณ์แล้ว