根据搜集的资料安装测试并在安装测试过程中整理的文档,如有不足希望不吝赐教。



目录

一、环境介绍

Fabric相关组件以及工具介绍:

- orderer 共识节点。为交易排序,并生成区块

- peer共识节点。为交易背书,并记录区块信息

- crypto用于生成区块链网络中相应用户的相关证书文件

- configtxgen 用于生成区块链系统链码的创世区块、新建通道的配置文件、以及组织中锚节点的配置文件

 

本次Fabric区块链网络部署环境:5台 Centos 7系统的虚拟机。

其中golang、docker、内核升级等安装配置全部是使用单机测试https://blog.csdn.net/qq_38591756/article/details/82826979)的配置,相关的安装配置步骤可以参考下面给出的链接或者自行搜索相关安装配置资料。

相关环境版本如下:

1个 orderer 节点,4个 peer 节点,使用 solo 共识算法

172.17.1.40、172.17.0.233、172.17.0.239、172.17.0.240部署peer节点

172.17.0.241部署orderer节点

 

二、源码编译、以及fabric 区块链网络部署环境准备

单机部署测试时,go、docker、docker-compose、git等应该已经安装完成并且已经完成环境变量等配置,fabric源码已经下载,此处不再赘述。如果后面步骤碰到未安装的依赖等可自行安装后继续。

安装编译相关的依赖包 snappy-devel.x86_64、zlib-devel.x86_64、bzip2-devel.x86_64、libtoo-ltdl-devel.x86_64、libtool

可以使用命令直接安装,命令如下:

yum -y install snappy-devel.x86_64 zlib-devel.x86_64 bzip2-devel.x86_64 libtoo-ltdl-devel.x86_64 libtool

从 github.com 上下载 go 语言编译相关环境 gotools(golang.org 需要翻墙,所以从 github 上获取)

在目录$GOPATH/src/golang.org/x/下执行:

git clone https://github.com/golang/tools.git

 

三、编译 fabric区块链相关可执行程序

切换到 fabric 源码的目录下面,通过 makefile 文件,可以编译出 fabric 项目的全部可执行文件。

这次的演示例子中,只需要编译部分必要文件即可:orderer、peer、configtxgen、cryptogen。

1.编译go相关工具

cp -r $GOPATH/src/golang.org/x/tools/ $GOPATH/src/github.com/hyperledger/fabric/gotools/build/gopath/src

完成后执行:

make gotools

 

2.编译 fabric基础环境

make buildenv

针对上述异常,将其拷贝至指定目录,再次执行make buildenv,成功截图如下:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

3.编译区块链服务相关工具

分别执行下面四条命令:

make orderer
make peer
make configtxgen
make cryptogen

编译的可执行程序生成在./fabric/build/bin目录下,设置该目录至 PATH环境变量。可以修改/etc/profile文件,在PATH后追加:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

编译成功截图:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

四、多机部署fabric网络(solo共识)

基本环境已经完成,下面将使用编译出来的可执行程序及相关工具,来搭建一个 fabric 区块链网络,并实现链码的部署以及测试。

首先,分别在五台虚拟机中创建目录/etc/hyperledger/fabric,以下的命令 全部在该目录下执行,并且需要设置 fabric 网络执行的环境变量:

FABRIC_CFG_PATH=/etc/hyperledger/fabric

可以直接在/etc/profile中添加,如图:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

1.配置 fabric 网络用户拓扑关系

通过配置文件 crypto-config.yaml配置fabric 网络用户拓扑关系。crypto-config.yaml 内容如下(crypto-config.yaml文件可以从e2e目录复制一份文件到当前目录):

OrdererOrgs:
  - Name: Orderer
    Domain: example.com
    Specs:
      - Hostname: orderer
PeerOrgs:
  - Name: Org1
    Domain: org1.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
    Specs:
      - Hostname: peer0
      - Hostname: peer1
  - Name: Org2
    Domain: org2.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
    Specs:
      - Hostname: peer0
      - Hostname: peer1

如果设置了EnableNodeOUs,就在msp下生成config.yaml文件。

该配置文件,包含一个 orderer 节点,以及两个 peer组织,两个 peer 组织又分别包含了两个 peer 节点。

使用 cryptogen 工具,从crypto-config.yaml配置文件中生成用户相应的秘钥和证书文件 命令如下:

cryptogen generate --config=./crypto-config.yaml --output ./crypto-config

成功后截图如下:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

执行命令后,会在当前目录下生成文件夹 crypto-config,包含节点用户的秘钥以及证书文件,如图:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

通过scp命令分发 crypto-config文件夹,至其他4台虚拟机的/etc/hyperledger/fabric 目录下(以下为例,根据实际修改主机ip):

scp -r crypto-config root@172.17.0.233:/etc/hyperledger/fabric/

 

2.配置Orderer 节点的启动创世区块,新建通道交易的相关配置

通过配置文件 configtx.yaml 配置ordere 节点启动需要的创始区块信息,以及新建应用通道的交易信息。最初记录时使用的是word,配置文件内容太长,因此没有全部记录,以下截图仅为部分,完整配置文件统一放在附件(CentOS7 - hyperledger fabric1.1 - 1+4多机部署(solo共识)配置文件)中,请自取,如果积分不足请留言。

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

修改完成后执行下面命令:

使用工具configtxgen生成 orderer 节点启动所需的创世区块:

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock genesis.block

使用工具 configtxgen生成创建应用通道的交易配置文件:

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx testchannel.tx -channelID testchannel

使用工具 configtxgen 生成更新组织锚节点的配置信息文件:

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org1MSPanchors.tx -channelID testchannel -asOrg Org1MSP

configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./Org2MSPanchors.tx -channelID testchannel -asOrg Org2MSP

执行命令后,在当前目录下会生成如下文件:

genesis.block、testchannel.tx、Org1MSPanchors.tx、Org2MSPanchors.tx

通过 scp 命令发送Org1MSPanchors.tx文件至172.17.1.40

通过 scp 命令发送Org2MSPanchors.tx文件至172.17.0.239

通过 scp 命令发送 testchannel.tx文件至全部四台peer主机

 

3.设置虚拟机 Hosts 文件

由于 fabric 网络启动相关的配置文件中,与网络地址相关的信息都是填写的域名,所以需要在 hosts 文件中配置域名与 ip 的对应关系, orderer 节点和其他的4个 peer 节点的虚拟机都需要配置相关的 hosts 信息:vim /etc/hosts

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

其中域名是根据 cryprto-config.yaml 的配置信息得来。

 

4.配置 orderer 启动环境

在 orderer 节点的虚拟机配置 orderer 节点启动相关配置信息 orderer.yaml,并保存在/etc/hyperledger/fabric 目录下。相关配置文件内容见附件。

从 cypto-config 文件夹下,拷贝 orderer 节点的秘钥以及证书文件至 fabric 启动环境变量目录下:

cp -r ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp ./

cp -r ./crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/tls ./

根据前文的操作,fabric 网络 orderer 节点的执行环境目录下必须有以下文件及文件夹:

./crypto-config、./msp、./tls、orderer.yaml、genesis.block

启动 orderer 节点:

orderer start

 

5.配置 peer 启动环境

在 peer 节点的虚拟机配置 peer 节点启动相关配置信息 core.yaml,并保存在/etc/hyperledger/fabric 目录下。相关配置文件内容见附件。

从 crypto-config 文件夹下,拷贝 peer 节点的秘钥以及证书文件至 fabric 启动环境变量目录下:

cp -r ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp ./

cp -r ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls ./

根据前文的操作,fabric 网络 peer 节点的执行环境目录下必须有以下文件及文件夹:

/crypto-config.tx、./msp、./tls、testchannel.tx、core.yaml、

Org1MSPanchors.tx(.1.40虚拟机)、

Org2MSPanchors.tx(.0.239虚拟机)

启动 peer 节点:

peer node start

 

6.创建应用通道

设置相应环境变量,4台peer节点都需要设置(根据相应环境修改配置中相应的位置,后面测试连码时也会用到,因此不用重复设置)

例如:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

执行下面命令创建应用通道:

peer channel create -o orderer.example.com:7050 -c testchannel -f ./testchannel.tx  --tls true --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

命令执行成功以后,会在当前目录下生成 应用通道的创世区块testchannel.block 文件,只有使用该文件,才可以加入对应的应用通道。使用 scp命令分发至其他3台 peer 节点虚拟机的 fabric 网络执行环境变量下(/etc/hyperledger/fabric)。以下为例:

scp -r testchannel.block root@172.17.0.233:/etc/hyperledger/fabric/

 

7.加入应用通道

执行命令加入应用通道(4台peer节点都可以执行一遍):

peer channel join -b testchannel.block

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

加入应用通道的peer 节点虚拟机都可以通过终端命令查看加入的通过信息,如图,如果所有peer节点都执行了加入命令,都可以看到如下类似信息:

peer channel list

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

8.更新锚节点配置

执行命令更新负责代表组织与其他节点通信的锚节点(只需要在一台上执行即可):

peer channel update -o orderer.example.com:7050 -c testchannel -f ./Org1MSPanchors.tx --tls true --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

锚节点负责代表组织与其他组织中的节点进行 Gossip 通信。

 

五、测试链码

1.安装链码

设置相应环境变量(根据相应环境修改配置):

如果在四.6步骤中已经修改过配置文件(/etc/profile),则此处不需要重复操作。

 

打包链码,由于这次的例子是基于 go 语言开发的智能合约,会依赖 go 的开发环境进行安装,如果使用 peer chaincode install 命令指定链码路径安装,可能会造成其他虚拟上安装的同样的链码无法同步实例化(go 开发环境不一致引起的问题),所以这里使用 go chaincode package 打包链码,然后通过安装打包链码文件进行链码的安装。

peer chaincode package -n test -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02 -v 1.0 test.pak

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

使用 scp 命令分发 test.pak 文件至其他3台 peer 节点虚拟机的 fabric 网络执行环境变量路径下。例如:

scp -r test.pak root@172.17.0.233:/etc/hyperledger/fabric/

安装链码

peer chaincode install test.pak

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

安装链码的 peer 节点服务器可以通过终端命令查看已安装的链码信息,如图:

peer chaincode -C testchannel list --installed

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

2.初始化链码

初始化链码,只需要在一台 peer 节点的服务器上执行实例化后自动创建链码容器,其他 peer 节点服务器会同步该实例化的链码信息,并创建链码容器(需要启动docker容器:service docker start

peer chaincode instantiate -o orderer.example.com:7050 -C testchannel -n test -v 1.0 -c'{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" --tls true --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

命令执行后对交易用户 a赋值100,交易用户 b 赋值200代币。

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

使用命令查看链码容器信息:docker ps。如图:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

使用命令:

peer chaincode query -n test -C testchannel -c'{"Args":["query","a"]}'

查看用户a(b)初始值:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

3.测试交易

执行命令发送一笔交易,命令 b 向 a 转账 40个代币:

peer chaincode invoke -o orderer.example.com:7050 -C testchannel -n test -c'{"Args":["invoke","b","a","40"]}' --tls ture --cafile /etc/hyperledger/fabric/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

再次查询a、b余额命令与五.2查询命令相同:

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

查询转账命令可以在任意peer节点执行,上面查询在.1.40节点(日志级别debug),下面查询在.0.233节点(日志级别info):

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

 

六、其他

1.git查看远程的所有分支列表

git branch -a

*表示当前使用分支

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP

如果上面命令不加参数(git branch),则为查看本地的git分支

CentOS7中hyperledger-fabric1.1多机部署使用solo共识(手动非docker)-LMLPHP


END

10-07 17:33