Hyperledger Fabric on Multiple Hosts using Docker Swarm and Compose
Introduction
[**update] To deploy Hyperledger Fabric on Kubernetes, refer to my article “ Deploying Hyperledger Fabric on Kubernetes using Helm & Argo (with Fabric-CA instead of cryptogen)”
To deploy Hyperledger Fabric v 1.2 on multiple hosts using Docker swarm click here .
Deploying Hyperledger Fabric on multiple hosts involves multiple steps. Using docker Swarm/Kubernetes to connect multiple containers on different hosts is one of the possible options. I followed this post Hyperledger fabric on multiple hosts which uses docker swarm, creates an overlay network to connect docker containers on multiple hosts. This is an excellent post which explains the concepts and sets the base (credits to Abdul Wahab). However, lack of docker compose support made me to manually execute lot of commands. So I tried to use Docker swarm with compose, customized byfn (Hyperledger - Build Your First network – from Hyperledger tutorials ) to run on multiple hosts.
Topology
Deploying Hyperledger Fabric on multiple hosts involves multiple steps. Using docker
1. PC-1
- Orderer (orderer.example.com) -port 7050
2. PC-2
- CA1 (ca.org1.example.com) -port 7054
- Org1 Peer0 (peer0.org1.example.com) -port 7051,8051
- Org1 Peer1 (peer1.org1.example.com) -port 7053,8053
3. PC-3
- CA2 (ca.org2.example.com) -port 7054
- Org2 Peer0 (peer0.org2.example.com) -port 7051,8051
- Org2 Peer1(peer1.org2.example.com) -port 7053,8053
Make sure above specified ports are not blocked with firewall. Open 2377,7946,4789 ports for docker swarm.
Prerequisites
Follow this link to install all the dependencies on each host.
List of components that I used
- Ubuntu-16.04
- Fabric - 1.1.0 (This version is not tested with 1.2.0)
- Go - 1.9.3
- Docker -18.03.1-ce
- Docker-Compose - 1.18.0
- Node - v8.11.3
Setup
Execute below steps 1-3 on all hosts (PC-1, PC-2 & PC-3)
1) Clone Hyperledger fabric-samples
2) go to fabric-samples directory
3) clone Fabric Multi Network source code from https://github.com/mallikprojects/fabric-multi-network
- git clone https://github.com/hyperledger/fabric-samples
- cd fabric-samples
- git checkout v1.1.0
- curl -sSL https://goo.gl/6wtTN5 | bash -s 1.1.0
- git clone https://github.com/mallikprojects/fabric-multi-network
- cd fabric-multi-network
4) Generate crypo data, docker compose templates and copy to all the hosts
- ./bymn.sh generate crypto-config.yaml
- crypto-config — copy to all three hosts
- channel-artifacts — copy to all three hosts
- docker-compose-orderer.yaml — copy to PC-1
- docker-compose-org1.yaml — copy to PC-2
- docker-compose-org2.yaml — copy to PC-3
5) configure environmental variables in bymn.sh and ensure bymn.sh is same across all hosts
- export ORDERER_HOSTNAME=<host name of PC-1>
- export ORG1_HOSTNAME= <host name of PC-2>
- export ORG2_HOSTNAME=<host name of PC-3>
- export SWARM_NETWORK=”fabric” — Change it only if you want to create swarm network with different swarm network name
- export DOCKER_STACK=”fabric” — Change it only if you want to create swarm network with different stack name
To get hostname run the following command
- hostname
6) Create & setup Swarm
On PC-1
- docker swarm init — advertise-addr <PC-1 IP address>
- docker swarm join-token manager
Output of this command should be executed on PC-2 & PC-3 as follows
- docker swarm join — token SWMTKN-1–3anjn4oxwcn278hie3413zaakr4higjdqr2x89r5605p1dosui-a4u407pt6c5ta2ont7pqdnm 137.116.147.36:2377 –advertise-addr <PC-2 Ip Address>
- docker swarm join — token SWMTKN-1–3anjn4oxwcn278hie3413zaakr4higjdqr2x89r5605p1dosui-a4u407pt6c5ta2ont7pqdnm 137.116.147.36:2377 –advertise-addr <PC-3 Ip Address>
Replace token with the token you got in the previous command response
7) Create overlay network
on PC-1
- docker network create — attachable — driver overlay fabric
8) Start Orderer
on PC-1
- ./bymn.sh up -f docker-compose-orderer.yaml
Check the logs and make sure service is up.
9) Start CA1, Org 1 (Peer 0 & Peer 1) on PC-2
- ./bymn.sh up -f docker-compose-org1.yaml
10) Start CA2, Org 2 (Peer 0 & Peer 1) on PC-3
- ./bymn.sh up -f docker-compose-org2.yaml
Run docker service ls and make sure all services are running
This completes setup of Hyperledger fabric on multiple hosts
Test
To test network on PC-2 open cli
- docker exec -it <docker cli name> bash
and run scripts/script.sh
If you see above success message in your console, then network setup is proper and is running correctly
Conclusion
This post gives an overview on setting up Hyperledger fabric on multiple hosts. One of the interesting project around this space is cello. project cello aims to bring the on-demand “as-a-service” deployment model to the blockchain ecosystem to reduce the effort required for creating, managing and terminating blockchains.