Endpoint Node의 운영

소개

클레이튼은 크게 내부 Consensus Node Network (CNN)와 외부 Endpoint Node Network (ENN)로 나눠볼 수 있습니다. CNN은 블록 생성을 하고 ENN은 사용자의 transaction을 받아드리는 역할을 하고 있습니다. 사용자는 EN으로 transcation을 전송할 수 있습니다. 모든 EN에 누구나 접속을 할 수 있는 것이 아니기 때문에 사용자는 클레이튼 블록체인을 사용하기 위해서는 자신의 EN을 운영해야 합니다.

이전 에서 언급한 데로 누구나 Klaytn 네트워크에 접속하는 EN을 운영할 수 있습니다. 이번 글에서는 직접 EN 운용을 위한 필요한 것들에 대해서 알아 보겠습니다.

  1. 권장 Hardware 요구 사양
  2. 설치
  3. Chain data download 받기 및 EN 실행
  4. ENN에 접속 하기

1. 권장 Hardware 요구 사양

Klaytn Docs에서는 EN은 아래 요구사항을 만족해야한다고 언급하고 있습니다.
해당 링크를 참고 하세요

권장 Hardware 요구 사항

vCPU Memory (GiB) Storage (GiB) EBS Bandwidth (Gbps) Network Bandwidth (Gbps)
8 32 EBS-only 3,500 Up to 10

클레이튼의 EN의 요구사항에 컴퓨팅 파워가 높은 이유는 EN들이 매초마다 생성되는 블록을 받아 검증하고 저장을 해야되기 때문입니다. 최근 테스트로 보았을때 8 vCPU , 32 GB memory 의 hardware 일지라도 간혈적으로 동기화에 지연이 발생됨을 확인하였으며 계속 prefetch, state migration 기술등을 통해 균일한 성능을 보일수 있도록 개선중입니다.

왜 코어의 갯수가 많아야하나요? 블록을 검증하는 것은 컴퓨팅 자원을 많이 소모하는 작업입니다. EN 또한 블록을 받아 Transaction을 검증하는 작업을 매 블록마다 해야합니다.
검증은 두단계가 있습니다. 하나는 transaction의 서명을 검증하는 것이며 또하나는 EVM을 통해 transaction을 실행하는 과정입니다. EVM 실행시에는 순차적으로 transaction을 실행해야 함으로 많은 코어의 갯수로 인한 이득은 없지만 서명을 검증하는 과정은 동시에 여러 transaction을 처리할 수 있으므로 코어의 갯수가 많을 수록 성능향상이 됩니다.

위의 권장 Hardware 요구 사항에 맞는 물리 서버를 직접 운용 하는 것도 가능합니다.

2. 설치

Download

여기에서 클레이튼의 EN 바이너리를 다운로드 할 수 있습니다. 본인의 서버의 OS와 일치하는 바이너리를 다운 받으십시요.

설치

설치는 tar 파일을 풀어서 다음과 같은 디렉토리 구조가 나오는 것을 쉽게 확인할 수 있습니다.

.
├── bin
│   ├── ken
│   └── kend
└── conf
    └── kend_baobab.conf

디렉토리 구조를 바꾸지 마십시요. EN이 제대로 실행되지 않을 수 있습니다.
편의를 위해 bin 디렉토리를 $PATH에 추가할 수 있습니다.

만약 rpm 파일을 다운받았다면 yum install을 통해 설치하세요. 설치된 바이너리의 위치는 /usr/bin/ken 이며 설정파일은 /etc/kend/conf/kend.conf 에 위치하게 됩니다.

Configure

kend를 실행할때 설정파일 (연결할 네트워크에 따라서 conf/kend_baobab.conf 또는 /etc/kend/conf/kend.conf) 을 수정해야 합니다.
자세한 내용은 링크를 참조 하십시요.

만약 ken을 직접 실행한다면 해당 설정 파일은 실행에 영향을 미치지 않습니다.

3. Chain data 다운로드 및 EN 실행

빠른 동기화

EN운용시 가장 중요한 점은 최신 블록의 동기화를 유지하는 것입니다. 하지만 처음 EN을 실행할때에는 1900만 블록이상의 데이터를 다운받아야합니다. (2020년 2월 7일 기준)
P2P 환경에서 해당 데이터를 받는 것은 아주 느리기 때문에 빠른 동기화 방식을 추천합니다.

빠른 동기화는 클레이튼의 chain data의 스냅샷을 통해서 동기화를 하는 것으로 아래 링크를 통해서 가장 최신의 chain data 스냇샵을 다운받을 수 있브니다.

네트워크에 따라 알맞는 데이터를 다운받은 뒤에 설정파일 (kend.conf)에 설정한 DATA_DIR위치에 압축을 풀도록 합니다.

EN의 실행

EN의 실행을 위해서는 kend를 통해 실행하는 것을 권장합니다. 노드의 실행 및 정지는 아래 예제와 같이 쉽게 할 수 있습니다.

$ kend start
Staring kend: OK
$ kend stop
Shutting down kend: Killed

노드 실행시 기본 RPC의 port는 8551 그리고 klay API를 제공합니다.
(port를 변경을 하고 싶거나 지원 API를 변경하기 위해서는 설정파일을 수정하면 됩니다.)

4. ENN에 연결하기

kend를 통해 실행시 설정 파일에 NETWORK 또는 NETWORK_ID 항목을 어떻게 설정 하느냐에 따라서 어떤 네트워크에 연결 하는지를 설정할 수 있습니다.
기본적으로 NETWORK를 설정하지 않은경우 NETWORK_ID를 설정하여 특정 네트워크에 연결이 가능합니다.

Baobab 테스트 넷

Baobab 테스트 네트워크에 연결하는 경우 설정값입니다.

# cypress, baobab is only available if you don't specify NETWORK_ID.
NETWORK="baobab"
# if you specify NETWORK_ID, a private network is created.
NETWORK_ID=

Cypress 메인 넷

Cypress 메인 네트워크에 연결하는 경우 설정값입니다.

# cypress, baobab is only available if you don't specify NETWORK_ID.
NETWORK="cypress"
# if you specify NETWORK_ID, a private network is created.
NETWORK_ID=

만약 NETWORK_ID에 값을 적는 경우 NETWORK값은 무시가 됩니다.

특정 전용 네트워크

network ID가 3000인 특정 전용 네트워크에 연결하는 경우입니다.

# cypress, baobab is only available if you don't specify NETWORK_ID.
NETWORK=""
# if you specify NETWORK_ID, a private network is created.
NETWORK_ID=3000

결론

이제 EN을 운영할 준비가 되었습니다. EN을 통해 최신 블록을 다운로드 받고 transaction을 전파할수 있습니다. 추가적인 문의사항이 있다면 언제든지 문의를 남겨 주십시요.
감사합니다.

2개의 좋아요

막 EN 서버를 설치했습니다. 데이터 동기화 관련하여 질문이 있습니다.
EN 설치 문서상을 보면 스토리지 요구량이 2.5GB/1일 정도라고 하였는데… 전 이 자료를 기준으로 500GB 정도의 EBS를 확보했는데…

Cypress snapshot archive 를 보면, 데이터 1일치가 780GB 정도 되네요. 이것을 다운로드하여 동기화를 해야 한다고 하셨는데… 이것을 모두 AWS 의 경우 EBS에 저장해야 하나요? 그렇다면 EBS 용량을 얼마나 확보해야 합니까?

추가 질문있습니다. 문서상에 보면 설치파일이 cypress 용, baobab 용이 따로 있더군요.
그런데 생각해보면 이게 설치파일이 다를 이유는 없을 것 같거든요? 그냥 config 파일의 내용만 변경하면 가능해야 하는 것 아닌가 싶은데요.

EN 서버를 설치하면서 cypress 용과 baobab 용을 모두 다운로드하셔 설치를 시도하니까 충돌하는 것 같은데… 한 장비에 두 버전을 설치하는 것이 가능한 것인가요?

가능하다면, 먼저 baobab으로 접속하여 여러 가지 테스트를 해 본 다음 cypress로 돌리고 싶기는 합니다만.

해당 2.5GB는 300 byte Tx가 100 TPS인 상황에서의 용량입니다.
현재 Cypress full node의 chaindata는 800GB정도입니다.
https://packages.klaytn.net/cypress/chaindata/
https://packages.klaytn.net/baobab/chaindata/

1TB정도의 EBS SSD(io1)사용을 권장드립니다.

1개의 좋아요

Cypress/Baobab 용 설치파일을 구분해놓은것은 kend.conf 파일의 설정이 달라서 입니다.
말씀하신데로 conf파일 내용만 다르므로 동일한 ken binary를 사용하시면 됩니다.

Cypress/Baobab를 같은 instance에서 실행하고 싶은 경우 각각의 conf파일에 port와 dataDir만 다르게 설정하셔서 실행하셔도 됩니다.

1개의 좋아요

몰라서 드리는 질문인데요.
https://packages.klaytn.net/cypress/chaindata/ 여기 링크의 최신 것 하나만 받아서 설치하면 된다는 거죠?

그리고 chaindata 800GB 이고, 1TB 용량을 확보하면 200GB 정도가 남는데, 여기서 하루 평균 2.5GB 씩 스토리지가 쌓여간다고 보면 되는 겁니까?
그렇다면, 산술적으로는 80일 정도면 나머지 200GB를 다 채우는 거겠네요?

그런데 만약 동일 장비에 baobab과 cypress를 동시에 설치하겠다면, 2TB가 필요하다는 거죠?
아니면 baobab을 설치하여 테스트하다가 cypress할 때, baobab 데이터를 삭제하고 설치하던가…

이렇게 해야 하는 겁니까?

이런 궁금증도 생깁니다. 이대로면 3개월 후면 1TB를 넘을거고… 내년이면 2TB를 넘을거고요.
이렇게 계속 데이터를 쌓아갈 수는 없을 것 같습니다.

특히 저희같은 업체가 이 모든 데이터를 동기화하여 가지고 있는 것도 좀 이상합니다.

자체 서비스를 목적으로 EN서버를 돌린다고 할 때, 해당 서비스에 필요한 데이터만 선택적으로 저장할 수 있다면, 용량 면에서나 성능면에서 훨씬 효율적일 수 있을 듯 한데요… 그런 구상은 비현실적인건가요?

현재의 CN, EN 처럼 전체 데이터를 가지는 노드가 있고, 새로운 경량 노드로 해당 서비스에 필요한 데이터만 가지는 노드를 생각해 볼 수 는 없을까요?

1개의 좋아요

해당 링크에서 제일 위에 있는 것이 가장 최신의 chaindata입니다. 최신으로 사용하시면 되겠습니다.
현재 cypress의 chaindata 증가속도는 2.5GB/Day보다는 많이 낮습니다. 그러므로 1TB로 현재는 충분하며 Cypress chaindata의 용량 증가에 따라 더 늘리시면 되겠습니다.

Baobab의 경우는 50GB정도로 적습니다. (함께사용한다고 하면 Baobab chaindata 용량만큼만 추가로 필요합니다.)

함께 사용한다면 1TB 충분해보입니다만 chaindata를 받아 압축을 풀고한다면 2TB정도는 필요하겠습니다. 압축푼뒤에 비용이 고려한다면 낮춰도 되겠습니다.

1개의 좋아요

현재 chain data의 증가속도는 그보다 훨씬드리지만 말씀하신 데이터 증가이슈가 있습니다.

그래서 조만간에 배포할 v1.5.0에는 state migration 기능을 추가하여
현재 Cypress 800GB를 최신 데이터만 migration하여 200GB로 줄이는 기능을 추가할 예정입니다.

최신 state만 필요한경우 해당 기능을 통해 chain data 용량을 줄이거나 저희가 migration한 chaindata를 공개하면 해당 chain data로 변경하시면 되겠습니다.

해당 신규기능 릴리즈시 forum과 github등을 통해 공유드리겠습니다.

2개의 좋아요

v1.5.0 이 배포되었는데요.
업데이트 관련 문서가 없는 것 같습니다. 문서는 언제쯤 제공되나요?

v1.4.x에서 v1.5.0 으로 EN 을 업데이트하는 방법과 위에 말씀하신 데이터를 200GB 정도로 줄이는 방법에 대하여 문서화가 있으면 감사하겠습니다.

1개의 좋아요

안녕하세요.
답변이 늦어 죄송합니다.

v1.5.0 릴리즈에 관심 가져 주셔서 감사합니다.

간단한 사용 예제에 대해서는 조만간 블로그 포스팅 등을 통해 공유 드리려고 합니다.
또한 직접 state migration을 하지않고 migration된 chain데이터를 사용할수 있도록 migration된 chain data를 공개할 예정입니다.

현재는 관련 API에 대한 내용만 공개되어 있습니다.

조만간 블로그 포스팅을 통해서 안내드리도록 하겠습니다.

1개의 좋아요

안녕하세요. state migration 사용 방법을 안내하는 블로그 포스팅이 되었습니다.
참고 부탁드립니다. 감사합니다.

2개의 좋아요