728x90
Solana Validator를 돌리면서 구성했던 파일들을 백업차원으로 적어두려 한다.
현재는 안 돌아가고 있지만 그 때는 돌아갔으니, 공식 공지를 숙지하고 디스코드 커뮤니티에서 질문을 통해 trouble shooting 하면 다시 돌릴 수 있을 것이다.
validator 실행 방법
아래 실행 파일들과 시스템 파일들을 작성하고 시스템 파일을 구동하면 백그라운드에서 계속 돌아간다.
시스템 구동 command
// 서버 재부팅 시 자동 시작
sudo systemctl enable --now systuner.service && sudo systemctl enable --now validator.service \
&& sudo systemctl enable --now watchtower.service
// 시스템 데몬 종료
sudo systemctl stop validator.service
// 시스템 정상 작동 확인
systemctl status validator.service
validator 모니터링 관련 command
// 밸리데이터 동작여부 확인
solana-validator --ledger ~/ledger monitor
// 슬롯 모니터링
solana catchup ~/validator-keypair.json --our-localhost
// 밸리데이터 현 상태 확인
solana validators | grep <validator address>
// 투표활동 확인
solana vote-account ~/vote-account-keypair.json
// 현재 슬롯 확인
curl http://localhost:8899 -X POST -H "Content-Type: application/json" -d '
{"jsonrpc":"2.0","id":1, "method":"getSlot"}
'
// 에러, 리더슬롯배정 확인
grep --ignore-case --extended-regexp -w 'ERROR' ~/log/validator.log
grep --ignore-case --extended-regexp -w 'My next leader' ~/log/validator.log
// 스테이킹 계정 상태 조회
solana stake-account ~/validator-stake-keypair.json
/home/sol 실행 파일
- start-validator.sh
#!/bin/bash
exec solana-validator \
--entrypoint entrypoint.testnet.solana.com:8001 \
--entrypoint entrypoint2.testnet.solana.com:8001 \
--entrypoint entrypoint3.testnet.solana.com:8001 \
--known-validator 5D1fNXzvv5NjV1ysLjirC4WY92RNsVH18vjmcszZd8on \
--known-validator dDzy5SR3AXdYWVqbDEkVFdvSPCtS9ihF5kJkHCtXoFs \
--known-validator Ft5fbkqNa76vnsjYNwjDZUXoTWpP7VYm3mtsaQckQADN \
--known-validator eoKpUABi59aT4rR9HGS3LcMecfut9x7zJyodWWP43YQ \
--known-validator 9QxCLckBiJc783jnMvXZubK4wH86Eqqvashtrwvcsgkv \
--known-validator eoKpUABi59aT4rR9HGS3LcMecfut9x7zJyodWWP43YQ \
--known-validator 82k4RGZAJxtXvW3hzgmHB2q4oDHzgwMR2cGXup324gsJ \
--known-validator Bszp6hDL19ymPZ8efp9venQYb4ae2rRmEtVp4aG6k8nx \
--known-validator 376e8QLx9qSkjFn7mK2kp3wBwvziKuMqiB3iAbK5Payx \
--known-validator 8Apz17FY7vts5PUEP28apzqQBVgg6McbetFJqb45ew8F \
--expected-genesis-hash 4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY \
--dynamic-port-range 8000-8020 \
--rpc-port 8899 \
--only-known-rpc \
--wal-recovery-mode skip_any_corrupted_record \
--identity ~/validator-keypair.json \
--vote-account ~/vote-account-keypair.json \
--log ~/log/validator.log \
--accounts /mnt/ramdisk/solana-accounts \
--ledger ~/ledger \
--limit-ledger-size 50000000 \
--private-rpc \
--no-port-check \
--incremental-snapshots \
--incremental-snapshot-interval-slots 200 \
--minimal-snapshot-download-speed 1 \
--maximum-local-snapshot-age 3000 \
--full-rpc-api
* known-validator는 신뢰할 수 있는 밸리데이터 목록. 테스트넷 재부팅할 때 추가한 밸리데이터들은 지워야할 수 있다.
- watchtower.sh
validator 정상 작동 여부를 슬랙으로 5분마다 보내는 실행 파일.
validator가 꺼져있으면 꺼져있다고 보내고, 켜져있으면 watchtower가 에러를 슬랙으로 보내게끔 구성했다.
#!/bin/bash
while [ true ]; do
if [ ! `ps -ef | grep solana-watchtower | grep -v grep | awk '{print $2}'` ]; then
# watchtower 꺼져있고 validator 켜져있으면 watchtower 켜고 슬랙 보내기
if [ `ps -ef | grep solana-validator | grep -v grep | awk '{print $2}'` ]; then
nohup solana-watchtower \
--validator-identity E6ALR99bKvV45JiwKJtgCyDe7EZdAfYPhWaSd3Lw4d2c \
>> /home/sol/watchtower.log &
message="watchtower가 켜졌습니다."
curl -X POST --data-urlencode "payload={\"channel\": \"#testnet-validator\", \"username\": \"Watchtower\", \"text\": \"${message}\", \"icon_emoji\": \":tokyo_tower:\"}" https://hooks.slack.com/services/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
# watchtower 꺼져있고 validator 꺼져있으면 밸리데이터 꺼져있다고 5분마다 슬랙 보내기
else
message="validator가 꺼져있습니다. validator를 켜주세요."
curl -X POST --data-urlencode "payload={\"channel\": \"#testnet-validator\", \"username\": \"Validator_is_Off\", \"text\": \"${message}\", \"icon_emoji\": \":internet-problems:\"}" https://hooks.slack.com/services/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
sleep 300
fi
elif [ `ps -ef | grep solana-watchtower | grep -v grep | awk '{print $2}'` ]; then
# watchtower 켜져있고 validator 꺼져있으면 watchtower 끄고 watchtower 껐다고 슬랙 보내기
if [ ! `ps -ef | grep solana-validator | grep -v grep | awk '{print $2}'` ]; then
kill `ps -ef | grep solana-watchtower | grep -v grep | awk '{print $2}'`
message="watchtower가 꺼졌습니다."
curl -X POST --data-urlencode "payload={\"channel\": \"#testnet-validator\", \"username\": \"Watchtower\", \"text\": \"${message}\", \"icon_emoji\": \":tokyo_tower:\"}" https://hooks.slack.com/services/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
fi
fi
done
- airdrop.sh
테스트넷이라 필요할 때마다 에어드랍 100번을 돌리는 코드를 만들어두었다. 여타 테스트넷이 그렇듯이 에어드랍량 제한이 있어 100번을 한번에 전부 받아오진 못하고 중간부터 실패 처리 되더라.
#!/bin/bash
for i in $(seq 1 100)
do
solana airdrop 1 -k ~/validator-stake-keypair.json
sleep 30
done
/etc/systemd/system 시스템 파일
- systuner.service
[Unit]
Description=Solana System Tuner
After=network.target
[Service]
Type=simple
Restart=on-failure
RestartSec=1
LogRateLimitIntervalSec=0
ExecStart=/home/solana/.local/share/solana/install/active_release/bin/solana-sys-tuner --user solana
[Install]
WantedBy=multi-user.target
- validator.service
[Unit]
Description=Solana Validator
After=network.target
Wants=systuner.service
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=on-failure
RestartSec=1
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
User=sol
Environment=PATH=/bin:/usr/bin:/home/solana/.local/share/solana/install/active_release/bin
Environment=SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea
ExecStart=/home/solana/start-validator.sh
[Install]
WantedBy=multi-user.target
- watchtower.service
[Unit]
Description=Solana Watchtower
[Service]
Type=simple
User=sol
Environment=PATH=/bin:/usr/bin:/home/solana/.local/share/solana/install/active_release/bin
Environment=SOLANA_METRICS_CONFIG=host=https://metrics.solana.com:8086,db=tds,u=testnet_write,p=c4fa841aa918bf8274e3e2a44d77568d9861b3ea
Environment=SLACK_WEBHOOK=https://hooks.slack.com/services/<슬랙 웹훅>
ExecStart=/home/solana/watchtower.sh
[Install]
WantedBy=multi-user.target
/etc/logrotate.d 시스템 파일
- solana
로그 파일이 하루에 하나씩 생기고, 일주일 지난 파일은 없어지게 하는 코드다.
/home/solana/log/validator.log {
su sol sol
daily
rotate 7
missingok
postrotate
systemctl kill -s USR1 validator.service
endscript
}
적용 command
sudo systemctl restart logrotate
'Solana > Validator - 실행 (devnet & testnet)' 카테고리의 다른 글
[Solana] 테스트넷 밸리데이터 leader 배정 로그, 모니터링 GUI 관찰 (0) | 2022.07.08 |
---|---|
[Devnet] 솔라나 밸리데이터 실행기 4 - 6일차 모니터링(Grafana) (0) | 2022.01.17 |
[Devnet] 솔라나 밸리데이터 실행기 3 - telegraf, InfluxDB, Grafana로 모니터링하기 (0) | 2022.01.10 |
[Devnet] 솔라나 밸리데이터 실행기 2 - 슬랙 웹훅 사용해 watchtower 및 vallidator 다운 알림 보내기 (0) | 2022.01.10 |
[Devnet] 솔라나 밸리데이터 실행기 1 - cli로 모니터링 (0) | 2022.01.07 |