コンテンツにスキップ

8.P2Pトポロジー設定

前提条件

この項目はリレーノードで実施します
リレーノードが起動しているか確認してください**

journalctl --unit=cardano-node --follow

重要:トポロジーの形成について

2022/01/07時点では手動P2P(ピア・ツー・ピア)モードのため、手動でトポロジーを構成する必要があります。この手順をスキップすると生成したブロックがブロックチェーン外で孤立するため、必須の設定項目となります。

TopologyUpdaterの設定

ファイル 用途
topologyUpdater.sh トポロジーフェッチリスト登録スクリプト
relay-topology_pull.sh トポロジーファイル生成スクリプト

ノード情報をトポロジーフェッチリストに登録するスクリプト「topologyUpdater.sh」を作成します。

topologyUpdater.shについて

リレーノード情報(IPアドレスとポート番号、オン/オフライン状態)をトポロジーフェッチリストへ1時間に1回送信することで、世界中のリレーノードに自プールのリレー情報が登録される仕組みです

スクリプトファイルの作成

注意

以下は、リレーノードのパブリックIPとノードポートに合わせる
CNODE_HOSTNAMEの「xxx.xxx.xxx.xx」はリレーのパブリックIP(静的)アドレスに置き換えて下さい ポート番号を6000から変更している場合は修正してください ※26行目の"CHANGE ME"は変更しないでください

cat > $NODE_HOME/topologyUpdater.sh << EOF
#!/bin/bash
# shellcheck disable=SC2086,SC2034

USERNAME=$(whoami)
CNODE_PORT=6000
CNODE_HOSTNAME="xxx.xxx.xxx.xx"
CNODE_BIN="/usr/local/bin"
CNODE_HOME=$NODE_HOME
CNODE_LOG_DIR="\${CNODE_HOME}/logs"
GENESIS_JSON="\${CNODE_HOME}/${NODE_CONFIG}-shelley-genesis.json"
NETWORKID=\$(jq -r .networkId \$GENESIS_JSON)
CNODE_VALENCY=1   # optional for multi-IP hostnames
NWMAGIC=\$(jq -r .networkMagic < \$GENESIS_JSON)
[[ "\${NETWORKID}" = "Mainnet" ]] && HASH_IDENTIFIER="--mainnet" || HASH_IDENTIFIER="--testnet-magic \${NWMAGIC}"
[[ "\${NWMAGIC}" = "764824073" ]] && NETWORK_IDENTIFIER="--mainnet" || NETWORK_IDENTIFIER="--testnet-magic \${NWMAGIC}"

export PATH="\${CNODE_BIN}:\${PATH}"
export CARDANO_NODE_SOCKET_PATH="\${CNODE_HOME}/db/socket"

blockNo=\$(/usr/local/bin/cardano-cli query tip \${NETWORK_IDENTIFIER} | jq -r .block )

# Note:
# if you run your node in IPv4/IPv6 dual stack network configuration and want announced the
# IPv4 address only please add the -4 parameter to the curl command below  (curl -4 -s ...)
if [ "\${CNODE_HOSTNAME}" != "CHANGE ME" ]; then
T_HOSTNAME="&hostname=\${CNODE_HOSTNAME}"
else
T_HOSTNAME=''
fi

if [ ! -d \${CNODE_LOG_DIR} ]; then
mkdir -p \${CNODE_LOG_DIR};
fi

curl -4 -s "https://api.clio.one/htopology/v1/?port=\${CNODE_PORT}&blockNo=\${blockNo}&valency=\${CNODE_VALENCY}&magic=\${NWMAGIC}\${T_HOSTNAME}" | tee -a \$CNODE_LOG_DIR/topologyUpdater_lastresult.json
EOF

権限を追加し、「topologyUpdater.sh」を実行します。

cd $NODE_HOME
chmod +x topologyUpdater.sh
./topologyUpdater.sh

topologyUpdater.shが正常に実行された場合、以下の形式が表示されます。

{ "resultcode": "201", "datetime":"2020-07-28 01:23:45", "clientIp": "1.2.3.4", "iptype": 4, "msg": "nice to meet you" }

注意

topologyUpdater.shは1時間以内に2回以上実行しないで下さい。最悪の場合ブラックリストに追加されることがあります。スクリプトが実行されるたびに、$NODE_HOME/logsにログが作成されます。

Cronジョブの設定

crontabジョブを追加し、「topologyUpdater.sh」を1時間に1回自動実行されるように設定します。

注意

  • 以下のコードは複数回実行しないで下さい。複数回実行した場合、同じ時間に複数自動実行されるスケジュールが登録されてしまうので、ブラックリストに入ります。
  • 以下のコードは毎時5分に実行されるように指定しています。  
cat > $NODE_HOME/crontab-fragment.txt << EOF
5 * * * * ${NODE_HOME}/topologyUpdater.sh
EOF
crontab -l | cat - crontab-fragment.txt >crontab.txt && crontab crontab.txt
rm crontab-fragment.txt

no crontab for ~~ というメッセージが表示されることがありますが、Cron初回設定時に表示されるメッセージとなりますので、問題ありません。

crontab -l
以下が返り値として表示されればOK。

"5 * * /home/***/cnode/topologyUpdater.sh"

フェッチリストへの登録について

4時間の間で4回スクリプトが実行された後に、ノードがオンライン状態で有ることが認められた場合にノードIPがトポロジーフェッチリストに登録されます。上記設定から4時間後に次の項目を実施してください。

フェッチリスト登録確認

cd $NODE_HOME/logs
cat topologyUpdater_lastresult.json

以下の内容が表示されていれば登録成功
resultcodeが400番台・500番台の場合は、サーバ設定に問題があります。

{ "resultcode": "201", "datetime":"2021-01-10 18:30:06", "clientIp": "000.000.000.000", "iptype": 4, "msg": "nice to meet you" }
{ "resultcode": "203", "datetime":"2021-01-10 19:30:03", "clientIp": "000.000.000.000", "iptype": 4, "msg": "welcome to the topology" }
{ "resultcode": "204", "datetime":"2021-01-10 20:30:04", "clientIp": "000.000.000.000", "iptype": 4, "msg": "glad you're staying with us" }

トポロジーファイルを生成する

前提条件

リレーノードIPがトポロジーフェッチリストに登録されたことを確認後、以下のセクションを実行して下さい。

トポロジーの形成方法▼

トポロジーファイルを更新するrelay-topology_pull.shスクリプトを作成します。 このスクリプトを作成・実行することで、世界中のリレーノード情報の中から自分のリレーノードに対して近距離・中距離・遠距離に分散したリレーノードを抽出し半自動でトポロジーを形成できます。

個別に追加したい場合▼

※お知り合いのノードや自ノードが複数ある場合は、IOHKノード情報の後に "|" で区切ってIPアドレス:ポート番号:Valency の形式で追加できます。

|relays-new.cardano-mainnet.iohk.io:3001:2|relay1-eu.xstakepool.com:3001:1|00.000.000.00:3001:1

注意

以下は、BPのパブリックIPとノードポートに書き換えてからコマンドを実行する
BLOCKPRODUCING_IPの「xxx.xxx.xxx」はBPのパブリックIP(静的)アドレスに置き換えて下さい BLOCKPRODUCING_PORTは任意で設定した番号に置き換えてください。

cat > $NODE_HOME/relay-topology_pull.sh << EOF
#!/bin/bash
BLOCKPRODUCING_IP=xxx.xxx.xxx
BLOCKPRODUCING_PORT=xxxxx
PEERS=18
curl -4 -s -o $NODE_HOME/${NODE_CONFIG}-topology.json "https://api.clio.one/htopology/v1/fetch/?max=\${PEERS}&customPeers=\${BLOCKPRODUCING_IP}:\${BLOCKPRODUCING_PORT}:1|relays-new.cardano-mainnet.iohk.io:3001:2"
EOF

shファイルに権限を追加し、relay-topology_pull.shを実行する

cd $NODE_HOME
chmod +x relay-topology_pull.sh
./relay-topology_pull.sh

relay-topology_pull.shを実行すると新しいトポロジーファイル(mainnet-topology.json)を生成します。

トポロジーファイルを更新した場合は、リレーノードを再起動することを忘れないで下さい。

sudo systemctl reload-or-restart cardano-node

重要な確認事項

ブロックを生成するには、「Total Tx」が増加していることを確認する必要があります。万一、増加していない場合にはファイアウォールやトポロジーファイルの内容を再確認して下さい。「P2P」数はノードが他ノードと接続している数を表しています。

🛠 リレーノード/BPでgLiveView を確認

cd $NODE_HOME/scripts
./gLiveView.sh

「Total Tx」が増加しているか確認する

おめでとうございます!

Total Txの増加が確認できれば、ブロックを作成する準備が出来ています。

ノード起動最終調整

ブロック生成可能状態チェック

SPO JAPAN GUILD TOOLを導入する

導入手順はプール構築マニュアル内のSJG TOOLをご参照ください

TOOLを実行する

gtool

[2] ブロック生成状態チェック を選択する

Tracemempool無効

重要な最終調整

ノード稼働時の、CPU/メモリ消費を抑えるためノード設定を調整します。 この調整はプール運営のパフォーマンスを左右しますので推奨設定となります。

概要

  • トランザクション流入ログをトレース(記録)することで、CPU/メモリ消費を増加させる原因となることがわかっているため、この機能を無効にします。
  • この設定を行うと、上記で確認した「Total TX」「Pending Tx」は増加しませんが、設定前に増加が確認できていれば問題ございません。
sed -i $NODE_HOME/${NODE_CONFIG}-config.json \
    -e "s/TraceMempool\": true/TraceMempool\": false/g"

ノードを再起動する

sudo systemctl reload-or-restart cardano-node

ノードログにエラーが出ていないか確認する

journalctl --unit=cardano-node --follow