基于Docker Swarm Mode搭建Hyperledger Fabric V1.0多主机区块链平台

这是一篇简要翻译的文章,亲测有效,因为目前关于搭建多主机hyperledger fabric的文章除了像 (http://www.cnblogs.com/studyzy/tag/Fabric/) 使用官方的 e2e_cli 代码进行部署外,其他并没有见到别的什么方式。这篇博客获得了不少的✨,所以自己搭了一遍,当然做这个的直接看原链接就可以,就当留个笔记。原文地址链接: https://medium.com/@wahabjawed/hyperledger-fabric-on-multiple-hosts-a33b08ef24f

Hyperledger Fabric 1.0及到目前最新的1.2的版本与之前的0.6版本在架构上又很大的不同,进行了模块化的解耦及对节点角色的重新定义。0.6的使用过程相对简单,简要记录一下:

  1. 启动网络:包括启动根节点,然后其他peer节点加入
  2. 部署(deploy) chaincode:可以使用SDK,也可以直接使用postman之类的可以操作restful API的工具发送POST请求,deploy结束会返回一个ChainID的字符串。
  3. 利用上一步返回的chainID,调用SDK或者使用postman实现Invoke,query,get_chainlist等操作。

1.0以后的版本中取消了restful的方式,只能使用SDK了!

如何在单机上运行

Hyperledger Fabric的运行是依赖于Docker的,各组件运行在不同的容器中,为了使这些容器彼此通信,可以通过创建一个网络然后将容器加入进去,当运行官方示例fabric-samplesFirst Network时,主要是运行 docker-compose-cli.yaml文件,从中可以看出,创建了一个byfn网络,然后所有容器attach到这个网络中。

Hyperledger Fabric给出了很好的关于单机运行的示例,即在同一主机上运行多个不同的docker容器,通过不同端口来模拟多主机之间的通信,但在实际环境中,我们需要将服务运行在多主机的分布式系统中。

如何在多主机上运行

当需要在多主机上运行hyperledger fabric时,容器之间不能直接进行互相通信(因为docker会自动分配不同的子网地址给每个容器)。因此,需要有一种方式使得这多个主机上的容器能相互进行通信(其实跨主机容器通信可以通过一些方法来实现,比如使用OVS+GREFlannel或者直接路由等方式)。现在,我们直接可以使用docker swarm来实现(具体可查看docker swarm的官方文档)。

网络拓扑结构

将要构建的网络架构如下图所示,该架构中包含了最基本的Hyperledger Fabric 1.0的组件,我们只需要两台主机,组件分布为包括:

  • 1个CA服务(在节点 1 上)
  • 1个Orderer排序服务(在节点 1 上)
  • 1个普通节点Peer0 (组织 1 的节点 0, 在节点 1 上)
  • 一个CouchDB0 (连接到Peer0来存储状态,在节点 1上)
  • 一个CouchDB1 (连接到Peer1来存储状态,在节点 2上)
  • 1个普通节点Peer1 (组织 1 的节点 1, 在节点 2 上)
  • 1个客户端Cli(在节点 2 上)

对于这两台主机:
节点1: 192.168.245.235 (Ubuntu 16.04)
节点2:192.168.245.236 (Ubuntu 16.04)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pN48v2f8-1596319710406)(https://cdn-images-1.medium.com/max/1600/1*3-DR8ffADZyN3k_hyv_1fQ.png)]

现在开始整个搭建过程。

创建 Docker Swarm Mode 网络

  • 初始化 swarm (更多详情参见docker swarm官方文档),在节点1上执行
$ docker swarm init

后续过程概述为:节点1创建swarm,然后节点2manager身份加入创建的swarm中。

  • 节点1上执行:
$ docker swarm join-token manager

输出就会像是:

docker swarm join — token SWMTKN-1–3as8cvf3yxk8e7zj98954jhjza3w75mngmxh543llgpo0c8k7z-61zyibtaqjjimkqj8p6t9lwgu 192.168.245.235:2377

复制这段命令,然后在节点2中执行,成功输出结果会是一个字符串,这个不再理会。

  • 节点1上执行如下命令创建网络:
$ docker network create --attachable --driver overlay mynet
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值