使用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/

在我们开始之前……必须做

  • 你应该知道区块链是什么,对吧? ?
  • 准备安装了Linux Ubuntu的三个云实例或计算机
  • 安装Docker Engine Community Edition最新版本
  • 安装Docker撰写最新版本
  • 安装Node v8.4.0(最好使用nvm)
  • 将此github存储库克隆到三台计算机并切换到分支跨机器群
  • 最好

  • 了解Hyperledger Fabric背后的关键概念
  • 完成官方文档中的“构建您的第一个网络”教程
  • 备注

    它基于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组件和两个ord​​erers的网络信息,供节点应用程序发送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上,人们通过突出显示和回应这个故事来继续对话。

    你可能还喜欢