Edited at

catapult-service-bootstrapにpeer-nodeを追加する その1 サービス追加


概要

catapultを簡単に動かせるcatapult-service-bootstrapというものがあります。

https://github.com/tech-bureau/catapult-service-bootstrap

これは、docker-composeで動かすことができます。

https://docs.docker.com/compose/

そして、docker-compose.ymlに書いてある一つ一つのコンテナをサービスと呼びます。

catapult-service-bootstrapを動かすと、このようなコンテナが立ち上がります。

$ docker-compose ps

Name Command State Ports
---------------------------------------------------------------------------------------------------------------------------
catapult-service-bootstrap_api-node-0-nemgen_1 bash -c /bin-mount/wait /s ... Exit 0
catapult-service-bootstrap_api-node-0_1 bash -c /bin-mount/wait /s ... Up
catapult-service-bootstrap_db_1 docker-entrypoint.sh bash ... Up 27017/tcp
catapult-service-bootstrap_generate-configs_1 ash -c /bin-mount/wait /ad ... Exit 0
catapult-service-bootstrap_generate-raw-addresses_1 bash -c /bin-mount/generat ... Exit 0
catapult-service-bootstrap_init-db_1 docker-entrypoint.sh bash ... Exit 1
catapult-service-bootstrap_peer-node-0-nemgen_1 bash -c /bin-mount/wait /s ... Exit 0
catapult-service-bootstrap_peer-node-0_1 bash -c /bin-mount/wait /s ... Up
catapult-service-bootstrap_peer-node-1-nemgen_1 bash -c /bin-mount/wait /s ... Exit 0
catapult-service-bootstrap_peer-node-1_1 bash -c /bin-mount/wait /s ... Up
catapult-service-bootstrap_rest-gateway_1 ash -c /bin-mount/wait /st ... Up 0.0.0.0:3000->3000/tcp
catapult-service-bootstrap_store-addresses_1 ash -c /bin-mount/wait /ad ... Exit 0

今回は、これに、新しいサービスとして、ピアノードを追加して行きたいと思います。名前は、peer-node-2にしましょう。

別サーバーでやる場合はこちら⇒catapult-service-bootstrapにpeer-nodeを追加する その2 サーバー編


作業


ファイル編集

cd build/catapult-config

cp -r peer-node-0 peer-node-2
cd peer-node-2/userconfig/resources


config-harvesting.properties

build/generated-addresses/addresses.yamlを開き、nemesis_addresses_harvesting以下にあるアカウントの2番目の秘密鍵を設定します。(1番目はpeer-node-0が使用しています。)


config-harvesting.properties

harvestKey = <nemesis_addresses_harvesting private key>



config-node.properties

[localnode]の箇所を変更します。


config-node.properties

[localnode]

host = peer-node-2
friendlyName = peer-node-2
version = 0
roles = Peer



config-user.properties

build/generated-addresses/addresses.yamlを開き、peer_nodes以下にあるアカウントの3番目の秘密鍵を設定します。(1番目はpeer-node-0が、2番目はpeer-node-1が使用しています。)


config-user.properties

[account]

bootKey = <peer_nodes private key>



peers-p2p.json

以下をpeer-node-1の下に挿入します。カンマを忘れないで。

公開鍵は、build/generated-addresses/addresses.yamlを開き、peer_nodes以下にあるアカウントの3番目のやつ。


peers-p2p.json

    {

"publicKey": "<peer_nodes public key>",
"endpoint": {
"host": "peer-node-2",
"port": 7900
},
"metadata": {
"name": "peer-node-2",
"roles": "Peer"
}
}


docker-compose.yml

docker-compose.ymlに以下を追記します。


docker-compose.yml


peer-node-2-nemgen:
build: dockerfiles/nemgen
command: bash -c "/bin-mount/wait /state/configs-generated && /bin/bash /userconfig/nemgen.sh && touch /state/peer-node-2-nemgen"
stop_signal: SIGINT
volumes:
- ./build/nemesis/:/nemesis
- ./data/peer-node-2:/data:rw
- ./bin/bash:/bin-mount
- ./build/state:/state:rw
depends_on:
- generate-configs

peer-node-2:
build: dockerfiles/catapult
command: bash -c "/bin-mount/wait /state/peer-node-2-nemgen && /bin/bash /userconfig/startServer.sh"
stop_signal: SIGINT
volumes:
- ./build/catapult-config/peer-node-2/userconfig/resources/:/userconfig/resources/
- ./data/peer-node-2:/data:rw
- ./bin/bash:/bin-mount
- ./build/state:/state
depends_on:
- generate-configs
- peer-node-2-nemgen



起動

$ docker-compose up -d peer-node-2

Starting catapult-service-bootstrap_generate-configs_1 ... done
Creating catapult-service-bootstrap_peer-node-2-nemgen_1 ... done
Creating catapult-service-bootstrap_peer-node-2_1 ... done

ログを確認。

ブロック同期に時間がかかります。

$ docker-compose logs -f --tail=100 peer-node-2

<debug> (chain::CompareChains.cpp@95) comparing chain scores: 78219980565058755 (local) vs 2339774398129255418 (remote)
<debug> (chain::ChainSynchronizer.cpp@290) pulling blocks from remote with common height 7561 (fork depth = 0)
<info> (chain::ChainSynchronizer.cpp@203) peer returned 360 blocks (heights 7562 - 7921)
<debug> (disruptor::Disruptor.cpp@42) disruptor queuing element 22 (360 blocks (heights 7562 - 7921) [1A000000] from Remote_Pull)
<info> (chain::RemoteApiForwarder.h@65) completed 'synchronizer task' (peer-node-0 @ peer-node-0) with result Success
<debug> (utils::StackLogger.h@37) pushing scope 'PosImportanceCalculator::recalculate'
<debug> (observers::PosImportanceCalculator.cpp@65) recalculated importances (22 / 25 eligible)
<debug> (utils::StackLogger.h@47) popping scope 'PosImportanceCalculator::recalculate' (0ms)
<info> (disruptor::ConsumerDispatcher.cpp@44) completing processing of element 22 (360 blocks (heights 7562 - 7921) [A2A9E8D6] from Remote_Pull), last consumer is 0 elements behind

ブロック高と速度を計算して、必要なら寝ましょう。

わたしの環境では、およそ3秒で360ブロックでした。


確認

ブロックエクスプローラーを見てみます。

作業前は、このように、一人のHarvesterしかいませんでした。

image.png

ハーベストするピアノードを追加したことにより、Harvesterが二人になりました。

image.png


所感

catapult-service-bootstrapに、ピアノードを追加することができました。

追加するためには、いくつかのファイル編集を行う必要があります。

peers-p2p.jsonについて、今回はpeer-node-2のものだけ編集しました。しかし、ネットワークをより強固にするために、peer-node-0peer-node-1api-node-0に対して、同じようにしておくのが良いと思います。

理想的には、docker-compose up -d --scale peer-node=10 api-node=3みたいにできるようにすることです。しかし、それは大工事になりそうです。

別サーバーでやってみました⇒catapult-service-bootstrapにpeer-nodeを追加する その2 サーバー編


関連記事

catapult-service-bootstrapにpeer-nodeを追加する その1 サービス追加

https://qiita.com/planethouki/items/b80fe29157d80a63122c

catapult-service-bootstrapにpeer-nodeを追加する その2 サーバー編

https://qiita.com/planethouki/items/4c73a6b924b92529bd32

catapult-service-bootstrap その3 ホスト名とポート変更

https://qiita.com/planethouki/items/d365f2344c0f7a6c3523

catapult-service-bootstrap その4 チェーンの手動削除

https://qiita.com/planethouki/items/7ec5404701adeb96bb8e

catapult-service-bootstrap その5 catapult.tools.health/network

https://qiita.com/planethouki/items/5ed19ae8ceb67ad6fee0