使用Docker Swarm部署跨机器的基于Kafka的多服务器Hyperledger Fabric网络
使用Docker Swarm(多个主机)部署跨机器的基于Kafka的多订购者Hyperledger Fabric网络
关于在多个主机或服务器上创建Hyperledger Fabric网络的结构化教程非常少。您只能在官方的Hyperledger Fabric文档中找到构建单机网络的指南,该文档根本不是分布式和去中心化的。今天,让我们一起做吧
什么是Docker Swarm?
Docker Swarm是一种集群管理工具,可以在不同的计算机上实现不同容器的通信。我们还将使用覆盖网络,它是Docker Swarm顶部的连接层。有关详细信息,请访问https://docs.docker.com/engine/swarm/和https://docs.docker.com/network/overlay/
在我们开始之前……必须做
最好
备注
它基于Hyperledger Fabric版本1.1,尽管最新版本也可以使用
网络架构网络架构
上图显示了整个网络架构。组织1和组织2组件分别位于机器1和机器2中。基于Kafka的订购服务包括部署在三台机器中的组件。除节点应用程序之外的所有组件都使用Docker进行容器化。除MongoDB之外的所有容器都通过Docker Swarm覆盖网络相互通信。
每个组件的功能:
- 同行:区块链分类帐和链代码引擎(智能合约)
- CouchDB:具有丰富查询功能的状态数据库
- CA:注册并注册新用户
- MongoDB:存储用户凭据
- Orderer:订购交易并将它们打包成一个块
- 卡夫卡:共识协议
- Zookeeper:Kafka的注册和配置服务
- 节点应用程序:用于与区块链交互的API服务器
防火墙设置
需要公开上面列出的端口以促进跨机器网络。
警告:MongoDB和Mongo Express应该暴露在生产环境中的所有外部IP中。
编辑网络配置文件
在hyperledger-fabric-technical-tutorial / balance-transfer / artifacts / network-config.yaml中,将orderer1和所有Org 2组件的默认IP地址更改为Machine 2的实际IP地址。
此文件提供Org 1,Org 2组件和两个orderers的网络信息,供节点应用程序发送API请求。由于节点应用程序未部署在Docker Swarm网络中,因此必须通过指定IP地址来完成外部通信。
由于节点应用程序不直接与Kafka和Zookeeper群集通信,因此不包括其IP地址。
MongoDB连接配置文件在org1.yaml和org2.yaml中编码。由于MongoDB和节点应用程序位于同一台计算机上,因此使用localhost足以进行通信。
设置Docker Swarm和覆盖网络
在机器1中,运行docker swarm init以将Swarm网络初始化为管理器。它返回类似于以下结果的内容。
docker swarm join –token SWMTKN-1-4bg8u1sjnk6sjegcdba5f03ij5yespoqn1g3qhji7hn213qyw0-ee8h9oinejen29d1t9r6pw4pf 172.0.0.71:2377
在机器1终端中复制命令并在机器2和机器3中运行以加入Swarm网络。以下是成功回应。
该节点作为工作者加入了一个群。
在机器1中运行docker node ls以列出Swarm网络节点。你应该看到三个节点。
在机器1中,运行docker network create –attachable –driver overlay fabric_net以创建名为fabric_net的覆盖网络。
在所有三台机器上运行docker network ls。只有机器1显示fabric_net,因为覆盖网络只能通过启动加入该覆盖网络的docker容器扩展到其他节点。
在机器2和机器3中,运行docker run -itd –name mybusybox –network fabric_net busybox以创建一个加入fabric_net的busybox docker容器。事实上,无论是busybox都没关系,提出任何容器加入fabric_net都可以产生同样的效果。
在机器2和机器3中再次运行docker network ls以查看fabric_net是否存在。
如果有任何错误,sudo systemctl重新启动所有三台机器中的docker以重启Docker引擎或运行docker swarm在所有三台机器中离开–force离开Swarm网络并再次重复上述过程。
网络组件部署
在hyperledger-fabric-technical-tutorial / balance-transfer /目录中运行以下所有命令。
对于所有机器,
删除所有现有容器以避免RAM过载。 (确保没有其他重要的容器在运行)
docker rm -f`docker ps -aq`
清除未使用的Docker成交量
码头工人修剪-f
删除缓存的Docker链代码图像
docker rmi -f $(docker images | grep“dev | none | test-vp | peer(0-9) – ”| awk'{print $3}')
对于机器3,
docker-compose -f artifacts / docker-compose-kafka.yaml up -d zookeeper0 zookeeper1docker-compose -f artifacts / docker-compose-kafka.yaml up -d kafka0 kafka1docker-compose -f artifacts / docker-compose.yaml up – d orderer1.example.com
对于机器2,
docker-compose -f artifacts / docker-compose-kafka.yaml up -d zookeeper2docker-compose -f artifacts / docker-compose-kafka.yaml up -d kafka2 kafka3docker-compose -f artifacts / docker-compose.yaml up -d peer0.org2.example.com peer1.org2.example.com ca.org2.example.com couchdb0.org2 couchdb1.org2
对于机器1,
docker-compose -f artifacts / docker-compose.yaml up -d orderer0.example.comdocker-compose -f artifacts / docker-compose.yaml up -d peer0.org1.example.com peer1.org1.example.com ca. org1.example.com couchdb0.org1 couchdb1.org1docker-compose -f artifacts / docker-compose-mongo.yaml up -dnpm installnode app
如果您的机器中没有泊坞窗图像,泊坞引擎将从互联网上提取所有图像。
对于执行顺序,应首先部署zookeeper,然后是kafka,其余部分。
测试
在Machine 1中打开一个新终端并运行./testAPIs.sh -l节点。
如果没有错误,恭喜
您成功部署了跨机器Hyperledger Fabric网络
如果您想了解有关源代码的更多信息,可以从分支发行版1.1下的github存储库下载“Hyperledger Fabric技术指南for Intermediate 开发工程师s.docx”。如果您遇到任何问题,请随时与我联系
最后但并非最不重要的,如果你喜欢,请拍这篇文章吧 🙂
使用Docker Swarm部署跨机器的基于Kafka的多订购者Hyperledger Fabric网络最初发布在Coinmonks on Medium上,人们通过突出显示和回应这个故事来继续对话。