SPO JAPAN GUILD
ステークプール構築

リレー/BP接続設定

リレーとBPの役割

  • リレー … BP とネットワークの橋渡し。ブロック同期・伝播を行う。
  • BP … ブロック生成専用。node.cert / kes.skey / vrf.skey で起動し、自リレーのみに接続する。

1. P2P接続とトポロジーの理解

P2P では接続先の多くはノードが自動で選びます。
必ずつなぎたい相手(自BP・自リレーなど)だけ localRoots に書きます。

接続状態(Hot / Warm / Cold)

ノードは接続先を次の3種類で管理します。

状態説明
Hotブロック同期・伝播に使っているアクティブな接続
Warm接続は維持し、必要時に Hot に昇格する待機接続
Cold候補として保持しているが、まだ接続していないピア

覚えておくとよいこと

  • advertisePeer 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常に維持したいピアのグループ(グループ間で同じピアを重ねない
accessPointsIP または DNS とポート
advertisePeer Sharing でその接続先を他ノードへ知らせてよいか。BP や内部用リレーなど、公開したくない接続先は falseに設定
trustablebootstrapPeers: null の場合、初期接続先として信頼するピアには通常 true を指定。自BP・自リレーなど、自分で管理しているピアは通常 true に設定。
hotValencyそのグループの Hot 接続数(旧 valency と同義)
diffusionModeUFW 等で通信元を制限している場合、InitiatorOnly は不要です。diffusionMode を省略すると InitiatorAndResponder になります。
peerSnapshotFile手順例どおりパスを書く(運用で null にする場合は別途確認)
useLedgerAfterSlotリレーは手順例の値、BP は -1

手順

リレー

クラウドのセキュリティグループでファイアウォールを開けている場合

ufw は使わず、コンソールでリレー用ポート(例: 6000)のインバウンドを許可してください。

sudo ufw allow 6000/tcp
sudo ufw reload

4. ノード起動スクリプトの作成 で決めたノード用ポートに合わせること。
行末の「」で注釈を表示できます。

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.json

JSON がそのまま表示されれば問題ありません。
parse error のときは {} [] , を確認してください。

ノードを再起動します。

sudo systemctl reload-or-restart cardano-node

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。