Solana Mainnet 검증자 - 빠른 시작
소개
Solana 메인넷 검증자를 배포하려면 SLV 커맨드라인 도구를 사용합니다.
이 빠른 시작 가이드에서는 메인넷 검증자 핫 스페어를 시작하고 배포하는 방법을 설명합니다.
서버에 Ubuntu 24.04 LTS가 클린 설치되어 있어야 합니다.
베어메탈 서버 준비
VPS나 가상 머신(VM)에서 Solana 노드를 실행하는 것도 가능하지만, 최적의 성능과 안정적인 운영을 달성하기는 어렵습니다. Solana는 베어메탈 서버 사용을 공식적으로 권장합니다.
메인넷 검증자는 혼잡 시에도 안정적으로 동작하도록 프로비저닝해야 합니다.
다음은 Solana / Agave / Firedancer 공식 문서에 기반한 가이드라인입니다.
다음은 Solana / Agave / Firedancer 공식 문서에 기반한 가이드라인입니다.
Agave Validator (공식 요구 사항 및 권장 사항)
SOL 요구 사항
- 엄격한 최소 SOL 요구 사항은 없습니다
- Vote Account가 rent-exempt가 되려면 0.02685864 SOL이 필요합니다
- 투표 트랜잭션에는 하루 최대 약 1.1 SOL이 소요될 수 있습니다
하드웨어 요구 사항 (가이드라인)
| 구성 요소 | Validator | RPC Node (참고) |
|---|---|---|
| CPU | 2.8GHz+ / AMD Gen3+ / Intel Ice Lake+ / SHA extensions / AVX2 | 16 cores / 32 threads+ |
| RAM | 256GB+ | 512GB+ |
| Disk | NVMe Gen3 x4 이상 / Accounts-Ledger-Snapshots 분리 권장 | 대용량 권장 |
| GPU | 불필요 | 불필요 |
참고:
코어 수보다 클럭 속도와 실효 스루풋이 더 중요하다고 간주됩니다.
Firedancer (Frankendancer)
Firedancer (Frankendancer)는 현재 Agave에 의존하므로,
최소한 Agave 권장 구성 이상을 전제로 합니다.
최소한 Agave 권장 구성 이상을 전제로 합니다.
최소
- 24코어 CPU @ >2.8GHz
- 256GB RAM
- 2TB NVMe (High TBW)
권장
- 32코어 CPU @ >3GHz (AVX512 지원)
- 512GB RAM (ECC)
- Accounts / Ledger 분리
- 1Gbps 이상의 네트워크 대역폭
비용 대비 성능의 균형을 맞춘 구성으로는 24코어 CPU와 384GB RAM의 Agave가 실용적인 가이드라인입니다.
slv v init 명령을 실행하면 베어메탈 서버가 이미 설정되어 있는지 묻습니다:bash
➜ slv v init
? Select Solana Network (testnet) › mainnet
? 🛡️ Do you have a Solana Node Compatible Server? (no)
❯ yes
no➜ slv v init
? Select Solana Network (testnet) › mainnet
? 🛡️ Do you have a Solana Node Compatible Server? (no)
❯ yes
no이 튜토리얼에서는
yes를 선택했다고 가정합니다.아직 베어메탈 서버를 준비하지 않았다면 베어메탈 서버 설정 가이드를 참조하세요.
또한 다음 자료도 유용합니다:
Solana Mainnet Firedancer Jito 검증자 배포
SLV 신규 배포에서는 항상
unstaked-keypair.json을 아이덴티티 키로 사용합니다.
이는 이중 투표 등의 문제를 방지하기 위한 모범 사례입니다.따라서 배포 후에는
slv v set:identity로 인증된 아이덴티티 키를 설정하세요.대부분의 메인넷 검증자 운영에서는
slv v switch로 아이덴티티 키를 변경합니다.
노 다운타임 마이그레이션에 대해서는 이 가이드를 참조하세요.Solana 네트워크 선택
배포할 Solana 네트워크를 선택합니다.
bash
slv v init
? Select Solana Network (mainnet)
testnet
❯ mainnetslv v init
? Select Solana Network (mainnet)
testnet
❯ mainnet서버 기본 사용자명 입력
대부분의 경우 기본 사용자명은
ubuntu 또는 root입니다.bash
? What's the user for the server? (ubuntu) › ubuntu? What's the user for the server? (ubuntu) › ubuntu서버 IP 주소 입력
서버의 IP 주소를 입력합니다.
bash
? What's the IP address of the server? ›? What's the IP address of the server? ›SSH용 RSA 키 설정
※ RSA 키의 경로를 설정하세요. 기본 경로는
~/.ssh/id_rsa입니다.bash
? What's the path to your RSA key? (~/.ssh/id_rsa) › ~/.ssh/id_rsa
🔍 Checking SSH connection...
✔︎ SSH connection succeeded? What's the path to your RSA key? (~/.ssh/id_rsa) › ~/.ssh/id_rsa
🔍 Checking SSH connection...
✔︎ SSH connection succeeded그러면 SLV가 서버와의 연결을 확인합니다. 연결에
성공하면 다음 단계가 표시됩니다.
Solana 검증자 타입 선택
Solana 검증자의 타입을 선택합니다.
bash
? Select Validator Type (firedancer-jito)
agave
jito
jito-bam
firedancer-agave
❯ firedancer-jito? Select Validator Type (firedancer-jito)
agave
jito
jito-bam
firedancer-agave
❯ firedancer-jito커미션 비율 설정
검증자의 커미션 비율을 설정합니다.
※ 1000은 10%입니다.
bash
? Enter Commission BPS (Max 1000 = 10%) (1000)? Enter Commission BPS (Max 1000 = 10%) (1000)Solana 검증자 아이덴티티 키 생성 또는 설정
새 아이덴티티 키를 생성하거나 기존 아이덴티티 키를 설정할 수 있습니다.
이 예제에서는 "epics-sub"라는 이름으로 기존 아이덴티티 키를 설정하는 방법을 보여줍니다.
bash
? Do you want to create a new identity key now? (Y/n) › No
? Please Enter Your Identity Public Key › KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM
? Enter Inventory Name (KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM) › epics-sub
⚠️ Please place your identity key in
~/.slv/keys/KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM.json
.
.
✔︎ Success
✔ Inventory updated to ~/.slv/inventory.yml
✔ Successfully created solv user on x.x.x.x? Do you want to create a new identity key now? (Y/n) › No
? Please Enter Your Identity Public Key › KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM
? Enter Inventory Name (KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM) › epics-sub
⚠️ Please place your identity key in
~/.slv/keys/KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM.json
.
.
✔︎ Success
✔ Inventory updated to ~/.slv/inventory.yml
✔ Successfully created solv user on x.x.x.x아이덴티티 키를
~/.slv/keys/<your-pubkey>.json에 배치하세요.자동 리전 감지
다음으로 시스템이 구성된 노드에서 각 블록 엔진으로 ping을 보내 가장 가까운 리전을 자동으로 감지합니다. 실제 ping 값을 측정하여 최적의 리전을 선택할 수 있습니다.
bash
✔ Inventory updated to ~/.slv/inventory.mainnet.validators.yml
📍 Measuring latencies from x.x.x.x to mainnet regions...
Pinging Amsterdam (amsterdam.mainnet.block-engine.jito.wtf)...
Pinging Dublin (dublin.mainnet.block-engine.jito.wtf)...
Pinging Frankfurt (frankfurt.mainnet.block-engine.jito.wtf)...
Pinging London (london.mainnet.block-engine.jito.wtf)...
Pinging New York (ny.mainnet.block-engine.jito.wtf)...
Pinging Salt Lake City (slc.mainnet.block-engine.jito.wtf)...
Pinging Singapore (singapore.mainnet.block-engine.jito.wtf)...
Pinging Tokyo (tokyo.mainnet.block-engine.jito.wtf)...
✅ London: 8.801 ms
✅ Dublin: 12.946 ms
✅ Frankfurt: 5.888 ms
✅ Amsterdam: 0.169 ms
✅ New York: 74.321 ms
✅ Salt Lake City: 115.577 ms
✅ Singapore: 154.200 ms
✅ Tokyo: 229.989 ms
🎯 Nearest region: 🇳🇱 Amsterdam
Latency: 0.169 ms
Block Engine: https://amsterdam.mainnet.block-engine.jito.wtf
Shred Receiver: 74.118.140.240:1002
Relayer: http://amsterdam.mainnet.relayer.jito.wtf:8100
NTP Server: ntp.amsterdam.jito.wtf✔ Inventory updated to ~/.slv/inventory.mainnet.validators.yml
📍 Measuring latencies from x.x.x.x to mainnet regions...
Pinging Amsterdam (amsterdam.mainnet.block-engine.jito.wtf)...
Pinging Dublin (dublin.mainnet.block-engine.jito.wtf)...
Pinging Frankfurt (frankfurt.mainnet.block-engine.jito.wtf)...
Pinging London (london.mainnet.block-engine.jito.wtf)...
Pinging New York (ny.mainnet.block-engine.jito.wtf)...
Pinging Salt Lake City (slc.mainnet.block-engine.jito.wtf)...
Pinging Singapore (singapore.mainnet.block-engine.jito.wtf)...
Pinging Tokyo (tokyo.mainnet.block-engine.jito.wtf)...
✅ London: 8.801 ms
✅ Dublin: 12.946 ms
✅ Frankfurt: 5.888 ms
✅ Amsterdam: 0.169 ms
✅ New York: 74.321 ms
✅ Salt Lake City: 115.577 ms
✅ Singapore: 154.200 ms
✅ Tokyo: 229.989 ms
🎯 Nearest region: 🇳🇱 Amsterdam
Latency: 0.169 ms
Block Engine: https://amsterdam.mainnet.block-engine.jito.wtf
Shred Receiver: 74.118.140.240:1002
Relayer: http://amsterdam.mainnet.relayer.jito.wtf:8100
NTP Server: ntp.amsterdam.jito.wtfSolana 검증자 Vote 계정 키 생성 또는 설정
새 vote 계정 키를 생성하거나 기존 vote 계정 키를 설정할 수 있습니다.
이 예제에서는 기존 vote 계정 키를 설정하는 방법을 보여줍니다.
bash
? Do you want to create a new vote account key now? (Y/n) › No
? Please Enter Your Vote Account Public Key > <your-vote-account>? Do you want to create a new vote account key now? (Y/n) › No
? Please Enter Your Vote Account Public Key > <your-vote-account>검증자 노드 정보가
~/.slv/inventory.mainnet.validators.yml에 저장됩니다.bash
✔︎ Success
✔ Inventory updated to ~/.slv/inventory.mainnet.validators.yml
✔ Successfully created solv user on epics-sub
✔︎ Validator Mainnet Config Saved To ~/.slv/inventory.mainnet.validators.yml
Now you can deploy with:
$ slv v deploy -n mainnet -p epics-sub✔︎ Success
✔ Inventory updated to ~/.slv/inventory.mainnet.validators.yml
✔ Successfully created solv user on epics-sub
✔︎ Validator Mainnet Config Saved To ~/.slv/inventory.mainnet.validators.yml
Now you can deploy with:
$ slv v deploy -n mainnet -p epics-sub검증자 배포
구성을 확인하면 배포가 시작됩니다.
bash
slv v deploy -n mainnet -p epics-subslv v deploy -n mainnet -p epics-subbash
Your Mainnet Validators Settings:
┌────────────────┬──────────────────────────────────────────────┐
│ Identity Key │ KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM │
├────────────────┼──────────────────────────────────────────────┤
│ Vote Key │ EpicsoqLdDP8qRn3wQRKTSKAXbjK9dUgFfNPRQS77MQD │
├────────────────┼──────────────────────────────────────────────┤
│ Authority Key │ authAccount │
├────────────────┼──────────────────────────────────────────────┤
│ IP │ x.x.x.x │
├────────────────┼──────────────────────────────────────────────┤
│ Validator Type │ firedancer-jito │
├────────────────┼──────────────────────────────────────────────┤
│ Version │ 0.712.30006 │
└────────────────┴──────────────────────────────────────────────┘
? Do you want to continue? (Y/n) › Yes
.
.
.
Successfully Deployed RPC on mainnet
You can monitor your Node with the following steps:
Log in to your server with SSH:
ssh [email protected]
Then, run the following command to monitor your node:
$ solv mYour Mainnet Validators Settings:
┌────────────────┬──────────────────────────────────────────────┐
│ Identity Key │ KTMkUG8WCw9FdH44jLMBpc1teGafnYL6SgP4fHHbsNM │
├────────────────┼──────────────────────────────────────────────┤
│ Vote Key │ EpicsoqLdDP8qRn3wQRKTSKAXbjK9dUgFfNPRQS77MQD │
├────────────────┼──────────────────────────────────────────────┤
│ Authority Key │ authAccount │
├────────────────┼──────────────────────────────────────────────┤
│ IP │ x.x.x.x │
├────────────────┼──────────────────────────────────────────────┤
│ Validator Type │ firedancer-jito │
├────────────────┼──────────────────────────────────────────────┤
│ Version │ 0.712.30006 │
└────────────────┴──────────────────────────────────────────────┘
? Do you want to continue? (Y/n) › Yes
.
.
.
Successfully Deployed RPC on mainnet
You can monitor your Node with the following steps:
Log in to your server with SSH:
ssh [email protected]
Then, run the following command to monitor your node:
$ solv m완료되었습니다! Solana 검증자가 배포되었습니다.
Solana 네트워크와 동기화되는 데 시간이 걸립니다.
디버깅 및 모니터링
배포 후 Solana RPC 노드 내에서 디버깅하고 모니터링할 수 있습니다.
다음 명령으로 Solana RPC 노드의 상태를 확인할 수 있습니다:
bash
$ solv m$ solv msolv는 agave-validator -l /mnt/ledger의 alias입니다.
이 설정은 RPC 노드 배포 시 ~/.profile에 추가됩니다.아이덴티티 키 변경
배포 후에는 unstaked 키를 인증된 아이덴티티 키로 변경해야 합니다.
bash
slv v set:identity -n mainnet --pubkey epics-subslv v set:identity -n mainnet --pubkey epics-sub이 명령은 아이덴티티 키를 인증된 아이덴티티 키로 변경합니다.
※ 노 다운타임 마이그레이션에 대해서는 이 가이드를 참조하세요.
SLV Validator 명령
bash
slv validator --help
Usage: slv validator
Version: 0.9.700
Description:
🛠️ Manage Solana Validator Nodes 🛠️
Options:
-h, --help - Show this help.
Commands:
init - 🚀 Initialize a new validator configuration
deploy - 📦 Deploy Validators
list - 📋 List validators
set:identity - 🪪 Set Validator Identity
set:unstaked - 📴 Set Validator Identity to Unstaked Key
setup:firedancer - 🔥 Setup/Update Firedancer Validator
update:firedancer - 🔄 Update Firedancer Version
build:solana-cli - 🛠️ Build Solana CLI from Source
install:solana - ➡️ Install Solana CLI Binary
update:script - ⚙️ Update Validator Startup Config
update:jinja - 🧩 Update Jinja Template
start - 🟢 Start Validator
stop - 🔴 Stop Validator
restart - ♻️ Restart Validator
cleanup - 🧹 Cleanup Validator - Remove Ledger/Snapshot Unnecessary Files
get:snapshot - 💾 Download Snapshot with aria2c
gen:vote-account - 🗳️ Generate Vote Account
switch - 🔁 Switch Validator Identity - No DownTime Migrationslv validator --help
Usage: slv validator
Version: 0.9.700
Description:
🛠️ Manage Solana Validator Nodes 🛠️
Options:
-h, --help - Show this help.
Commands:
init - 🚀 Initialize a new validator configuration
deploy - 📦 Deploy Validators
list - 📋 List validators
set:identity - 🪪 Set Validator Identity
set:unstaked - 📴 Set Validator Identity to Unstaked Key
setup:firedancer - 🔥 Setup/Update Firedancer Validator
update:firedancer - 🔄 Update Firedancer Version
build:solana-cli - 🛠️ Build Solana CLI from Source
install:solana - ➡️ Install Solana CLI Binary
update:script - ⚙️ Update Validator Startup Config
update:jinja - 🧩 Update Jinja Template
start - 🟢 Start Validator
stop - 🔴 Stop Validator
restart - ♻️ Restart Validator
cleanup - 🧹 Cleanup Validator - Remove Ledger/Snapshot Unnecessary Files
get:snapshot - 💾 Download Snapshot with aria2c
gen:vote-account - 🗳️ Generate Vote Account
switch - 🔁 Switch Validator Identity - No DownTime Migration