[증인노드 초보자 가이드] #1 증인 노드 설명 및 서버 선택 (Witness Node and Server)

in SCT.암호화폐.Crypto3 years ago (edited)

최근 막 증인 노드를 돌리기 시작한 이타인클럽(@etainclub)입니다.
증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

애초에 라즈베리파이에서 증인 노드를 돌리기 위해서 노력했으나, 소스 빌드는 성공하고, 프로그램 시작은 됐으나 특정 블록에서 동기화가 안돼서 일단 해당 프로젝트는 중단 상태입니다.
Steem on RPi 개발 히스토리

증인 노드를 준비하면서 알게 된 내용을 정리해서 공유합니다.

시드 노드 (Seed Node)

증인 노드를 설명하기 앞서, 시드 노드 (seed node)라는 것을 알 필요가 있습니다. 시드 노드는 블록 데이터를 동기화하고 블록 데이터를 요청하고 제공하는 서버 역할을 합니다. 블록체인의 기본 노드개념입니다. 시드 노드가 없다면 블록체인이 성립되지 않는 것이죠.

블록체인은 바로 이 시드 노드들이 블록데이터를 동기화하고 데이터를 분산해서 저장하는 것입니다.

스팀의 경우 현재 운영되는 시드 노드의 리스트는 다음과 같습니다.

p2p-seed-node = seed.steemworld.org:2001
p2p-seed-node = seed.justyy.com:2001
p2p-seed-node = seed.steemdb.online:2001
p2p-seed-node = seed.steemhistory.online:2001
p2p-seed-node = seed.steemzzang.com:2001
p2p-seed-node = seed.steem.fans:2001
p2p-seed-node = seed.supporter.dev:2001
p2p-seed-node = seed.goodhello.net:2001
p2p-seed-node = seed-east.steemit.com:2001
p2p-seed-node = sn1.steemit.com:2001
p2p-seed-node = sn2.steemit.com:2001
p2p-seed-node = sn3.steemit.com:2001
p2p-seed-node = sn4.steemit.com:2001
p2p-seed-node = sn5.steemit.com:2001
p2p-seed-node = sn6.steemit.com:2001

https://developers.steem.io/quickstart/steemd_nodes

몇몇 증인들이 운영하는 노드들이 보입니다.

이 시드 노드들이 많아야 블록체인이 더욱 안정화가 되는 것입니다.

증인 노드 (Witness Node)

증인 노드는 기본적으로 시드 노드입니다. 차이점은 블록을 채굴한다는 점입니다. 시드 노드는 블록을 동기화하지만 보상이 없습니다. 따라서 시드 노드를 돌리는 증인들을 적극 응원해야 하는 것이죠. 시드 노드 돌리는 것도 증인 노드와 동일한 스펙의 서버가 필요합니다.

증인 보상은 채굴 블록당 0.8 SP입니다.

제 경우로 살펴보면, 증인 노드를 시작하고 24시간 동안 채굴한 블록 수는 18입니다.
여기서 확인할 수 있습니다.
https://steemyy.com/witness-ranking/?id=etainclub
image.png

블록 채굴 보상 총액이 얼마인지 스팀 월드에 가면 볼 수 있습니다.
https://steemworld.org/@etainclub
image.png

참고로, 메인 증인 노드의 경우는 한 달에 채굴 보상이 10,000 SP 정도 됩니다.
메인 증인은 20위까지입니다. 스팀 블록은 3초에 하나씩 채굴되고, 이 메인 증인 노드가 돌아가면서 채굴을 합니다. 그런데 메인 증인 노드가 채굴을 미싱하는 경우가 발생합니다. 이 때는 20위 이하의 증인 노드가 채굴을 하게 되는 것입니다. 그래서 저 같이 순위가 낮은 증인 노드도 채굴을 가끔씩 할 수 있는 것입니다.

풀 노드 (Full Node)

시드 노드, 증인 노드 모두 기본적으로 모든 블록 데이터를 동기화합니다. 현재 그 크기가 303GB입니다 (2021년 10월 16일 기준).
풀 노드는 블록 동기화 및 채굴이외에 다른 기능도 수행하는 역할을 합니다. 주요 역할이 RPC (Remote Procedure Call) 서버입니다. 우리가 스팀잇 홈페이지에서 포스팅할 때, 포스팅한 것을 스팀 블록에 등록시키거나 포스팅 데이터를 가져오기 위해서는 여러 가지 API (applicaiton programming interface)가 필요합니다. 이런 API를 제공하는 것을 풀 노드가 합니다.

@ayogom님의 풀 노드 참고 자료 참고. https://www.steemcoinpan.com/hive-101145/@ayogom/steem-node-full-node-1

노드 설정에 아래와 같이 여러 API를 플러그인 형태로 제공하면 RPC 기능을 하게 됩니다.
참고. https://files.steem.fans/

shared-file-full-threshold = 9900
plugin = webserver p2p json_rpc account_by_key reputation market_history
plugin = database_api account_by_key_api network_broadcast_api reputation_api market_history_api condenser_api block_api rc_api

증인 노드 권장 스펙

증인 노드를 돌리기 위해서는 적정 수준 이상의 하드웨어가 필요합니다. 중요한 것은 RAM, SSD, 네트워크 통신입니다.

RAM

권장 사양은 16GB 이상입니다. 라즈베리 파이는 최대 8GB인데, 가능한지 아직 테스트가 안된 상태입니다. RAM은 스토리지에 있는 데이터를 RAM에 올려서 사용하기 때문에, 용량이 많을수록 한 번에 더욱 많은 데이터를 처리할 수 있습니다. SSD와 직접적으로 통신하지 않고 RAM에 올려진 데이터와 통신해서 더욱 빠르게 처리할 수 있습니다.

SSD (스토리지)

스토리지는 SSD를 권장합니다. 최근 SSD는 NVMe 인터페이스를 사용합니다. SATA, SATA2 보다는 NVMe 인터페이스를 지원하는 SSD를 사용하세요.

권장 용량은 1TB 이상입니다. 블록 데이터는 현재 300GB 정도인데, 블록 동기화를 빠르게 하기 위해서 블록 파일을 미리 받는데, 이것을 받는 거, 압축 푸는 것등을 생각하면 1TB 정도가 있어야 합니다.

512GB도 가능은 합니다. 다음 두 가지 방법이 있습니다.

  • 블록을 처음부터 동기화 (매우 시간이 오래 걸립니다. 몇 달?)
  • 블록 파일을 다운로드 하면서 바로 압축을 푸는 방법
$ wget -c -qO- https://files.steem.fans/data/steem_witness-20210806.tar.lz4 | lz4 -d | tar x

블록 파일을 다운로드 하면서 바로 압축하는 방식은 중간에 파일 다운로드가 중지되면 처음부터 다시 파일 받기를 시작해야 해서 매우 안정적 통신 네크워크가 아니면 파일을 다 받고 압축을 풀기가 쉽지 않습니다. 저도 몇 번 해봤는데, 자꾸 중간에 파일 다운로드가 끊겼습니다. 권장하는 방법은 아니지만, 스토리지 용량이 작다면 시도해 볼 수 있습니다.

그래서, 스토리지 권장은 1TB 이상입니다.

RAID

스토리지 선택에서 있어서 알아둬야 할 것인 RAID 입니다.

서버는 백업을 위해서 여분의 스토리지를 가지고 있습니다. 제가 사용하는 서버의 스토리지 사양입니다.

2x 512GB NVMe SSD

이것이 의미하는 것은 512GB SSD이며, NVMe 인터페이스의 스토리지이고, 512GB가 2개 있다는 것입니다.
1TB로 표시하지 않고 2x 512GB로 표시한 것은 512GG가 두 개가 있다는 것이고, 기본적으로 하나는 백업용이라는 것입니다.

아마 기본적으로 RAID 1로 설정되어 있을텐데, 이것은 한개는 백업용으로, 사용할 수 있는 최대 스토리지는 512G가 됩니다.

image.png
출처: https://kimhyun2017.tistory.com/17

권장하지는 않지만 RAID 1이 아니라 RAID 0으로 하여 2개의 512GB를 1 TB 하나처럼 사용할 수도 있습니다. 이것이 RAID 0입니다.

image.png
출처: https://kyumdoctor.co.kr/22

RAID 개념 참고.
https://blog.naver.com/scrolldown/220981477416

저는 RAID 0으로 해서 1 TB를 사용 중입니다. 권장하는 방식은 아니지만, 주기적으로 블록 파일을 백업해 놓고 사용할 예정입니다. 문제가 생기면 백업 파일로 부터 동기화를 빨리 할 수 있습니다. 그렇다고 해도 2개의 스토리지 중 하나에 문제가 생기면 전체 스토리지 사용을 못하므로 (두 개를 하나로 연결해서 쓰고 있기 때문에 하나가 잘못되면 전체가 사용 불가가 됨) 불안한 시스템입니다. 권장은 RAID 1로 백업 스토리지를 사용하는 것입니다.

네트워크 속도 및 안정성

네트워크 속도와 안정성은 블록 동기화하고 채굴하는데 매우 중요합니다.
저는 현재 1gbps 의 네트워크 속도 서버를 사용하고 있습니다.

CPU, GPU

증인 노드를 돌리는데, CPU가 어느 정도 스펙이 되어야 하는지는 잘 모르겠습니다. 따로 언급되는 경우도 적습니다.
제가 사용하는 CPU는 AMD Ryzen 5 3600 Hexa-Core입니다. 아직 메인 증인처럼 채굴한게 아니라 어떨지 모르겠지만 무난해 보입니다.
https://www.cpubenchmark.net/cpu.php?cpu=AMD+Ryzen+5+3600&id=3481

비트코인과 달리 스팀의 경우는 채굴하는데, GPU 역할이 없습니다. GPU는 프로그램을 병렬로 처리하는데 효과적인 거라 스팀에서는 필요하지 않습니다.

Dedicated Server vs VPS

클라우드 서버는 크게 두가지가 있습니다. 데디케이티드 Dedicated Server 즉 전용 서버와 VPS (virtual private server) 가상 서버입니다. 전용 서버는 하나의 물리 서버를 전용으로 사용하는 것을 의미합니다. 반면에 가상 버서는 하나의 물리 서버에 여러 서버를 위해 가상 공간을 만들어서 사용하는 것입니다.

전용 서버가 증인 노드 운영에 적합니다.

서버를 고를 때, dedicated server 인지 아닌지 확인하는 것이 중요합니다. VPS로 해도 문제가 없을 수 있지만 권장은 dedicated server입니다.

서버 업체는 여러 곳이 있습니다. 충분히 알아본 후에 선택하시는 것이 좋습니다. 저렴한게 좋지만, 안정성도 따져봐야 합니다. 참고로 dedicated server의 경우 물리 서버를 준비해야 해서 설치비를 받는 경우가 있습니다.

증인 노드를 집에 설치하는 방법도 있습니다. 컴퓨터 설치에 능숙하신 분은 부품을 사서 집에서 돌려볼 수도 있겠습니다. 이것은 권장하지 않는데 주로 네트워크 상태가 불안정하기 때문이라고 하는데, 요즘 한국 가정은 꼭 그렇지는 않은 거 같습니다. 해볼 만 하겠죠.

대신 서버를 24/7 (24시간 7일, 즉 매일) 계속 켜 둬야 해서 전기세 부담이 있을 수 있습니다. 이 문제 때문에 제가 라즈베리로 증인 노드를 돌려보려 했던 것입니다. 그렇다면 누구나 집에서 증인 노드, 시드 노드를 돌릴 수 있을텐데 말이죠.

Updates

OS 선택

한가지 빼 놓은게 있는게 OS를 뭘로 할지 결정해야 합니다. 보통 우분투 계열이 많습니다. 그러나 버전이 중요합니다. 어떤 분의 경우 우분투 16.04를 설치했더니 remote wallet 접속 시 curl 명령에서 보안 이슈로 에러가 발생했었습니다.

# ./run.sh remote_wallet
curl: (60) server certificate verification failed. ...

우분투 16.04는 더이상 보안 업데이트가 지원되지 않는 버전입니다. 최소 18.04 LTS를 사용하시고, 가능하면 20.04 LTS를 사용하는 것이 좋습니다. 20.04 LTS의 의미는 2020년 4월에 배포된 버전을 의미하고, Long Term Support (LTS) 버전이라 오랫동안 보안 업데이트를 지원합니다.

다음 편에서 증인 노드 설정에 대해서 알아보겠습니다.

cc.
@steem-agora
@steemcurator01

증인 보팅은 아래에서 가능합니다. 부탁드립니다.
https://steemitwallet.com/~witnesses
@etainclub

Sort:  

Upvoted! Thank you for supporting witness @jswit.
default.jpg

안녕하세요 진작에 축하드렸어야 했는데... 너무 늦게 왔습니다.
너무 좋은 내용이네요 ㅎ

1T SSD를 사용하지 않고 (물론 말씀하신대로 이 방법이 가장 편합니다) 압축을 풀면서 데이터를 받아오면 가능하신 합니다. 아니면 폴더 자체로 가져와도 되고요 ㅎ
그럼 사양을 조금 더 낮은 ssd를 사용해도 문제 없습니다.
그래도 단위가 있기 때문에... 800은 써줘야... ㅎ

네 다운로드하면서 압축 푸는 방법도 적어 놨습니다. 저는 여러번 해봤는데 중간에 다운로드가 자주 끊기더라구요.
아요곰님 글이 많은 도움이 됐습니다. 고맙습니다.

증인까지 도전하시는 군요!!
늘 응원합니다! 파이팅~^^

여기까지 오게 됐습니다!
고맙습니다!

Coin Marketplace

STEEM 0.33
TRX 0.11
JST 0.034
BTC 66579.21
ETH 3282.19
USDT 1.00
SBD 4.30