EdgeLake is a decentralized network to manage IoT/Edges data. Nodes are compute instances that execute the EdgeLake Software and that are part of a nodes network.
The EdgeLake network is using one MASTER Node (is has all the network meta data), as many OPERATOR nodes as required (this is where the data is) and at least one QUERY node (this is where a query for the data is made, nodes can be dual role Query+Operator). The Query node is where the end-user (human or application, Grafana to build a dashboard for example) queries data, it knows from the meta data which Operators to goto and does it peer to peer.
note: the Master node can also be replaced by a Blockchain service & contract : we will not cover this below for the time being
Adding EdgeLake to Open Horizon implementations extends OH value it allows :
In a typical Open Horizon deployment here are the main elements:
Adding EdgeLake to an existing Open Horizon deployment, the simplest pattern is to locate the Master and Query nodes together 'centrally' with the OH Managenent Hub as below:
A more practical approach is to have the Query node (at least one) elsewhere as below (avoiding to move data to the Management Hub : Peer to Peer collection), and one can have as many Query nodes as needed:
For demonstrating and testing on a single system we created deployment tools:
Here is the simplified diagram when deploying on a single physical system:
Back to deployment, with the instructions below you will be able to deploy an integrated OH+EL setup to run a simple dashboard. Creating a nodes network requires the following steps:
Table of Content:
A basic network setup consists of a master node, 1 or more operator nodes and a query node - as shown in the image below. These nodes can be deployed either on the same physical machine (for testing), or unique machines (real deployments across sites).
In the following directions, the Master and Query nodes will be deployed directly via Docker, while the Operator node will be deployed via OpenHorizon.
Prior to deployment, docker should be installed via OpenHorizon, but may require
sudo
permissions to execute docker commands. In addition, make
command is not installed by default.
USER=`whoami`
sudo groupadd docker
sudo usermod -aG docker ${USER}
newgrp docker
sudo apt-get -y install make
Update the dotenv configuration file for the desired node - Master | Query Make sure the following params get update accordingly:
Deploy Node
make up EDGELAKE_TYPE=master
make up EDGELAKE_TYPE=query
**Note**: EdgeLake version can be updated via DOCKER_IMAGE_VERSION in [Makefile](Makefile)
### Operator
1. Update the dotenv configuration file for the [Operator](docker-makefiles/edgelake_operator.env) node
Make sure the following params get update accordingly:
* Node Name
* Company Name
* LEDGER_CONN - when TCP binding is set to _true_, then 127.0.0.1 as the IP value for LEDGER will not work.
* Cluster Name
* Database name
2. Make sure there aren't any services running - note existing services will redeploy as part of `agent-run` in step
```shell
hzn unregister -f
publish
command deploy EdgeLake
make publish EDGELAKE_TYPE=operator
When deploying a node via OpenHorizon, the following files are used:
make test-node
<<COMMENT REST Connection Info for testing (Example: 127.0.0.1:32149): 172.232.157.208:32149 Node State against 172.232.157.208:32149 edgelake-operator@172.232.157.208:32148 running
Test Status
---------------------------------------------|---------------------------------------------------------------------------------|
Metadata Version |bc5b778a91949a980f4013e8fd2da3dd |
Metadata Test |Pass |
TCP test using 172.232.157.208:32148 |[From Node 172.232.157.208:32148] edgelake-operator@172.232.157.208:32148 running|
REST test using http://172.232.157.208:32149 |edgelake-operator@172.232.157.208:32148 running |
Process Status Details
---------------|------------|-----------------------------------------------------------------------------|
TCP |Running |Listening on: 172.232.157.208:32148, Threads Pool: 6 |
REST |Running |Listening on: 172.232.157.208:32149, Threads Pool: 6, Timeout: 30, SSL: False|
Operator |Running |Cluster Member: True, Using Master: 127.0.0.1:32048, Threads Pool: 3 |
Blockchain Sync|Running |Sync every 30 seconds with master using: 127.0.0.1:32048 |
Scheduler |Running |Schedulers IDs in use: [0 (system)] [1 (user)] |
Blobs Archiver |Not declared| |
MQTT |Not declared| |
Message Broker |Not declared|No active connection |
SMTP |Not declared| |
Streamer |Running |Default streaming thresholds are 60 seconds and 10,240 bytes |
Query Pool |Running |Threads Pool: 3 |
Kafka Consumer |Not declared| |
gRPC |Not declared| |
<<COMMENT
* Test Network -- Node is able to communicate with (all) other nodes inn the network
```shell
make test-network
<<COMMENT
REST Connection Info for testing (Example: 127.0.0.1:32149):
172.232.157.208:32149
Test Network Against: 172.232.157.208:32149
Address Node Type Node Name Status
---------------------|---------|-----------------|------|
172.232.157.208:32048|master |edgelake-master | + |
172.232.157.208:32348|query |edgelake-query | + |
172.232.157.208:32148|operator |edgelake-operator| + |
<<COMMENT
make help EDGELAKE_TYPE=operator
publish-service publish service to OpenHorizon remove-service remove service from OpenHorizon publish-service-policy publish service policy to OpenHorizon remove-service-policy remove service policy from OpenHorizon publish-deployment-policy publish deployment policy to OpenHorizon remove-deployment-policy remove deployment policy from OpenHorizon agent-run start OpenHorizon service hzn-clean stop OpenHorizon service <<COMMENT
* Check
```shell
make check EDGELAKE_TYPE=operator
<<COMMENT
=====================
ENVIRONMENT VARIABLES
=====================
EDGELAKE_TYPE default: generic actual: operator
DOCKER_IMAGE_BASE default: anylogco/edgelake actual: anylogco/edgelake
DOCKER_IMAGE_NAME default: edgelake actual: edgelake
DOCKER_IMAGE_VERSION default: latest actual: 1.3.2408
DOCKER_HUB_ID default: anylogco actual: anylogco
HZN_ORG_ID default: myorg actual: myorg
HZN_LISTEN_IP default: 127.0.0.1 actual: 127.0.0.1
SERVICE_NAME actual: service-edgelake-operator
SERVICE_VERSION actual: 1.3.2408
===================
EDGELAKE DEFINITION
===================
NODE_TYPE default: generic actual: operator
NODE_NAME default: edgelake-node actual: edgelake-operator
COMPANY_NAME default: New Company actual: New Company
ANYLOG_SERVER_PORT default: 32548 actual: 32148
ANYLOG_REST_PORT default: 32549 actual: 32149
LEDGER_CONN default: 127.0.0.1:32049 actual: 66.228.62.212:32048
<<COMMENT
Review Deploy EdgeLake for farther details and specific examples