ステークプール構築
リレー/BP接続設定
リレーとBPの役割
- リレー … BP とネットワークの橋渡し。ブロック同期・伝播を行う。
- BP … ブロック生成専用。
node.cert/kes.skey/vrf.skeyで起動し、自リレーのみに接続する。
1. P2P接続とトポロジーの理解
P2P では接続先の多くはノードが自動で選びます。
必ずつなぎたい相手(自BP・自リレーなど)だけ localRoots に書きます。
接続状態(Hot / Warm / Cold)
ノードは接続先を次の3種類で管理します。
| 状態 | 説明 |
|---|---|
| Hot | ブロック同期・伝播に使っているアクティブな接続 |
| Warm | 接続は維持し、必要時に Hot に昇格する待機接続 |
| Cold | 候補として保持しているが、まだ接続していないピア |
覚えておくとよいこと
advertiseはPeer Sharingでその接続先を他ノードへ知らせてよいかを表します。- BPや内部用リレーなど、外部へ公開したくない接続先は
falseに設定。
2. トポロジーファイルの変更
${NODE_CONFIG}-topology.json
- リレー … 自BP・他リレーなど、固定したい相手を
localRootsに記載。 - BP … 自リレーだけ。
useLedgerAfterSlotは-1(台帳ピアを使わない)。 - IP … サーバーのパブリック(固定)アドレス。ポートはノード用(SSH と混同しない)。
同期が 100% になってから以降の手順を実施してください。
cardano-cli latest query tip ${NODE_NETWORK} | grep syncProgress"syncProgress": "100.00"主な項目
| 項目 | 説明 |
|---|---|
| localRoots | 常に維持したいピアのグループ(グループ間で同じピアを重ねない) |
| accessPoints | IP または DNS とポート |
| advertise | Peer Sharing でその接続先を他ノードへ知らせてよいか。BP や内部用リレーなど、公開したくない接続先は falseに設定 |
| trustable | bootstrapPeers: null の場合、初期接続先として信頼するピアには通常 true を指定。自BP・自リレーなど、自分で管理しているピアは通常 true に設定。 |
| hotValency | そのグループの Hot 接続数(旧 valency と同義) |
| diffusionMode | UFW 等で通信元を制限している場合、InitiatorOnly は不要です。diffusionMode を省略すると InitiatorAndResponder になります。 |
| peerSnapshotFile | 手順例どおりパスを書く(運用で null にする場合は別途確認) |
| useLedgerAfterSlot | リレーは手順例の値、BP は -1 |
手順
リレー
クラウドのセキュリティグループでファイアウォールを開けている場合
ufw は使わず、コンソールでリレー用ポート(例: 6000)のインバウンドを許可してください。
sudo ufw allow 6000/tcp
sudo ufw reload4. ノード起動スクリプトの作成 で決めたノード用ポートに合わせること。
行末の「+」で注釈を表示できます。
cat > ${NODE_HOME}/${NODE_CONFIG}-topology.json << EOF
{
"bootstrapPeers": [
{
"address": "backbone.cardano.iog.io",
"port": 3001
},
{
"address": "backbone.mainnet.cardanofoundation.org",
"port": 3001
},
{
"address": "backbone.mainnet.emurgornd.com",
"port": 3001
}
],
"localRoots": [
{
"accessPoints": [
{
"address": "BPのIP",
"port": 00000
}
],
"advertise": false,
"trustable": true,
"hotValency": 1
},
{
"accessPoints": [
{
"address": "リレー2のIP or DNS",
"port": 6000
}
],
"advertise": true,
"trustable": true,
"hotValency": 1
}
],
"publicRoots": [],
"useLedgerAfterSlot": 185500763
}
EOF
cat > ${NODE_HOME}/${NODE_CONFIG}-topology.json << EOF
{
"bootstrapPeers": [
{
"address": "backbone.cardano.iog.io",
"port": 3001
},
{
"address": "backbone.mainnet.cardanofoundation.org",
"port": 3001
},
{
"address": "backbone.mainnet.emurgornd.com",
"port": 3001
}
],
"localRoots": [
{
"accessPoints": [
{
"address": "BPのIP",
"port": 00000
}
],
"advertise": false,
"trustable": true,
"hotValency": 1
},
{
"accessPoints": [
{
"address": "リレー1のIP or DNS",
"port": 6000
}
],
"advertise": true,
"trustable": true,
"hotValency": 1
}
],
"publicRoots": [],
"useLedgerAfterSlot": 185500763
}
EOF
BP
クラウドのセキュリティグループでファイアウォールを開けている場合
ufw は使わず、コンソールでBP用ポートのインバウンドを許可してください。
PORT=`grep "PORT=" $NODE_HOME/startBlockProducingNode.sh`
b_PORT=${PORT#"PORT="}
echo "BPポートは ${b_PORT} です"sudo ufw allow from <リレーサーバー1のIP> to any port ${b_PORT}sudo ufw allow from <リレーサーバー2のIP> to any port ${b_PORT}sudo ufw reload行末の「+」で注釈を表示できます。
cat > ${NODE_HOME}/${NODE_CONFIG}-topology.json << EOF
{
"bootstrapPeers": null,
"localRoots": [
{
"accessPoints": [
{
"address": "リレー1のIP or DNS",
"port": 6000
},
{
"address": "リレー2のIP or DNS",
"port": 6000
}
],
"advertise": false,
"trustable": true,
"hotValency": 2
}
],
"publicRoots": [],
"useLedgerAfterSlot": -1
}
EOF
構文チェックと再起動
jq . $NODE_HOME/${NODE_CONFIG}-topology.jsonJSON がそのまま表示されれば問題ありません。
parse error のときは {} [] , を確認してください。
ノードを再起動します。
sudo systemctl reload-or-restart cardano-nodeLast updated on