AntelopeIO (former EOSIO) hyperion 구축하기

title

About

Github

EOSIO가 AntelopeIO로 리브랜딩 되면서 여러 프로젝트가 아카이빙 되었습니다. 이전에 소개해 드렸던 history-tools도 그 중 하나입니다. 사실 history-tools를 사용하면서 DB에 데이터가 많아지게 되면 조회 성능이 크게 떨어져 불편한 경우가 많았습니다.

본 글에서는 hyperion을 docker를 사용해서 구축하는 방법을 알아보겠습니다.

Prerequisite

본 문서에서는 아래의 툴을 사용하여 구축합니다.

  • Redis
  • RabbitMQ
  • Elasticsearch
  • kibana
  • Hyperion (3.3.5)

또한 모든 솔루션은 Docker를 이용하여 구축 할 예정입니다.

Setup

Node Setup

state_history_plugin

EOSIO를 구축할 때 반드시 State History Plugin을 활성화 하여 구축을 해 주어야 합니다.

본 문서에서는 EOSIO 구축에 대해서는 자세하게 설명하지 않겠습니다.

Hyperion Config Setup

Github 내에 존재하는 connections.json 파일을 수정해 주어야 합니다. 본 문서에서는 docker 기반으로 기타 필요한 서비스를 셋업하기 때문에 chain endpoint만 수정해 주면 됩니다.

http에는 node http endpoint를, ship에는 node state_history_plugin endpoint를 입력해 주면 됩니다.

ss

Other Infrastructure Setup

# docker-compose.yaml
version: '3.3'

services:
  redis:
    container_name: redis
    image: redis:alpine
    restart: on-failure
    networks:
      - hyperion

  rabbitmq:
    container_name: rabbitmq
    image: rabbitmq:alpine
    restart: on-failure
    environment:
      - RABBITMQ_DEFAULT_USER=username
      - RABBITMQ_DEFAULT_PASS=password
      - RABBITMQ_DEFAULT_VHOST=/hyperion
    ports:
      - 15672:15672
    networks:
      - hyperion

  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:7.17.6
    restart: on-failure
    environment:
      - discovery.type=single-node
      - cluster.name=es-cluster
      - node.name=es01
      - bootstrap.memory_lock=true
      - xpack.security.enabled=true
      - "ES_JAVA_OPTS=-Xms2g -Xmx2g"
      - ELASTIC_USERNAME=elastic
      - ELASTIC_PASSWORD=password
    ports:
      - 9200:9200
    networks:
      - hyperion

  kibana:
    container_name: kibana
    image: docker.elastic.co/kibana/kibana:7.17.6
    restart: on-failure
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
      - ELASTICSEARCH_USERNAME=elastic
      - ELASTICSEARCH_PASSWORD=password
    ports:
      - 5601:5601
    networks:
      - hyperion
    depends_on:
      - elasticsearch

  hyperion-indexer:
    container_name: hyperion-indexer
    image: sweatpotato/hyperion-history-api:3.3.5
    restart: on-failure
    depends_on:
      - elasticsearch
      - redis
      - rabbitmq
    volumes:
      - ./config/connections.json:/hyperion-history-api/connections.json
      - ./config/ecosystem.config.js:/hyperion-history-api/ecosystem.config.js
      - ./config/chains/:/hyperion-history-api/chains/
      - ./scripts/:/home/hyperion/scripts/
    networks:
      - hyperion
    command: bash -c "/home/hyperion/scripts/run-hyperion.sh ${SCRIPT:-false} eos-indexer"

  hyperion-api:
    container_name: hyperion-api
    image: sweatpotato/hyperion-history-api:3.3.5
    restart: on-failure
    ports:
      - 7000:7000
    depends_on:
      - hyperion-indexer
    volumes:
      - ./config/connections.json:/hyperion-history-api/connections.json
      - ./config/ecosystem.config.js:/hyperion-history-api/ecosystem.config.js
      - ./config/chains/:/hyperion-history-api/chains/
      - ./scripts/:/home/hyperion/scripts/
    networks:
      - hyperion
    command: bash -c "/home/hyperion/scripts/run-hyperion.sh ${SCRIPT:-false} eos-api"

networks:
  hyperion:
    driver: bridge

위 yaml 파일은 Github 에 있는 docker-compose yaml 파일 입니다.

위 텍스트를 docker-compose.yaml로 저장하고 아래 명령어를 실행하여 줍니다.

docker-compose up -d

ss

결과

indexer

api

위와 같이 hyperion-indexer와 hyperion-api 로그를 확인하였을 때 log가 정상적으로 출력된 것을 확인할 수 있습니다.

마무리

이 글에서 Hyperion을 구축하여 보았습니다. 확실히 history-tools를 사용했을 때 보다 조회에서 성능이 더 잘 나온다는것을 직접 체감할 수 있을 정도의 차이가 있었습니다. 또한 AntelopeIO로 리브랜딩 된 이후 버전에서의 node에서는 history-tools를 지원하지 않는 문제도 있기때문에 이제는 history-tools를 사용하기는 어려운 것 같습니다. hyperion은 아직 활발하게 개발되는 프로젝트이기 때문에 앞으로 더 기대 되는 프로젝트 입니다.