美文网首页
Fabric2.0学习进阶——自定义网络部署(三)

Fabric2.0学习进阶——自定义网络部署(三)

作者: 落羽 | 来源:发表于2020-06-23 11:31 被阅读0次

    上一篇文章《Fabric2.0学习进阶——镜像部署网络(二)》
    介绍了如何通过fabric-sample自带的脚本byfn.sh来启动first-network网络。为了弄清楚Fabric网络的启动过程,本节通过二进制可执行程序完成Fabric的自定义启动。

    本节规划Fabric平台由3个order节点,2个组织,4个peer节点组成,每个组织两个peer节点。Fabric2.0的共识机制只支持raft协议,该协议实现的共识必须至少3个节点,节点数最好为奇数。

    本节所有操作均在/usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network目录执行。

    进行后续操作之前,先设置好相关的环境变量。

    export PATH=${PWD}/../bin:${PWD}:$PATH
    export FABRIC_CFG_PATH=${PWD}
    

    3.1 生成证书

    Fabric平台是许可区块链平台,通过数字证书实现平台参与者对平台资源的访问操作权限,使网络具备更高的安全性。

    证书生成需要使用cryptogen工具以及配置文件crypto-config.yaml。根据平台的节点规划,修改(记得备份)crypto-config.yaml如下:

    image

    上图中,Order组织定义了三个节点:orderer,orderer2,orderer3,peer组织包括Org1和Org2两个组织,每个组织包括2个节点,包括Admin用户和1个普通用户。

    配置文件修改完成之后,直接运行如下命令完成order节点、peer节点、管理员和用户的证书生成。

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

    成功执行之后,当前目录下将生成crypto-config目录,目录结构如下图所示:

    image

    3.2 创世区块

    创世区块的生成需要使用configtxgen工具以及配置文件configtx.yaml。根据平台的节点规划,修改(记得备份)内容如下:

    iamge

    将orderer4和orderer5相关的配置注释,因为本文规划的fabric网络只包含3个order节点。

    配置文件修改完成之后,执行如下命令:

    configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
    

    成功执行之后,channel-artifacts目录下将生成创世区块文件genesis.block。

    iamge

    对于创世区块的生成,fabric1.x与fabric2.0有明显的区别,注意上述命令profile参数值。

    3.3 生成通道交易配置文件

    通道交易配置文件的生成,fabric1.x与fabric2.0无明显区别,所使用命令和配置文件与生成创世区块使用的相同。

    执行如下命令,完成通道交易配置文件的创建。

    configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
    

    成功执行之后,channel-artifacts目录下将生成通道交易配置文件channel.tx。

    image

    3.4 生成锚节点配置文件

    锚节点配置文件的生成,fabric1.x与fabric2.0无明显区别,所使用命令和配置文件与生成创世区块使用的相同。

    执行如下命令,完成Org1和Org2两个组织锚节点配置文件的创建。

    # 生成Org1的锚节点配置文件
    configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
    
    # 生成Org2的锚节点配置文件
    configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
    

    成功执行之后,channel-artifacts目录下将生成两个锚节点配置文件Org1MSPanchors.tx和Org2MSPanchors.tx。

    image

    3.5 启动&停止网络

    Fabric网络服务以docker方式启动,涉及命令docker-compose和配置文件docker-compose-cli.yaml、docker-compose-etcdraft2.yaml、docker-compose-ca.yaml。

    本文规划的fabric网络包括10个docker服务:4个peer节点服务,3个order节点服务,2个CA服务,1个cli服务。

    修改配置文件docker-compose-etcdraft2.yaml,注释掉orderer4和orderer5的相关配置。

    image image

    执行如下命令,将启动3个order节点服务,1个cli节点服务,4个peer节点服务和2个CA节点服务。

    # 配置环境变量,CA节点必需
    export BYFN_CA1_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org1.example.com/ca && ls \*_sk)
    export BYFN_CA2_PRIVATE_KEY=$(cd crypto-config/peerOrganizations/org2.example.com/ca && ls \*_sk)
    
    # 根据指定配置文件启动容器服务
    docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml up -d
    

    命令执行日志如下图所示:

    image

    查看运行的docker服务,如下图所示:

    image

    停止网络执行命令:

    docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml  down
    

    Fabric平台所有节点服务均正常启动,3.1节-3.4节生成的配置文件都是为后续的交易操作而准备的,后续的操作均需进入cli容器执行相关命令。

    3.6 创建通道

    通道是Fabric的特性,可以在一个区块链平台上实现业务隔离,从逻辑上实现多链操作。

    创建通道需要先进入cli容器,执行如下命令:

    #连接cli服务
    docker exec -it cli bash
    
    #定义CA文件路径
    ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem    
    
    #创建通道信息
    peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
    
    #将生成的文件移动到channel-artifacts文件夹中
    mv mychannel.block channel-artifacts/
    

    3.7 peer节点加入通道

    上一步我们创建了一个名称为mychannel的通道,但该通道还没有任何peer节点加入,则无法进行交易操作,本节将2个组织的4个节点都加入到mychannel通道。

    通过查看环境变量,当前cli容器使用的org1.peer0的配置。

    image

    按照当前的配置,我们执行如下命令,先将org1.peer0节点加入mychannel通道。

    peer channel join -b channel-artifacts/mychannel.block
    

    执行成功结果如下图所示:

    image

    切换节点,将org1.peer1加入mychannel通道。

    #切换节点org1.peer1
    source scripts/utils.sh
    setGlobals 1 1
    # 将当前节点加入通道
    peer channel join -b channel-artifacts/mychannel.block
    

    参照上述切换节点的方法,将org2组织的两个节点也加入通道。

    #切换节点org2.peer0
    source scripts/utils.sh
    setGlobals 0 2
    # 将当前节点加入通道
    peer channel join -b channel-artifacts/mychannel.block
    
    #切换节点org2.peer1
    setGlobals 1 2
    # 将当前节点加入通道
    peer channel join -b channel-artifacts/mychannel.block
    

    至此,2个组织的4个节点均已加入mychannel通道。

    3.8 更新锚节点

    锚节点是组织内的一种特殊peer节点,通过锚节点可以实现不同组织内节点间的通信。通常每次组织都要设置一个锚节点,下面分别对org1和org2两个组织设置锚节点,本文假设将组织中的peer0节点设置为锚节点。

    #切换到org1.peer0节点
    setGlobals 0 1
    #设置环境变量ORDERER_CA
    ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    #更新设置锚节点
    peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
    
    #切换到org2.peer0节点
    setGlobals 0 2
    #设置环境变量ORDERER_CA
    ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
    #更新设置锚节点
    peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
    

    更新命令执行成功结果如下图所示:

    image

    经过我们的努力,我们手动配置并启动了一个fabric网络,包含3个orderer节点,2个组织4个peer节点,2个ca节点,1个cli节点,1个通道mychannel,后续文章将基于该网络进行链码操作。


    文章作者:xiaohui249
    本文链接:http://javatech.wang/index.php/archives/152/
    版本所有 ©转载时必须以链接形式注明作者和原始出处

    相关文章

      网友评论

          本文标题:Fabric2.0学习进阶——自定义网络部署(三)

          本文链接:https://www.haomeiwen.com/subject/sygcfktx.html