Install
Designed for high-performance, validator-grade setups (Warp Sync, HA, Safe Upgrades, Troubleshooting).
DN-focused Setup Guide
System Preparation
sudo apt update && sudo apt upgrade -y
sudo apt install -y \
curl git make wget clang pkg-config libssl-dev build-essential \
apt-transport-https gnupg cmake protobuf-compiler lz4Install Rust and Required Toolchains
curl https://sh.rustup.rs -sSf | sh -s -- -y
source $HOME/.cargo/env
rustup update
rustup component add rust-src
rustup target add wasm32-unknown-unknown
rustup install nightly-2024-01-21
rustup target add wasm32-unknown-unknown --toolchain nightly-2024-01-21Build Polkadot SDK
cd ~
git clone https://github.com/paritytech/polkadot-sdk.git
cd polkadot-sdk
git checkout polkadot-stable2509-2
cargo build --releaseInstall Binaries
sudo mkdir -p /usr/lib/polkadot
sudo cp target/release/polkadot* /usr/lib/polkadot/
sudo ln -sf /usr/lib/polkadot/polkadot /usr/local/bin/polkadotCreate Working Directory
mkdir -p $HOME/.polkadot
chown -R $(id -u):$(id -g) $HOME/.polkadotWarp Sync for DN
Warp Sync drastically speeds up initial boot:
Required flag:
--sync warpRecommended DB for DN:
--database paritydbParityDB is more stable under DN workloads.
Full Production-Ready systemd Service
current_user=$(whoami)
STARTNAME="DN_Node_Name"
sudo tee /etc/systemd/system/polkadot.service > /dev/null <<EOF
[Unit]
Description=Polkadot Dedicated Node (DN)
After=network.target
Wants=network-online.target
[Service]
Type=simple
User=$current_user
WorkingDirectory=$HOME/.polkadot
ExecStart=/usr/local/bin/polkadot \
--validator \
--name "$STARTNAME" \
--chain polkadot \
--database paritydb \
--sync warp \
--state-pruning 64 \
--blocks-pruning 64 \
--base-path $HOME/.polkadot \
--public-addr /ip4/$(wget -qO- eth0.me)/tcp/30333 \
--port 30333 \
--rpc-port 9933 \
--rpc-cors all \
--rpc-methods Unsafe \
--prometheus-external \
--prometheus-port 9615 \
--telemetry-url "wss://telemetry-backend.w3f.community/submit/ 1" \
--telemetry-url "wss://telemetry.polkadot.io/submit/ 0" \
--unsafe-force-node-key-generation
Restart=always
RestartSec=10
LimitNOFILE=1000000
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOFStart & Verify
sudo systemctl daemon-reload
sudo systemctl enable polkadot
sudo systemctl restart polkadot
sudo journalctl -u polkadot -fSafe Upgrades for DN (Atomic Upgrade Path)
Never overwrite the binary directly. Use Staged Atomic Upgrade:
Build new binary:
cd ~/polkadot-sdk
git fetch --all
git checkout <new-tag>
cargo build --releasePut new binaries in staging:
sudo mkdir -p /usr/lib/polkadot-upgrade
sudo cp target/release/polkadot* /usr/lib/polkadot-upgrade/Validate new binary:
/usr/lib/polkadot-upgrade/polkadot --versionAtomic swap:
sudo systemctl stop polkadot
sudo rsync -av --delete /usr/lib/polkadot-upgrade/ /usr/lib/polkadot/
sudo systemctl start polkadotVerify:
sudo journalctl -u polkadot -n 150 --no-pagerHigh Availability (HA) DN Architecture
Minimal HA Design
+----------------+
| RPC Node |
| (Read-only) |
+-------+--------+
|
+--------------+--------------+
| |
+-----+--------+ +---------+-----+
| Validator A | | Validator B |
| (Primary) | | (Backup) |
+--------------+ +---------------+
\ Sentry Nodes /
+------------+ +--------------+Sentry node
--no-telemetry
--no-prometheus
--reserved-peers <validator-ip>DN Failover Procedure:
Normally:
Validator B runs with --no-validate
If Validator A goes offline, B becomes active:
sudo systemctl stop polkadot # on A
sudo systemctl restart polkadot --validator # on BCan be automated with keepalived or pacemaker.
Troubleshooting Guide
Node not starting after upgrade
sudo journalctl -u polkadot -n 100Try full sync:
polkadot --sync full --database paritydbRocksDB corruption errors
Switch to ParityDB:
--database paritydbNode not visible in Telemetry
Check external IP:
wget -qO- eth0.meOpen port:
sudo ufw allow 30333Poor synchronization speed
Enable compiled WASM:
--wasm-execution compiledDrop in peers
Increase limits:
--in-peers 500
--out-peers 500Monitoring (Prometheus + Grafana)
Prometheus endpoint:
http://<node-ip>:9615/metricsKey metrics:
substrate_block_height
substrate_sync_target
substrate_peers_count
substrate_block_import
Last updated