Installation

This page explains how to install Hub Enterprise.

Hub Enterprise designed as orchestrate many number of machines, which blockchain nodes are run.

There are two kind of machines in Hub Eneterprise :

  • Horde Master : Hub Enterprise’s modules are installed. Manage and control Horde as kubernetes master.
  • Horde : Kubernetes worker cluster that Aergo nodes you made are actually running.

The Horde Master consists of several modules :

  • Hub : Front end of user interface to manage and monitoring Aergo node cluster.
  • Hub-abc : Back end of Hub.
  • Configure chain : Cross-communication window between Hub Enterprise modules and store data securely through blockchain. Hub Enterprise use Aergo node.
  • Horde master control : Control module of blockchain managing.
  • Aergo grafana : User interface for monitoring module.
  • Elastic search server : Store and process statistic datas.
  • Fluentd : Get agent’s data and send to elastic search server.
  • Metricbeat : Collects machine’s status data.
  • HordeStat : Collects blockchain network’s status data
  • Fluent-bit : Collects and parse blockchain logs data, then send to Fluentd.

Install dependencies

1. Kubernetes Hub Enterprise use kubernetes for create Horde cluster. Follow kubernetes official guide to install kubernetes.

  • Kubernetes use specific version of docker. If you already installed docker, please check your docker supports kubernetes in here. If not, reinstall docker.

Essential kubernetes modules to run Hub enterprise :

  • kubeadm
  • kubelet
  • kubectl

2. Kubernetes network plugin To run multi-cluster Hub enterprise, you need to install kubernetes network plugin for pod network. We suggest to install flannel.

Install managing modules

All modules are installed and run as kubernetes container.

kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/aergo-hub-service.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/aergo-node-service.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/hub-abc-service.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/hmc.yaml

Install monitoring modules

Install from packages To run monitoring module, you need to install docker first.

1. Elastic search server and aergo grafana Install at Horde Master machine.

docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --name=aergo-es docker.elastic.co/elasticsearch/elasticsearch:6.5.4
docker run -p 3000:3000 --name=aergo-grafana aergo/grafana:0.1.0

2. Fluentd Install at Horde Master machine. To install FluentD, follow this article.

Before run fluentd, edit td-agent configuration file in /etc/td-agent/td-agent.conf
<system>
  log_level debug
</system>
<source>
  @type forward
  @log_level debug
  port 24224
  bind 0.0.0.0
</source>
<source>
  @type tail
  path /dir/to/aergo_chaininfo.log
  tag aergo.chaininfo
  format json
</source>
<match **>
  @type elasticsearch
  index_name fluentd
  host localhost
  port 9200
  logstash_format true
</match>

Run fluend as service

sudo /etc/init.d/td-agent start

3. Metricbeat Install at every Horde machine.

sudo curl -L -O https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-6.4.2-amd64.deb
sudo dpkg -i metricbeat-6.4.2-amd64.deb

Edit metricbeat configuration file in /etc/metricbeat/metricbeat.yml before run metricbeat

########################## Metricbeat Configuration ###########################
# https://www.elastic.co/guide/en/beats/metricbeat/index.html
#============================  Config Reloading ===============================
metricbeat.config.modules:
  path: /etc/metricbeat/metricbeat.yml
  reload.period: 10s
  reload.enabled: false
metricbeat.max_start_delay: 10s
#==========================  Modules configuration ============================
metricbeat.modules:
#------------------------------- System Module -------------------------------
- module: system
  metricsets:
    - cpu             # CPU usage
    - load            # CPU load averages
    - memory          # Memory usage
    - network         # Network IO
    - process         # Per process metrics
    - diskio
    - filesystem
    - fsstat
  enabled: true
  period: 15s

  # Configure the metric types that are included by these metricsets.
  core.metrics: ["percentages", "ticks"]  # The other available option is ticks.
  cpu.metrics:  ["percentages", "normalized_percentages", "ticks"]  # The other available options are normalized_percentages and ticks.
  processes: [".*"]
#------------------------------- File output -----------------------------------
output.file:
  enabled: true
  codec.json:
    escape_html: false
    pretty: false
  path: "/var/log"
  filename: metricbeat
  rotate_every_kb: 10000
  number_of_files: 3
  permissions: 0600
#================================ Logging ======================================
logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/metricbeat-logs
  name: metricbeat

4. HordeStat Install at Horde Master machine.

docker run --name=hordestat -v /dir/to/aergo_chaininfo.log:/var/log/aergo_chaininfo.log --net=host aergo/hordestat:0.1.0 --fullnode={fullnode ip}:{fullnode rpc port} --debug --wait_time=2 --daemon

5. Fluent-bit Install at Horde Machine. To install fluent-bit, follow fluent-bit official install document Edit fluent-bit configuration file in /etc/td-agent-bit/td-agent-bit.conf

[SERVICE]
    Flush      5
    Daemon     off
    Parsers_File   /etc/td-agent-bit/parsers.conf
    Log_File   /var/log/td-agent-bit.log
    Log_Level  info

[INPUT]
    Tag         log
    Buffer_Chunk_Size    512k
    Buffer_Max_Size    512k
    Name        tail
    Path        /var/lib/docker/containers/\*.log
    DB          /var/log/td-agent-bit-db
    DB.Sync     Off
    Parser      aergolog

[INPUT]
    Parser      json
    Tag         metricbeat
    Buffer_Chunk_Size    128k
    Buffer_Max_Size    128k
    Name        tail
    Path        /var/log/metricbeat
    DB          /var/log/td-agent-bit-db
    DB.Sync     Full

[FILTER]
    Name        record_modifier
    Match       log
    Record hostname ubuntu-xenial


[OUTPUT]
    Name              forward
    Match             *
    Host              IP_OF_ELASTIC_SEARCH_SERVER
    Port              24224
    Retry_Limit       False

Insert follow fluent-bit parser in /etc/td-agent-bit/parsers.conf

Install as kubernetes container

kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/es-statefulset.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/es-service.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/aergo-grafana-service.yaml
#kubectl create -f fluentd
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/metricbeat.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/fluent-bit-configmap.yaml
kubectl create -f https://raw.githubusercontent.com/aergoio/horde/master/yaml/kube/fluentbit.yaml