はじめに
ネットワーク内に複数ノードを設置する場合、catapult サーバーポートが重複してしまい、片方のノードだけ外から見える状態になってしまいます。外から見えない方のノードのピア数が減少して(接続できないので周りのノードから Ban されます)、ちょこっとだけフォーク耐性が下がります。
というわけで、デフォルトの7900
ポートから別のポートに変更して、各ノードちゃんと通信出来るようにしましょう。
同じマシンに複数台ノードをインストールするのは、コンテナ名の重複等あるので追加で設定が必要です。それはまたの機会に…
カスタムプリセット変更
カスタムプリセットにnodePort
、apiNodePort
を追加します。ポート番号は使用していない番号を適当に設定してください。
私は7911
にしました。
nodePort: 7911
apiNodePort: 7911
nodes:
-
host: symbol01.harvestasya.com
friendlyName: _Symbol_HarvestasyaNode01/.
docker-compose.yml 変更
docker-compose.yml
まで変更するコマンド的なものは存在してないようなので、手動で node コンテナのポートを変更します。7900
となってるところを7911
に書き換えます。
node:
user: '1001:998'
container_name: node
image: symbolplatform/symbol-server:gcc-1.0.3.6
command: /bin/bash /symbol-commands/start.sh /usr/catapult ./data server broker node NORMAL true
stop_signal: SIGINT
working_dir: /symbol-workdir
restart: on-failure:2
ports:
- '7911:7911'
volumes:
- ../nodes/node:/symbol-workdir:rw
- ./server:/symbol-commands:ro
depends_on:
- db
- broker
networks:
default:
aliases:
- symbol01.harvestasya.com
hostname: symbol01.harvestasya.com
docker-compose.yml の変更を自動化
symbol-bootstrap compose --upgrade
をしたらdocker-compose.yml
のポートを変える必要があるのですが、忘れるので私はバッチで一括で変更するようにしてます。
#!/bin/bash
echo "preset更新"
symbol-bootstrap config -p mainnet -a dual -c my-preset.yml --upgrade
echo "compose更新"
symbol-bootstrap compose --upgrade
echo "composeポート変更"
sed -i s/7900:7900/7911:7911/ target/docker/docker-compose.yml
さいごに
これで、同じネットワーク上に複数台のノードがあっても上手く通信出来るようになりました。
同ネットワーク上にサーバー複数台ってそうそう居ない気もしますが…うちはあるんですよ!
そうそう、リバースプロキシってのがありますね。これで上手く振り分けられないかと考えたんですが、この 7900 はソケット通信なのでホスト名使ってるのか謎なので出来るか不明です。
土台は作っているのですが、ノード 2 つ余裕で動くマシンが必要なので確認に手が出てないです…