Ethereum_05.Geth 환경 설정(Multi Node 만들기)

안녕하세요 카이조쿠BM입니다.

 

오늘은 하나의 ip를가지고 여러 node를 만들어 볼 것입니다.

 

원래 Geth는 하나의 노드의 역할을 합니다. 그러나 우리는 주변 환경 혹은 개발 환경으로 인해 한대의 PC만을

 

사용하지요? 그런 불편함을 덜어드리려고 제가 학습한 내용을 가지고 왔습니다.

 

먼저 여러개의 노드를 만들고 각각의 노드들을 나만의 Private BlockChain Network에 참여시키는

 

방법은 3가지나 있습니다.

 

1. bootnode 사용

2. admin.addPeer() 사용

3. static-nodes.json

 

첫번째 방법은 왜 안돼는지 모르겠는데 아무튼 안돼요!! 

 

그래서 더 알아보고 다음에 포스팅 하도록 하겠습니다!!

 

먼저 개발 환경은 다음과 같습니다.

 

1번 Node : Geth 1.8.23-stable 192.168.1.235:9991

2번 Node : Geth 1.8.23-stable 192.168.1.235:9992

3번 Node : Geth 1.8.23-stable 192.168.1.235:9993

 

세개의 노드다 Geth 1.8.23-stable 버전을 사용하고요 IP는 사설 IP를 사용하고 각각 port번호는 9991,9992,9993으로

 

환경설정을 했습니다.

 

자 그럼 시작해볼까요?

 

2. admin.addPeer() 사용

먼저 각각의 노드들을 다음과 같이 실행합니다.

 

$geth --networkid 12 --datadir /home/lbm/Geth_TestNet/Testnode1 --port 9991 console 2>> /home/lbm/Geth_TestNet/Testnode1/geth.log

$geth --networkid 12 --datadir /home/lbm/Geth_TestNet/Testnode2 --port 9992 console 2>> /home/lbm/Geth_TestNet/Testnode2/geth.log

$geth --networkid 12 --datadir /home/lbm/Geth_TestNet/Testnode3 --port 9993 console 2>> /home/lbm/Geth_TestNet/Testnode1/geth.log

 

그리고 노드들은 각각의 식별자인 enode를 가지고 있는데 이 enode를 알아야 합니다.

 

그 이유는 이 enode를 이용해 서로 연결 시키기 위함입니다.

 

enode 명령어는 다음과 같습니다.

 

> admin.nodeInfo.enode

 

그럼 다음과 같은 형태로 enode가 나옵니다.

 

1번 enode 

"enode://53f557cfb53a0c8608e97b937dbc2e51fe12f244d6658896d4ba451ac20fb4941454f3d7f642a71fcf6e2e06f2c14db97144469554fa888386cbce6ccf687ed1@127.0.0.1:9991"

 

2번 enode

"enode://f35efdf1bf1b4b3b8fdbc387217680e006810dd7d8492912401fda3f47c40c20cb308ea2ef1508e4198ef6eb3397668a4f09b401d115ca749c88c0a4c475e306@127.0.0.1:9992"

 

3번 enode

"enode://52dd42a129186d174ebe1e3d3ab916c949f4743da49a7f17c04004c48f4fc724a623c985ff44b715020c04b134770854c594966cb63436e75548f7af721ae4cd@127.0.0.1:9993"

 

이제 이 enode들을 메모장에 따로 기록하세요!! 꼭꼭!!

 

그리고 첫번째 노드에서 다음과 같은 명령어로 2번 , 3번 enode들을 등록시켜줍니다.

 

> admin.addPeer()

 

2번 enode 등록
3번 enode 등록

 

등록이 제대로 되었으면 true를 반환합니다.

 

1번 노드에서 2번 3번이 제대로 연결되었나 확인하기 위한 명령어는 다음과 같습니다.

 

> admin.addPeer()

> net.peerCount

 

결과는 다음과 같이 나와요

 

net.peerCount 수행
2번 노드 확인

 

3번 노드 확인

 

이렇게 보면 사실상 1번 노드가 2번,3번 노드의 징검다리 역할을 한다고 볼 수 있죠

 

그리고 중요한 사실은 2번이나 3번노드에서 연결된 노드확인을 해보면 1개 밖에 뜨지 않아요

 

1번에 의해 2번과 3번이 동기화가 된다는 말입니다.

 

3. static-nodes.json 사용

 

다음으로는 static-nodes.json입니다. 멀티 노드 구성시 1번 방법과 2번 방법은 Geth 클라이언트를 종료하면

 

다른 노드들과 연결이 끊겨 매번 연결 작업을 해줘야 합니다. 하지만 귀찬아요...-_-

 

그래서 static-nodes.json 방법이 있습니다!!

 

이 방법은 static-nodes.json 파일을 만들어 다른 노드들의 enode를 기록해두는 것이죠

 

그럼 Geth 클라이언트 실행시 Geth 클라이언트가 자동적으로 해당 파일을 보고 연결을 실행하죠.

 

그럼 시작해볼까요 ?

 

먼저 위에서 2번과 3번 노드의 enode를 확인했죠? 그 enode를 사용합니다.

 

2번 노드 enode
3번 노드 enode

 

1번 노드 디렉터리에서 static-nodes.json 파일을 만들어 줍니다.

 

그리고 다음과 2번 3번 노드의 enode를 입력해 줍니다.

 

1번 노드 디렉터리 static-nodes.json

그리고 나서 1번 노드에서 Geth를 실행해 줍니다. 

 

$geth –networkid 12 –datadir /home/lbm/Geth_TestNet/Testnode1 –port 9991 console 2>> /home/lbm/Geth_TestNet/Testnode1/geth.log

 

그리고 잘 연결되었나 위에서 설명했던 admin.peers와 net.peerCount를 사용해 확인합니다.

 

 

노드 연결 확인

 

그럼 잘 연결된걸 확인할 수 있겠죠?

 

이렇게 저의 Ethereum 개발 환경을 이루었습니다!! 짝짝짝!!

 

이제 앞으로 이 환경에서 개발이 이루어질 예정 입니다!!

 

궁금하신점 있으시면 말씀해주세요 ~~

 

 

'IT Study > Block Chain' 카테고리의 다른 글

Ethereum_04.Geth 명령어 1편  (0) 2019.04.26
Ethereum_03.Geth 실행 및 옵션  (0) 2019.04.26
Ethereum_02.Geth 환경 설정  (0) 2019.04.26
Ethereum_01.Geth 설치  (0) 2019.04.26