上期文章阐述了超级账本 Fabric 1.0多节点部署的方法概述,得到广大读者的关注,笔者们连夜赶工,今天发布连载之二,介绍具体搭建 Fabric 1.0 集群的步骤。
注:部署过程中大量使用了docker和docker compose,建议不熟悉Docker的读者先补充相关知识。
1、环境构建与测试
本文中用到的宿主机环境是 Ubuntu 14.04.5 LTS,通过 Docker 容器来运行 Fabric 的节点, 版本为 v1.0 beta。因此,启动 Fabric 网络中的节点需要先安装Docker 、 Docker-compose 和 Go 语言环境,然后在网上拉取相关的 Docker镜像,再通过配置 compose 文件来启动各个节点。
1.1、Docker 与 Docker-compose 安装
当安装完成后,可通过 docker version 命令来查看 docker 的版本信息并确认安装成功。
接下来下载并安装 docker-compose 。安装完毕后可以通过 docker-compose version 来确认安装是否成功。
1.2、Go 1.8.3安装:
1). 通过以下命令下载go1.8.3:
curl -O https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
2). 解压go1.8.3.linux-amd64.tar.gz到/usr/local:
tar -C /usr/local -xzf go1.8.3linux-adm64.tar.gz
3). 在~/.profile中添加GOPATH环境变量,并把go加到PATH环境变量,编辑~/.profile在最后添加两行:
export PATH=$PATH:/usr/local/go/bin
export GOPATH=/opt/gopath
4). 在终端运行source ~/.profile后用go version可查看go的版本,返回如下信息说明安装成功:
go1.8.3 linux/amd64
1.3、下载Fabric源码:
下载Fabric源码是因为要用到源码中提供的例子和工具,工具的编译需要用到Go环境,因此需要把源码目录放到 GOPATH下。通过上面Go的安装配置,GOPATH 设置为 /opt/gopath ,用以下命令创建并且进入到 hyperledger 目录中:
mkdir -p /opt/gopath/github.com/hyperledger/
cd /opt/gopath/github.com/hyperledger
从github上下载Fabric源码:
git clone https://github.com/hyperledger/fabric.git
因为镜像使用的是beta版本,因此需要把 Fabric 切换到 v1.0.0 beta 源码分支,以兼容 fabric/example/e2e 中的配置:
git checkout v1.0.0-beta
1.4、Docker镜像下载
Fabric 集群所需要用到的 Docker 镜像如下:
进入到 fabric/examples/e2e_cli 目录下,运行 ./download-dockerimages.sh 来下载必要镜像。镜像下载完成后,就可以通过 docker save 命令把镜像打包成压缩文件,传送到各个VM。当VM接收到压缩文件后,可以通过 docker load 来解压和导入镜像。如果有私有的容器镜像仓库registry,如 Harbor 等,也可以把镜像推送到私有registry,再从各个机器中拉取。
通过以下命令来保存所有 tag 含有 beta 标识的镜像到名字为 images 的压缩文件中:
docker save (docker images | grep beta | awk {‘print1’} ) -o images
生成 images 文件后,就可以通过scp把它拷贝到还没有镜像的其他节点中,例如,地址为 10.112.122.6 的节点需要安装以上镜像,可以通过以下命令把images 远程拷贝到 10.112.122.6 的home目录下:
scp images [email protected]:~
然后在 10.112.112.6 这台主机的home目录上运行:
docker load -i images
等待一段时间后, 通过 docker images 命令就能查看到相关镜像的信息。
1.5、运行测试
进入到 fabric/example/e2e_cli 文件夹,文件结构如下:
network_setup.sh 是一键测试脚本,该脚本启动了6个 docker 容器,其中有4个容器运行 peer 节点和1个容器运行 orderer 节点,它们组成一个Fabric集群。另外, 还有一个 cli 容器用于执行创建 channel 、加入 channel 、安装和执行chaincode 等操作。测试用的 chaincode 定义了两个变量,在实例化的时候给这两个变量赋予了初值,通过invoke操作可以使两个变量的值发生变化。
通过以下命令执行测试:
bash network_setup.sh up
接下来会有许多的调试信息,具体可参考 e2e_cli 目录下的 script/script.sh 文件,当终端出现以下信息时说明测试通过,所有部件工作正常:
===All GOOD, End-2-End execution completed ===
至此,环境配置工作完毕,通过 docker ps -a 命令可以查看各容器的状态。 chaincode 会在独立的容器中运行,因此会出现3个以 dev 开头的容器,它们与各自的 peer 对应,记录了 peer 对 chaincode 的操作。
2、创建Fabric多节点集群
2.1 前期准备
我们将重现 Fabric 自带的 e2e_cli 示例中的集群,不同的是要把容器分配到不同的虚拟机上,彼此之间通过网络来进行通信,网络搭建完成后则进行相关的 channel 和 chaincode 操作。
先准备5台虚拟机(VM),所有虚拟机均按照上述环境构建与测试步骤配置,当然也可安装一个虚拟机模板,然后克隆出其他虚拟机。其中4台虚拟机运行 peer 节点,另外一台运行 orderer 节点,为其他的四个节点提供order服务。
2.2 生成证书和config.tx
在任意VM上运行 fabric/examples/e2e_cli 目录下的 generateArtifacts.sh 脚本,可生成两个目录,它们分别为 channel-artifacts/ 和 crypto-config/,两个目录的结构分别如下:
-channel-artifacts
-channel.tx
-genesis.block
-Org1MSPanchors.tx
-Org2MSPanchors.tx
上述目录里的文件用于 orderer 创建 channel , 它们根据 configtx.yaml 的配置生成。
-crypto-config
-ordererOrganizations
-peerOrganizations
上述目录里面有 orderer 和 peer 的证书、私钥和以及用于通信加密的tls证书等文件,它通过 configtx.yaml 配置文件生成。
(未完待续)
文章来自于微信公众号“亨利笔记”,已获得作者转载授权。
作者简介
张海宁(Henry Zhang),现任VMware中国研发中心云原生应用首席架构师, Harbor企业级容器Registry开源项目负责人,Cloud Foundry中国社区最早的技术布道师之一,《区块链技术指南》作者之一。目前着重关注区块链、容器和云计算等领域的研究和开发工作。
陈家豪,广州大学密码学研究生,现为VMware公司区块链项目实习生,熟悉超级账本、以太坊和比特币等区块链项目等开发工作。
更多区块链投稿请发送邮箱:[email protected]
更多关于超级账本的信息,以及区块链的技术细节,包括比特币、以太坊、公有链、联盟链、侧链、闪电网络等等,请参考笔者和邹均博士等作者合著的新书《区块链技术指南》,机械工业出版社:
京东购买链接:
http://item.jd.com/12007317.html