mt logoMyToken
总市值:
0%
恐慌指数:
0%
币种:--
平台 --
ETH Gas:--
EN
USD
APP
Ap Store QR Code

Scan Download

超级账本Fabric 1.0 多节点集群的部署(1)

收藏
分享
超级账本 Fabric 1.0即将揭开面纱,社区用户对此充满期待。为迎接 Fabric 1.0 的发布,本文分3期连载,介绍如何搭建多节点的分布式 Fabric 集群,文后可下载PDF版本。

一、概述

在千呼万唤之后,犹抱琵琶的超级账本 Fabric 1.0 GA版即将揭开面纱,翘首以待的社区用户将广泛使用这个版本。本文将介绍如何使用 Docker 容器技术来建立起一个多节点 Fabric 集群,并且描述在集群上如何进行基本的操作,如 chaincode 的生命周期维护等。文中采用 Fabric 1.0 beta 的端到端(e2e_cli)示例作为基础来说明原理。本文提供是手动配置的方法,后续将介绍利用容器平台(如 K8s 等)自动部署超级账本的方式。

需要了解 Fabric 基本架构的读者可参考文后相关文章。

图1.1 单节点下的Fabric网络结构图

Fabric 源码中包含一个简单的e2e单机部署示例,方便用户理解、研究和开发应用。如图1.1所示,在单个机器节点上通过 docker-compose 建立了5个节点的Fabric网络,每个节点都是由单独的 Docker 容器来模拟。其中 peer0 和 peer1 是同属于 org1 的节点,peer2 和 peer3 是同属于 org2 的节点,它们都加入了相同的 channel 中,并在该 channel 中进行交易,而 orderer 则为该 channel 中的交易提供排序服务。

图1.2 多节点下的Fabric网络结构图

虽然e2e_cli的示例比较简单,但它把多个节点混合部署在一起,无法区分哪些配置对应哪个节点。另外,在实际场景中,Fabric 节点可能会由不同的组织分别拥有和维护,peers 和 orderer 必然会分布在不同的物理节点上,因此多节点的Fabric 部署成为需要解决的问题,图1.2是多节点 Fabric 集群拓扑图。

【注:下载本文PDF版本,可关注本公众号:亨利笔记,后台发送消息“多节点” 或 “DJD”即可。】

下面是把单节点e2e_cli范例改为多节点的大致步骤:

1.    准备环境

运行Fabric节点需要依赖以下工具:

a. Docker:用于管理Fabric镜像以及运行 peer 和 orderer 等组件

b. Docker-compose:  用于配置 Fabric 容器

c. Fabric源码:源码提供了用于生成证书和配置 channel 的工具和测试代码

d. Go语言开发环境:源码的工具编译依赖于 Go 语言

2.    配置多节点Fabric集群

在单节点e2e_cli示例中,所有节点部署在同一个 docker-compose 的内部网络中,通过容器的7051端口进行通信。但是在多节点的情况下,容器之间不能进行直接通讯,因此需要把容器的7051端口映射到宿主机上,通过各个宿主机的7051端口来实现节点间通信。我们在每个节点中修改 docker-compose.yaml 中的 service 定义,在不同节点只启动需要的 service。例如,在节点1中只启动peer0 的 service,在节点5中仅启动 orderer 等。

3.    启动多节点Fabric集群

在各个节点上配置好 Fabric 的启动环境后,需要依次登录到节点上通过docker-compose up的方式启动 Fabric 节点。由于启动环境有依赖关系,如 peer1 以 peer0 作为发现节点,因此需要先启动 peer0 再启动 peer1 。

4.   配置channel

在 Fabric 中,channel 代表了一个私有的广播通道,保证了消息的隔离性和私密性,它由 orderer 来管理。channel 中的成员共享该 channel 的账本,并且只有通过验证的用户才能在 channel 中进行交易,与一个 channel 相关的属性记录在该channel的初始区块中,可通过 reconfiguration 交易进行更改。channel的初始区块由 create channel 交易生成,peer 向 orderer 发送该交易时会带有的 config.tx 文件,该文件定义 channel 的相关属性。

5.   发布chaincode

chaincode 是开发人员按照特定接口编写的智能合约,通过 SDK 或者 CLI 在 Fabric 的网络上安装并且初始化后,该应用就能访问网络中的共享账本。

chaincode 的生命周期如下:

a. Install(安装)

chaincode 要在 Fabric 网络上运行,必须要先安装在网络中的 peer 上,安装同时注明版本号保证应用的版本控制。

b. Instantiate(实例化)

在 peer 上安装 chaincode 后,还需要实例化才能真正激活该 chaincode 。在实例化的过程中,chaincode 就会被编译并打包成容器镜像,然后启动运行。若 chaincode 在实例化的过程中更新了数据状态,如给某个变量赋予初始值,则该状态变化会被记录在共享账本中。每个应用只能被实例化一次,实例化可在任意一个已安装该 chaincode 的 peer 上进行。

c. Invoke和query (调用和查询)

chaincode 在实例化后,用户就能与它进行交互,其中 query 查询与应用相关的状态(即只读),而 invoke 则可能会改变其状态。

d. Upgrade(升级)

在 chaincode 添加新功能或出现 bug 需要升级时,可以通过 upgrade 交易来实现。这时需要把新的代码通过install交易安装到正在运行该 chaincode

的 peer 上,安装时需注明比先前版本更高的版本号,接下来只需要向任意一个安装了新代码的 peer 发送 upgrade 交易就能更新 chaincode ,chaincode 在更新前的状态也会得到保留。

(未完待续)
免责声明:本文版权归原作者所有,不代表MyToken(www.mytokencap.com)观点和立场;如有关于内容、版权等问题,请与我们联系。
相关阅读