-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathvalidator-setup-sop.txt
167 lines (127 loc) · 4.04 KB
/
validator-setup-sop.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
Validator setup guide as of 2/7/2024
Reference Solana setup guide: https://docs.solanalabs.com/operations/setup-a-validator
OS: Ubunut 22.04
2 disks:
nvme0n1 - OS disk should be atleast 500GB (can be SATA)
nvme1n1 - Ledger disk should be atleast 2TB (must be NVME)
Run Updates:
sudo apt update
sudo apt upgrade
Add sol user:
sudo adduser sol
hard drive setup:
check partition layout:
df -h
check block devices:
lsblk -f
format 2nd disk for ledger:
sudo mkfs -t ext4 /dev/nvme1n1
create the ledger directory, change ownership, mount the drive:
sudo mkdir -p /mnt/ledger
sudo chown -R sol:sol /mnt/ledger
sudo mount /dev/nvme1n1 /mnt/ledger
add the new drive to fstab so that it mounts after reboot:
sudo vi /etc/fstab
add: /dev/nvme1n1 /mnt/ledger ext4 rw,relatime 0 0
Optimize sysctl knobs:
sudo bash -c "cat >/etc/sysctl.d/21-solana-validator.conf <<EOF
# Increase UDP buffer sizes
net.core.rmem_default = 134217728
net.core.rmem_max = 134217728
net.core.wmem_default = 134217728
net.core.wmem_max = 134217728
# Increase memory mapped files limit
vm.max_map_count = 1000000
# Increase number of allowed open file descriptors
fs.nr_open = 1000000
EOF"
Confirm sysctl knobs:
sudo sysctl -p /etc/sysctl.d/21-solana-validator.conf
Add DefaultLimitNOFILE=1000000 to system.conf:
sudo vi /etc/systemd/system.conf
remove # from DefaultLimitNOFILE and set to 1000000
reload daemon
sudo systemctl daemon-reload
sudo bash -c "cat >/etc/security/limits.d/90-solana-nofiles.conf <<EOF
# Increase process file descriptor count limit
* - nofile 1000000
EOF"
### Close all open sessions (log out ) ###
Log in as the sol user
Instal Solana CLI - Use current build for testnet or mainnet-beta:
sh -c "$(curl -sSfL https://release.solana.com/v1.17.20/install)"
check version:
solana --version
Create directory and file for validator config file:
mkdir -p /home/sol/bin
touch /home/sol/bin/validator.sh
chmod +x /home/sol/bin/validator.sh
Add config for validator.sh depending on server network:
exec solana-validator \
--identity /home/sol/validator-keypair.json \
--vote-account /home/sol/vote-account-keypair.json \
--log /home/sol/solana-validator.log \
--ledger /mnt/ledger \
--accounts /mnt/solana-accounts \
--rpc-port 8899 \
--private-rpc \
--dynamic-port-range 8000-8020 \
--entrypoint entrypoint.mainnet-beta.solana.com:8001 \
--entrypoint entrypoint2.mainnet-beta.solana.com:8001 \
--entrypoint entrypoint3.mainnet-beta.solana.com:8001 \
--entrypoint entrypoint4.mainnet-beta.solana.com:8001 \
--entrypoint entrypoint5.mainnet-beta.solana.com:8001 \
--expected-genesis-hash 5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d \
--wal-recovery-mode skip_any_corrupted_record \
--limit-ledger-size 250000000
create a system service (do this as sudo admin):
sudo vi /etc/systemd/system/sol.service
[Unit]
Description=Solana Validator
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=sol
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/bin:/usr/bin:/home/sol/.local/share/solana/install/active_release/bin"
ExecStart=/bin/bash /home/sol/bin/validator.sh
[Install]
WantedBy=multi-user.target
Setup log rotate:
# Setup log rotation
cat > logrotate.sol <<EOF
/home/sol/solana-validator.log {
rotate 7
daily
missingok
postrotate
systemctl kill -s USR1 sol.service
endscript
}
EOF
sudo cp logrotate.sol /etc/logrotate.d/sol
sudo systemctl restart logrotate.service
Setup ram disk:
sudo mkdir /mnt/solana-accounts
sudo vi /etc/fstab
add to the bottom: "tmpfs /mnt/solana-accounts tmpfs rw,size=300G,user=sol 0 0"
setup 250GB swap file for tmpfs spillover:
sudo dd if=/dev/zero of=/swapfile bs=1MiB count=250KiB
set permissions:
sudo chmod 0600 /swapfile
sudo mkswap /swapfile
update fstab:
vi /etc/fstab
/swapfile swap swap defaults 0 0
Enable swap
sudo swapon -a
sudo mount /mnt/solana-accounts/
Confirm swap is active with free -g and the tmpfs is mounted with mount
Start the validator service:
sudo systemctl enable --now sol
Check Log:
tail -f solana-validator.log