CENTOS7下安装Hyperledger fabric1.0安装部署手册(单机与多机部署,以官方例子e2e_cli环境为例)

1 篇文章 0 订阅
1 篇文章 0 订阅

使用须知:

阅读并使用本文档的人需要一定的linux命令行知识基础与相关的docker基础,否则相关问题出错,不容易解决。

安装环境:

VMware14 Pro (虚拟机版本不限制)+ Centos7 64位操作系统(其他linux操作系统大部分操作都一样,只是部分安装命令换成相对应的指令)

安装前准备:

第一:Centos 7系统安装配置完成,保证网络畅通。以下所有操作最好以root账户进行(dcoker的服务启动和设置需要root权限),所以先切换到root账户,打开终端并输入命令sudo su,输入root账户密码进入。也可以直接注销当前用户,使用root账户登入系统(本教程直接以root账户操作)。

 

第二:关闭centos自动升级,免得安装时提示yum被锁定。即将/etc/yum/pluginconf.d/langpacks.conf 中的 enable=1改为enable=0。输入命令:

# sed -i 's/enabled=1/enabled=0/g' /etc/yum/pluginconf.d/langpacks.conf

如果提示被锁定就执行命令:

# rm /var/run/yum.id

第三:安装需要的基本工具(这里安装的pip是为了安装docker-compose),先保证curl命令和git可用

# yum install git

# yum install curl

安装pip

# yum -y install epel-release

# yum install python-pip           --安装pip

# pip install --upgrade pip          --对安装好的pip进行升级

更新软件包(需要几分钟的时间)

# yum update

第一步:安装docker_ce版

Tips:如果已经安装了老版的docker,请先卸载。

# yum remove docker docker-common docker-selinux docker-engine

  1. 安装docker

安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的:

# yum install -y yum-utils device-mapper-persistent-data lvm2

设置yum源:

# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

查看所有的docker版本:

# yum list docker-ce --showduplicates | sort -r

安装docker:

# yum install docker-ce

可以选择安装版本# yum install <FQPN>,<FQPN>可指定要安装的版本,例如docker-ce-18.06.1.ce,如果不指定版本,则默认安装最新版。

2.启动Docker服务,查看Docker运行状态并设置Docker开机启动:

# service docker start      --设置服务启动

# service docker status     --查看运行状态

# systemctl enable docker      --设置开机启动

执行命令docker version,如果出现下图,说明安装成功。(失败了卸载重新安装)

3.配置docker加速器(如果能翻墙就不用配置加速):

Docker安装完成之后,最好配置国内的Docker Hub,因为默认的Docker Hub在国外,安装会比较慢,这样拉取镜像的速度会很快。国内的镜像仓库有许多,例如:DaoCloud,阿里云,网易蜂巢,灵雀云等都可以选择,这里选择用阿里云进行镜像加速,网址:https://cr.console.aliyun.com/cn-hangzhou/mirrors 注册一个帐号。然后查看Docker Hub 镜像站点。指导文档写的很清楚。拷贝其中的内容执行即可。内容如下:https后面的应该是你自己的镜像地址。

# mkdir -p /etc/docker

# tee /etc/docker/daemon.json <<-'EOF'

{

  "registry-mirrors": ["https://jbpz0ctk.mirror.aliyuncs.com"]

}

EOF

# systemctl daemon-reload

# systemctl restart docker

第二步:安装docker-compose

Docker-compose是支持通过模板脚本批量创建docker容器的一个组件,它可以根据配置文件自动构建、管理、编排一组容器。这里简单介绍下两种安装docker-compose的方式,第一种方式相对简单,但是由于网络问题,常常安装不上,并且经常会断开,第二种方式略微麻烦,但是安装过程比较稳定。

方法一:使用curl命令安装(参照官网给出的方法,需要网络较好)

# sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# chmod +x /usr/local/bin/docker-compose

你可以通过修改URL中的版本,可以自定义你需要的版本。待安装完成之后,执行查询版本的命令,如下所示安装成功:

# docker-compose --version

方法二:用pip安装

用pip安装docker-compose:

# pip install docker-compose

这里可能会报错: Cannot uninstall ‘requests’. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a partial uninstall.

解决办法:

# pip install docker-compose --ignore-installed requests

待安装完成之后,执行查询版本的命令,如下所示安装成功:

# docker-compose --version

步:安装GO语言

前往GO语言的官网https://golang.org/dl/下载最新版本的安装包,没翻墙的同学就前往GO语言中文网https://studygolang.com/dl或者GO中国https://www.golangtc.com/download下载最新版本的安装包。在网络较好前提下也可以直接执行下面的curl命令下载最新版本的安装包。目前linux的最新版本为go1.11.linux-amd64.tar.gz

# cd /opt

# mkdir golang

# cd golang

# curl -O https://storage.googleapis.com/golang/go1.11.linux-amd64.tar.gz

下载完成之后执行解压命令,解压到当前目录下。

# tar -zxf go1.10.1.linux-amd64.tar.gz

# cd /opt

# mkdir gopath

网络不好的情况下容易下载失败,此时就可以手动下载安装包利用PSCP软件将安装包拷贝到虚拟机系统下,然后同样执行解压命令,将安装包解压到/opt/golang文件夹下。在/etc/profile中配置go的环境变量,将下面的配置信息写入profile,然后存盘并退出。

# vim /etc/profile

写入下面的环境变量配置信息

export GOROOT=/opt/golang/go

export PATH=$GOROOT/bin:$PATH

export GOPATH=/opt/gopath

然后刷新一下  

# source /etc/profile

查看go语言版本

# go version

Tips:这里解释一点,go语言安装在哪里都可以,但是配置环境变量时一定要清晰自己gopath下目录的设置,因为后面fabric源码一定要放在gopath目录下才能成功运行

步:安装GCC与Node.js

安装gcc,这里yum安装的gcc是4.8.5版本的。

# yum install gcc gcc-c++

# gcc -v

安装Node.js,前往Node.js选择对应版本下载,这里选择node-v9.9.0.tar.gz这个版本。(这里如果不着急开发,可以先选择跳过安装Node.js,因为它不是运行fabric官方例子的必备环境,而是SDK开发所需的环境。安装高版本的Node.js需要高版本的gcc支持,升级gcc需要花费很长时间)

# wget https://npm.taobao.org/mirrors/node/v9.9.0/node-v9.9.0.tar.gz

解压到/usr/local目录下

# tar -C /usr/local -xzf node-v9.9.0.tar.gz

此时gcc的版本为4.8.5,执行编译fabric例子足够用。但是如果要支持新版的Node.js,则需要我们手动升级gcc,因为Node.js8.7.0在编译时要求gcc版本在4.9.4+版本才行。若已为最新版请跳过以下步骤,接下来手动升级gcc,前往http://ftp.gnu.org/gnu/gcc/下载你想要的版本,这里选择gcc-7.3.0。

获取安装包并解压

# wget http://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz

# tar -C /usr/local -xzf gcc-7.3.0.tar.gz

# cd /usr/local/gcc-7.3.0

进入解压后的gcc文件夹,下载供编译需求的依赖项

# ./contrib/download_prerequisites

建立一个文件夹存放编译文件

# mkdir build

# cd build

# ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

# make   (此处make编译需要大量的时间,如果你的虚拟机配置不高,编译时间很长大约2个小时,你可以选择出去跑几圈再回来)

# make install

# reboot

重启之后再次执行gcc -v,出现下图gcc版本7.3.0说明升级成功。

升级之后,如果我们直接安装编译Node.js会出现问题,原因是升级gcc时,生成的动态库没有替换老版本gcc动态库导致的。所以先查找编译gcc时生成的最新动态库。

# find / -name "libstdc++.so*"

找到最新的动态库,结果如下:

将找到的动态库libstdc++.so.6.0.21复制到/usr/lib64

# cp /usr/local/gcc-7.3.0/build/prev-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24 /usr/lib64

切换到工作目录至/usr/lib64,删除原来的软连接,将默认库的软连接指向最新动态库

# cd /usr/lib64

# rm -rf libstdc++.so.6

# ln -s libstdc++.so.6.0.24 libstdc++.so.6

替换之后,接着再继续安装Node.js

# cd /usr/local/node-v9.9.0/

# ./configure

# make

# make install

# reboot

重启之后输入命令检查是否安装成功,出现下图显示版本号则正常。

# node -v

接着安装npm

# npm install npm -g

# npm -v

gcc与Node.js安装具体可以参考下面这两篇博客:

CentOS7 中安装 gcc:http://www.cnblogs.com/lpbottle/p/install_gcc.html

CentOS7 中安装 Nodejshttps://www.cnblogs.com/lpbottle/p/7733397.html

 

步:下载fabric源码

下载Fabric源码是因为要用到源码中提到的列子和工具,工具编译需要用到go语言环境,因此需要把源码目录放到$GOPATH下。通过前面对go的安装配置,$GOPATH设置为/opt/gopath。

# mkdir -p /opt/gopath/src/github.com/hyperledger

# cd /opt/gopath/src/github.com/hyperledger

# git clone https://github.com/hyperledger/fabric.git

这个网不好的情况下可能需要等待一小段时间,等完成后,我们可以在hyperledger/fabric中找到所有的最新的源代码。由于Fabric一直在更新,所有我们并不需要最新最新的源码,需要切换到v1.0.0版本的源码即可:

# cd /opt/gopath/src/github.com/hyperledger/fabric

# git checkout v1.0.0

# ls

进入e2e_cli文件夹下,下载所需的docker镜像,这样就可以下载所有需要的Fabric Docker镜像了。由于我们设置了国内的镜像,所以下载应该是比较快的。

# cd /opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/

# source download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

这里需要等待一小段时间,拉取所需的镜像。由于我们设置了国内的镜像,所以下载应该是比较快的。镜像下载完成之后,会自动显示下载完成的镜像,我们也可以运行一下命令检查下载的镜像列表

# docker images

我们仍然停留在e2e_cli文件夹,这里提供了启动、关闭Fabric网络的自动化脚本。在启动Fabric网络之前,先修改一个阻塞执行的bug。(注:fabric最新代码已修复该bug,但我们拉取的是V1.0.0版本的源码,所以需要手动修改该bug) 进入e2e_cli/base目录,修改该下的base/peer-base.yaml文件:

# vim base/peer-base.yaml

这里将

- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2ecli_default

修改为:

- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=e2e_cli_default

完成之后,执行一个命令会自动运行Example02 ChainCode的测试:

# ./network_setup.sh up

这个脚本做了一下一系列操作:

1.编译生成Fabric公私钥、证书的程序,程序在目录:fabric/release/linux-amd64/bin

2.基于configtx.yaml生成创世区块和通道相关信息,并保存在channel-artifacts文件夹。

3.基于crypto-config.yaml生成公私钥和证书信息,并保存在crypto-config文件夹中。

4.基于docker-compose-cli.yaml启动1Orderer+4Peer+1CLI的Fabric容器。

5.在CLI启动的时候,会运行scripts/script.sh文件,这个脚本文件包含了创建Channel,加入Channel,安装Example02,运行Example02等功能。

最后运行完毕,我们可以看到这样的界面,说明整个Fabric网络已经跑通了。

测试fabric网络,我们仍然是以现在安装好的Example02为例,在官方例子中,channel名字是mychannel,链码的名字是mycc。fabric提供了SDK和CLI两种交互方式,这里不讨论SDK的方式。我们首先进入CLI执行peer命令,先Ctrl+C结束,然后输入以下命令进入。

# docker exec -it cli bash

进入这样的一个状态下,说明我们已经进入容器内部的peer节点中,可以进行相关吗命令操作,查询余额,例如查询a账户的余额。

# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'

看到query result:90。然后,我们试一试把a账户的余额再转20元给b账户。

# peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C mychannel -n mycc -c '{"Args":["invoke","a","b","20"]}'

看到 INFO 00a Chaincode invoke successful. result: status:200。我们在执行查询操作,发现a确实是少了20。到此为止就一切正常。最后我们要关闭Fabric网络,首先需要运行exit命令退出cli容器。关闭Fabric的命令与启动类似,命令为:

退出容器命令。

# exit

关闭fabric命令。

# ./network_setup.sh down

停止所有容器并删除。

 

到此为止,单机的例子算是已经部署成功了,接下来就继续部署多机环境。

配置多节点Fabric

第一步:配置说明

多机部署与单机非常类似。首先可以根据官方Fabric自带的e2e_cli列子中的集群方案来生成我们自己的集群,与案例不同的是我们需要把容器都分配到不同的服务器上,彼此之间通过网络来进行通信,网络构建完成后则进行相关的channel和chaincode操作。

这里申请了五台服务器,所有的服务器均是按照上述e2e_cli环境构建与测试步骤配置,计划其中四台服务器运行peer节点,另外一台服务器运行orderer节点。

名称

IP地址

节点标识

节点Hostname

Organization

Server1

192.168.1.103

orderer

orderer.example.cn

Orderer

Server2

192.168.1.104

sp0

peer0.org1.example.cn

Org1

Server3

192.168.1.105

Sp1

Peer1.org1.example.cn

Org1

Server4

192.168.1.106

Sp2

peer0.org2.example.cn

Org2

Server5

192.168.1.107

Sp3

Peer1.org2.example.cn

Org2

步:生成公私钥、证书、创世区块等

公私钥和证书是用于Server与Server之间的安全通信,另外要创建channel并让其它节点加入channel就需要创世区块,这些必备文件都可以通过一个命令生成,并且官方已经给出了脚本,在如下目录中的文件:

/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/ generateArtifacts.sh

使用generateArtifacts.sh生成证书和config.tx,具体执行命令如下:

# bash generateArtifacts.sh mychannel

这里创建了5台服务器,在任意一台服务器的该目录下执行此项命令即可,将会生成两个目录,它们分别为channel-artifacts和crypto-config,两个目录的结果和含义如下视图:

在上述目录里的文件用于orderer创建channel,它们根据configex.yaml的配置生成。

在上述目录里有orderer和peer的证书、私钥和用于通信加密的tls证书等文件,它通过configex.yaml配置文件生成。

步:配置多服务器

根据之前所述的gopath目录等配置方案,我们假定所有的服务器都是按照上述单机操作文档的配置来操作,所有服务器都有Fabric源码且目录为

/opt/gopath/src/github.com/hyperledger/fabric,我们在server1上执行命令生成构建Fabric网络所需的成员证书等必要材料:

# bash generateArtifacts.sh mychannel

该命令只需在其中某一台服务器上运行一次即可,其它服务器无需再次运行。在运行该命令的服务器/opt/...../e2e_cli目录下会生成channel-artifacts和crypto-config目录,第二步已经提到过。此时需要把它们拷贝到其它服务器相同的e2e_cli目录下,如果在其它服务器中已经存在该目录,则先把此目录删除。

当所有服务器都有同一个channel-artifacts和crypto-config目录后,接下来就开始配置compose文件。

 

第四步:设置peer0.org1.example.com节点的docker-compose文件

e2e_cli中提供了多个yaml文件,我们可以基于docker-compose-cli.yaml文件创建,具体可执行如下命令:

# cp docker-compose-cli.yaml docker-compose-peer.yaml

然后修改docker-compose-peer.yaml,去掉orderer的配置,只保留一个peer和cli,因为我们要多级部署,节点与节点之前又是通过主机名通讯,所以需要修改容器中的host文件,也就是extra_hosts设置,修改后的peer配置如下:

同样,cli也需要能够和各个节点通讯,所以cli下面也需要添加extra_hosts设置,去掉无效的依赖,并且去掉command这一行,因为我们是每个peer都会有个对应的客户端,也就是cli,所以我只需要去手动执行一次命令,而不是自动运行。修改后的cli配置如下:

 之前单机模式下,4个peer会映射主机不同的端口,但是我们在多机部署的时候是不需要映射不同端口的,所以需要修改base/docker-compose-base.yaml文件,将所有peer的端口映射都改为相同的:

ports:

  - 7051:7051

  - 7052:7052

  - 7053:7053

第五步:设置peer1.org1.example.com节点的docker-compose文件

与peer0.org1.example.com节点compose文件配置一样,不过需要将启动的容器改为peer1.org1.example.com,并且添加peer0.org1.example.com的IP映射,对应的cli中也改成对peer1.org1.example.com的依赖。这是修改后的peer1.org1.example.com上的配置示例:

与上述类似,再次设置peer0.org2.example.com及peer1.org2.example.com节点compose配置文件。peer0.org2.example.com与peer0.org1.example.com类似,

peer1.org2.example.com与peer1.org1.example.com类似。

CLI的配置同之前的一模一样。没个节点的端口文件别忘记都改成相同的。

第六步:设置order节点的docker-compose文件

与创建peer的配置文件类似,我们也复制一个yaml文件出来进行修改:

# cp docker-compose-cli.yaml docker-compose-orderer.yaml

orderer服务器上我们只需要保留order设置,其他peer和cli设置都可以删除。orderer可以不设置extra_hosts。

以下是order compose的配置示例:

第七步:启动Fabric多节点集群

启动orderer节点服务

上述操作完成后,此时各节点的compose配置文件及证书验证目录都已经准备完成,可以开始尝试启动多机Fabric集群。首先启动orderer节点,切换至orderer.example.com服务器,即前文指定的192.168.1.103服务器,执行如下命令进入启动docker进程:

# docker-compose -f docker-compose-orderer.yaml up -d

运行完成后我们可以使用docker ps看到运行一个名为orderer.example.com的节点。如下图所示:

 

启动peer节点服务

切换到peer0.org1.example.com服务器,即前文指定的192.168.1.104服务器,启动本服务器的peer节点和cli,执行如下命令:

# docker-compose -f docker-compose-peer.yaml up -d

运行完毕后我们使用docker ps应该可以看到2个正在运行的容器,如下图:

接下来依次在另外3台服务器(192.168.1.105/192.168.1.106/192.168.1.107)运行启动peer节点容器的命令,执行命令与上述方案一致,如下所示:

# docker-compose -f docker-compose-peer.yaml up -d

现在我们整个Fabric4+1服务器网络已经成型,接下来是创建channel和运行ChainCode。

第八步:创建channel和运行chaincode

切换到peer0.org1.example.com(192.168.1.104)服务器上,使用该服务器上的cli来运行创建Channel和运行ChainCode的操作。首先需要进入cli容器,执行如下命令:

# docker exec -it cli bash 

进入容器后我们可以看到命令提示变为如下所示:

 说明我们已经以root的身份进入到cli容器内部。官方已经提供了完整的创建Channel和测试ChainCode的脚本,并且已经映射到cli容器内部,所以我们只需要在cli内运行如下命令: 

# ./scripts/script.sh mychannel

该脚本会一步一步的完成创建通道,将其他节点加入通道,更新锚节点,创建ChainCode,初始化账户,查询,转账,再次查询等链上代码的各个操作都可以自动化实现。直到最后,系统提示如下视图:

说明我们的4+1的Fabric多级部署成功了。我们现在是在peer0.org1.example.com的cli容器内,我们也可以切换到peer0.org2.example.com服务器,运行docker ps命令,可以看到本来是2个容器的,现在已经变成了3个容器,因为ChainCode会创建一个容器,如下视图: 

上图第一个docker ps执行只有最开始创建的两个容器,后一个docker ps命令执行后会发现有三个容器。接着我们可以在任意一个节点上执行查询与转账操作,都会出现相应的结果。退出多机部署的fabric,需要分别在对应节点上执行

# docker-compose -f docker-compose-orderer.yaml down

# docker-compose -f docker-compose-peer.yaml down

并删除所有容器,否则下次启动会报错

# docker rm -f $(docker ps -aq)

 

至此,整个官方给予的Fabric多机集群部署的工作都已经验证完成。

 

 

 

参考连接及问题处理:

 

到此整个安装测试结束,此篇仅为测试fabric框架在centos 7 中的安装测试。中间坑无数,如:

go语言需要设置GOPATH、GOROOT环境变量,否则运行./network_setup.sh up命令会出现找不到mycc链。

node.js需要gcc编译支持,而yum install安装的gcc版本过低,不能顺利安装,因此需要对gcc版本升级,而升级的时候make实在实在实在太慢了!!!

docker镜像安装,最好在后面写入版本信息,否则下载的可能与git checkout所对应版本不一致,./network_setup.sh up命令时会出现各类奇葩问题。


单机与多机部署参考链接:

1>链接:https://www.jianshu.com/p/cb032c42c909 

作者:四丢皮得,來源:简书。

2>链接:https://www.cnblogs.com/aberic/p/7542167.html 

https://www.cnblogs.com/aberic/p/7541470.html   

作者:Aberic,来源:博客园

3>链接:https://www.cnblogs.com/zixia/p/8360079.html 

作者:紫霞315,来源:博客园

4>链接:https://www.taohui.pub/530.html 

作者:陶辉 来源:https://www.taohui.pub/

5>链接:http://www.cnblogs.com/studyzy/p/6973334.html

作者:深蓝居 来源:博客园

 

CentOS7下安装Docker-Compose:

链接:https://www.cnblogs.com/YatHo/p/7815400.html

 

hyperledger fabric 1.0环境搭建出错记录:

链接:https://blog.csdn.net/cnq2328/article/details/79664991

链接:https://blog.csdn.net/alphags/article/details/79177044

 

  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值