Docker로 서비스체인 구동

docker로 4개의 서버를 구성해 서비스체인을 구동하려고 합니다.
homi 옵션중 docker 옵션이 default로 있어서 실행을 해봤는데, doc에 있는것과 달리
static-nodes.json, nodekey, validator 파일이 생성되지 않았습니다. 대신, docker-compose.yml파일이 생성되길래 확인해보니 CN-0~CN-3까지 총 4개의 ipaddress와 port가 나왔습니다.

다시 homi setup local 옵션으로 실행한 다음 docker-compose 파일의 내용에 맞춰서
static-nodes.json 파일을 구성해봤는데 서버가 실행하자마자 down이 됩니다.
제가 세팅한 방법은 docker-compose에 있는 4개의 ip를 각각 static-node.json 파일의 ip에 해당하는 부분에 기입했고
port 의 경우
ports:
- ‘32324:32323’
에서 앞부분의 port를 기입했습니다.
ex) kni://dfbf405a686e0eb5bc27d23856113dde98e1802df21fbdc66f23348c6b9ed48d865a828a70c9c5a30c7bf28c221e4fdba20675a96006c0fdb12e8fae28bb83fa@172.16.239.10:32324?discport=0\u0026ntype=cn

kscn 폴더 내부의 conf/kscnd.conf도
port 부분을 앞부분의 port(32324)를 기입했습니다.

1개의 좋아요

안녕하세요. 서비스체인 관련해서 문의주셔서 감사합니다.

말씀 하신데로 homi setup을 통해서 아래와 같이 3가지 방식으로 띄울수 있습니다.
참고로 항상 homi setup을 하면 그때그때 랜덤하게 nodekey를 생성하고 static-nodes.json, genesis 파일에 반영하기 때문에 이 들의 조합이 맞지 않으면 동작이 되지 않습니다.

  • docker 방식 : docker-compose.yml 파일 생성
  • local 방식 : nodekey와 static-nodes.json(local에서 사용가능하도록 다른 포트로 설정) 파일 생성
  • remote 방식 : nodekey와 static-nodes.json(포트가 동일) 파일 생성

Docker 방식
먼저 docker 방식을 살펴보겠습니다. 따로 Docs가 없지만 먼저 설명을 드리고 향후 Docs에 보충하도록 하겠습니다.

  • 이 경우에는 따로 nodekey/genesis/static-nodes.json파일을 생성하지 않고 docker-compose.yml파일안에 넣어주고 있으며 nodekeyhex 에 nodekey정보가 있으며 이걸로 test KLAY를 사용가능 합니다.
  • homi 기본 docker image ID 변경이 필요합니다 아래 내용을 살펴봐주십시요.
➜  homi setup --scn-num 4 --test-num 1 --servicechain --p2p-port 30000 -o docker-4scn-default
Created :  docker-4scn-default/docker-compose.yml
Created :  docker-4scn-default/prometheus.yml
Created :  docker-4scn-default/Klaytn.json
Created :  docker-4scn-default/Klaytn_txpool.json
➜  cd docker-4scn-default
➜  sed -i '' 's/klaytn-base/klaytn\/klaytn/g' docker-compose.yml         # 현재는 homi에서 기본으로 되는 docker-image ID를 public한 klaytn docker id로 변경이 필요합니다. (향후에 homi에 반영토록 하겠습니다.)
➜  docker-4scn-default docker-compose up
Creating network "docker-4scn-default_app_net" with driver "bridge"
Creating docker-4scn-default_SCN-3_1      ... done
Creating docker-4scn-default_prometheus_1 ... done
Creating docker-4scn-default_SCN-0_1      ... done
Creating docker-4scn-default_SCN-2_1      ... done
Creating docker-4scn-default_grafana_1    ... done
Creating docker-4scn-default_SCN-1_1      ... done
Attaching to docker-4scn-default_prometheus_1, docker-4scn-default_SCN-0_1, docker-4scn-default_grafana_1, docker-4scn-default_SCN-2_1, docker-4scn-default_SCN-3_1, docker-4scn-default_SCN-1_1
SCN-0_1       | WARN[12/18,08:41:02 Z] [19] Some input value of genesis.json have been set to default or changed
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Setting connection type                   nodetype=cn conntype=0
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress bootnodes are set
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Setting MaxPhysicalConnections            MaxPhysicalConnections=10
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set                 networkid=8217
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Cypress network ID is set                 networkid=8217
SCN-0_1       | INFO[12/18,08:41:02 Z] [18] Archiving mode of this node               isArchiveMode=false
SCN-0_1       | INFO[12/18,08:41:02 Z] [46] Non-single database is used for persistent storage  DBType=LevelDB
SCN-0_1       | INFO[12/18,08:41:02 Z] [46] LevelDB configurations                    path=/klaytn/klay/chaindata...

위와 같이 노드를 띄운이후에는 아래와 같이 RPC 로 접속이 가능합니다.
현재는 4개 노드를 각각 8551,2,3,4로 할당하여 각 노드를 접속 가능합니다.

➜  ksen attach http://localhost:8551
Welcome to the Klaytn JavaScript console!

instance: Klaytn/"SCN-0"/v1.5.3/linux-amd64/go1.14.6
 datadir: /klaytn
 modules: admin:1.0 debug:1.0 istanbul:1.0 klay:1.0 net:1.0 personal:1.0 rpc:1.0 subbridge:1.0 txpool:1.0 web3:1.0

> net.peerCount
3
> klay.blockNumber
77
> personal.importRawKey("6a579fa47a64d2b5a1985c0a52fdea064174db26af7d4709dfaad4e2f169227e", "test")           # docker-composer.yml 파일에서 얻은 nodekey정보로 account를 생성
"0xeff305a89df7ae7ba735a2f6f76a4940ac923280" # 주소확인
> klay.getBalance("0xeff305a89df7ae7ba735a2f6f76a4940ac923280") # balance 확인
1e+50

Local/Remote 방식
local과 remote 방식의 경우는 아래 link docs를 참고 부탁드립니다.

local의 경우는 한 PC에서 4대를 띄우는 것이기 때문에 static-nodes.json 파일에 port가 다 다르게 나오게 됩니다.
그러므로 각 노드별 conf/kscnd.conf에서 PORT값을 각각 static-nodes.json파일처럼 설정이 필요합니다.
nodekey로 부터 static-node.json의 kni 주소가 나오는 것이니 순서를 잘 맞춰 주셔야 합니다.

remote의 경우 각 노드별 ip와 nodekey의 순서만 잘 맞춰 주시면 됩니다.

진행하시다가 추가적으로 문의가 있으시면 언제든지 문의부탁드립니다.
부족한 Docs 부분은 채워 나가도록 하겠습니다.

감사합니다.

1개의 좋아요