当前位置:
首页区块链超级账本Fabric 1.0 多节点集群的部署(2)
( 注:部署过程中大量使用了 docker 和 docker compose ,建议不熟悉 Docker 的读者先补充相关知识。)
前篇:超级账本Fabric 1.0 多节点集群的部署(1)
二、操作步骤
1、环境构建与测试
本文中用到的宿主机环境是 Ubuntu 14.04.5 LTS,通过 Docker 容器来运行 Fabric 的节点, 版本为 1.0 beta。因此,启动 Fabric 网络中的节点需要先安装Docker 、 Docker-compose 和 Go 语言环境,然后在网上拉取相关的 Docker镜像,再通过配置 compose 文件来启动各个节点。
1.1、Docker 与 Docker-compose 安装
(由于篇幅关系,略去部分命令,可参考文后的完整PDF版本。)
当安装完成后,可通过 docker ersion 命令来查看 docker 的版本信息并确认安装成功。
接下来下载并安装 docker-compose 。安装完毕后可以通过 docker-compose ersion 来确认安装是否成功。
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 ersion可查看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 切换到 1.0.0 beta 源码分支,以兼容 fabric/example/e2e 中的配置:
git checkout 1.0.0-beta
1.4、Docker镜像下载
Fabric 集群所需要用到的 Docker 镜像如下:
进入到 fabric/examples/e2e_cli 目录下,运行 ./download-dockerimages.sh 来下载必要镜像。镜像下载完成后,就可以通过 docker sae 命令把镜像打包成压缩文件,传送到各个VM。当VM接收到压缩文件后,可以通过 docker load 来解压和导入镜像。如果有私有的容器镜像仓库registry,如 Harbor 等,也可以把镜像推送到私有registry,再从各个机器中拉取。
通过以下命令来保存所有 tag 含有 beta 标识的镜像到名字为 images 的压缩文件中:
docker sae $(docker images | grep beta | awk {‘print $1’} ) -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 定义了两个变量,在实例化的时候给这两个变量赋予了初值,通过inoke操作可以使两个变量的值发生变化。
通过以下命令执行测试:
bash network_setup.sh up
接下来会有许多的调试信息,具体可参考 e2e_cli 目录下的 script/script.sh 文件,当终端出现以下信息时说明测试通过,所有部件工作正常:
===All GOOD, End-2-End execution completed ===
至此,环境配置工作完毕,通过 docker ps -a 命令可以查看各容器的状态。 chaincode 会在独立的容器中运行,因此会出现3个以 de 开头的容器,它们与各自的 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 配置文件生成。
(未完待续)