概要
catapultを簡単に動かせるcatapult-service-bootstrap
というものがあります。
これは、docker-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
が使用しています。)
harvestKey = <nemesis_addresses_harvesting private key>
config-node.properties
[localnode]
の箇所を変更します。
[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
が使用しています。)
[account]
bootKey = <peer_nodes private key>
peers-p2p.json
以下をpeer-node-1
の下に挿入します。カンマを忘れないで。
公開鍵は、build/generated-addresses/addresses.yaml
を開き、peer_nodes
以下にあるアカウントの3番目のやつ。
{
"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
に以下を追記します。
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しかいませんでした。
ハーベストするピアノードを追加したことにより、Harvesterが二人になりました。
所感
catapult-service-bootstrap
に、ピアノードを追加することができました。
追加するためには、いくつかのファイル編集を行う必要があります。
peers-p2p.json
について、今回はpeer-node-2
のものだけ編集しました。しかし、ネットワークをより強固にするために、peer-node-0
とpeer-node-1
、api-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