柴震宇 钟旭 杨硕 于七龙
(东北大学秦皇岛分校 计算机与通信工程学院 河北省秦皇岛市 066004)
Hyperledger Fabric[4]是当前流行的企业级开源区块链开发框架,具备良好的可拓展性,支持在丰富的应用场景下提供服务。在实际生产环境中,为提高效率,一般会根据应用场景将Fabric节点分散部署在多台服务器中,搭建Fabric区块链网络过程中的复杂的环境配置通常是开发者进行快速开发的瓶颈。针对此问题,已经有一些实践方案,2020年,林剑宏[5]提供了单机部署Fabric网络的实践方案,但该方案适用于初学者体验Fabric网络系统核心功能,不适用于多机搭建。此外,方案[6]提出了通过指定节点IP的方式多机快速部署Fabric节点,但方案无法多节点进行有效管理。2019年,钟绍柏[7]提出利用Ubuntu、Docker、Docker Compose搭建Fabric链码运行环境,并进行链码调用测试,但该方案为讨论Fabric多机部署与管理情况。方案[8]提出了基于Kubernetes的云化部署,该方案管理效率较高,但Kubernetes学习难度大,且运维成本高。
针对管理效率与实施成本问题,本文提出了基于Docker swarm实现Hyperledger Fabric的容器化部署与管理。方案具有以下特点:
(1)利用Docker容器技术部署Fabric节点,实现Fabric计算节点的快速部署;
(2)利用Docker Swarm管理容器工作负载与维护集群状态,保证系统的高可用性与容错性,因swarm兼容Docker API,使得其学习成本低,同时架构简单,部署与运维成本低,适用于中小规模的集群管理。本方案配置简单且管理效率高效,可直接应用于各类生产环境。
如图1所示为基于Docker Swarm部署Fabric分布式网络拓扑图,网络具有5个排序节点(Orderer)、6个组织(Org),每个组织下有2个peer节点。其中,排序节点通过广播(broadcast)接口,接收客户端发送的交易,并将交易进行排序;组织用于维护与管理peer节点;组织用于管理peer节点,当peer节点较多时,可通过组织统一管理,同时,组织还为同组织内peer节点通信机密性提供保护;peer节点包含了账本和链码,并维护账本和链码、处理事务提案(transaction proposal)及响应(proposal response),且通过不间断申请更新事务使账本适中处于最新状态。每个排序节点间可相互通信,每个组织内部节点及组织间也可相互通信。
图1:基于Docker Swarm部署Fabric分布式网络拓扑
系统中主要将Hyperledger Fabric中的各个组件不属于Docker容器中运行,并通过Docker Swarm作为容器编排工具实现集中管理各容器,同时构造一个自定义的虚拟网络实现内部通信,通过docker-compose启动Fabric的相关组件,对运行中的Fabric组件容器进行管理与调度。
方案中Docker Swarm内置的跨主机容器通信方案是overlay网络,overlay通过虚拟出一个子网,让处于不同主机的容器能透明地使用该子网,所以跨主机的容器通信就变成了在同一个子网下的容器通信,逻辑上形成同一主机下的bridge网络通信。构建Hyperledger Fabric分布式网络的核心在于使各个节点都处于同一个overlay网络中,使其中的有关组件能够与其他分布式节点进行通信。
2.3 两组心率变异性和心率减速力指标分析 研究组SDNN、SDANN、RMSSD、LF、HF及心率减速力水平明显低于对照组,差异有统计学意义(P<0.05),见表3。
如表1所示为图1中网络节点地址规划,基于Fabric多机使用环境,表1中每一个主机用于构建一个组织(Org),即每个组织对应一个IP地址,组织间可通过物理网络通信,组织内部的peer节点通过overlay网络相互通信,每个peer不对应具体IP地址,peer之间通过虚拟内网间有效的域名通信。
表1:网络节点地址
如图2所示为系统部署流程,主要内容有:
图2:应用部署流程
(1)安装Docker并拉取镜像:安装Docker及与应用有关依赖软件、拉取基本镜像为前置条件,本方案中为Hyperledger Fabric官方镜像;
(2)组建Docker Swarm集群:将各个服务主机加入相同的Docker Swarm集群中;
(3)创建overlay network:各个节点所需要共同加入overlay network,以实现节点间通信;
(4)配置Docker-compose文件:该文件定义了需要管理的服务与相关环境,本文中主要为Hyperledger Fabric中的orderer节点、peer节点与客户端(Client)控制台;
(5)启动Docker节点:配置完毕后,可用上一步生成的Docker-compose的相关文件启动Docker容器,容器内部运行节点服务;
(6)应用部署:该流程部署相关的Hyperledger fabric分布式应用,到此为止,Hyperledger Fabric的分布式网络就构建完毕,开发者可基于此开发应用程序。
方案测试环境采用6台虚拟机用于分布式节点部署,节点操作系统为Ubuntu20.04,分配1核(vCPU),2G内存,20G硬盘。部署操作主要参考图2中的核心流程,部署中的核心步骤如下所示:
(1)环境安装与镜像拉取,在每一个组织(Org)的主机中拉取docker、docker swarm镜像,拉取成功后可验证相关组件版本信息,如图3所示为主机中Docker版本信息,如图4所示为Docker compose,如图5所示为Docker images的版本信息,为了保持系统安全性与可扩展性,各类基础组件安装时应选择稳定版本部署。
图3:Docker版本
图4:Docker-compose版本
图5:Docker images信息
(2)组建Docker swarm集群。在各个主机中分别通过“docker swarm init --advertise-addr <host-1 ip address>”、“docker swarm join-token manager”、“<output from jointoken manager> --advertise-addr <host-2 ip address>”命令构建Docker swarm,部署成功可查看部署后的集群。如图6所示为通过“docker node ls”查看本项目中集群节点信息,其中,每个节点的“Ready”状态代表节点状态正常,管理状态(MANAGER STATUS)为“Leader”表示该节点可进行集群任务调度,当Leader节点发生故障时,其它主机将重新推举产生新的Leader管理集群。
图6:Docker swarm集群
(3)创建overlay network。在主机中通过“docker network create --attachable --driver overlay basic-network”命令构建overlay网络,如图7所示为构建网络完毕后通过“docker network ls”命令查看网络信息,其中,DRIVER为“overlay”、SCOPE为“swarm”的网络为新建的overlay network。创建overlay network之后,运行在多个节点(nodes)上的容器(container)可通过内部网络进行通信与访问。
图7:创建overlay network的目录
(4)配置Docker-compose文件。如表2所示为各主机的Docker-compose文件与节点信息,compose文件是一个YAML文件,用于定义services、network和volumes等参数。本方案中有6台主机,对应需要配置6台主机的dockercompose文件。配置相关文件可启动Hyperledger Fabric节点。
表2:主机Docker-compose文件
(5)启动节点。在各主机输入“docker-compose -f < hostn.yaml> -f <ordern.yaml> up -d”命令启动节点,其中“-f”参数表示指定文件,“-d”参数表示后台启动。如图8所示,为节点启动成功后在Host1中通过“docker ps -a”命令查看容器运行情况,其中,STATUS为“up”表示节点正常启动与运行。
图8:Host 1节点启动情况
(6)应用部署。根据Hyperledger Fabric的业务流程,首先需要完成加入通道(peer channel join)、更新锚节点(peer channel update)、安装链码(install chaincode)、审批链码(approve chaincode)、提交链码(commit chaincode)、初始化链码(init chaincode)等步骤完成之后,才能进入业务核心流程调用链码。其中,通道分为系统通道与应用通道,分别用于传输管理与交易信息;锚节点是每个组织中若干个peer节点的代表,负责与其它组织通信;安装链码即部署Fabric智能合约,链码被编译成一个独立的应用程序,运行于隔离的Docker容器中;审批链码用于允许向通道提交链码,Fabric中需要超过一般的组织审批链码后才可向通道提交链码;链码的初始化只需要执行一次,在任意节点上执行即可。
如图9所示为Fabric多机部署测试,部署完毕后,可验证各排序节点间与组织内部节点间网络是否畅通,图9(a)为验证排序节点间网络连接,图9(b)为验证组织内部节点间网络连接。
图9
以上部署及测试结果表明,基于Docker Swarm的Hyperledger Fabric多机部署具有可行性。因Docker swarm是Docker官方社区开发的原生集群管理工具,其使用标准的docker API,使得Docker swarm学习成本低,同时架构简单,运维成本低,有利于快速部署与二次开发。
本文针对Fabric多机的管理效率低与实施成本高问题,研究了基于容器技术的Hyperledger Fabric的多机部署,并通过实验的方式验证了有关Hyperledger Fabric节点在Docker Swarm的容器编排管理的可行性。方案具有可快速部署、易于管理等特点,针对于普通规模的Fabric集群部署与管理具有一定优势,且可直接应用于各类生产环境。方案未对部署规模较大集群效率与性能进行测试,下一步将针对规模较大集群时的精细管理做出探索。