关于区块链:Hyperledger-Fabric节点的动态添加和删除

87次阅读

共计 4628 个字符,预计需要花费 12 分钟才能阅读完成。

前言

在 Hyperledger Fabric 组织的动静增加和删除中,咱们曾经实现了在运行着的网络中动静增加和删除组织。本文将在其根底上,具体介绍了如何在 soft 组织上增加新的 peer2 节点,并在简要概述了删除节点的办法,本试验必要的筹备工作和 DNS 配置请参考 筹备工作。

背景介绍

试验筹备

本文网络结构间接应用 Hyperledger Fabric 组织的增加和删除 中创立的 2_FabricNetworkUpdate(倡议间接将本案例仓库 FabricLearn 下的 2_FabricNetworkUpdate 目录拷贝到本地运行)。默认状况下,所有命令皆在 2_FabricNetworkUpdate 根目录下执行,在开始前面的试验前依照以下命令启动根底试验网络:

  1. 设置环境变量 source envpeer1soft
  2. 启动 CA 网络 ./0_Restart.sh
  3. 注册用户 ./1_RegisterUser.sh
  4. 结构证书 ./2_EnrollUser.sh
  5. 配置通道 ./3_Configtxgen.sh
  6. 装置测试链码 ./4_TestChaincode.sh

本试验初始 docker 网络为:

本试验初始区块高度为 6:

本文工作

向 Hyperledger Fabric 网络中的 soft 组织动静增加一个节点 peer2,网络结构为(试验代码已上传至:https://github.com/wefantasy/FabricLearn 的 2_FabricNetworkUpdate/7_AddPeer.sh 下)1

运行端口 阐明
council.ifantasy.net 7050 council 组织的 CA 服务,为联盟链网络提供 TLS-CA 服务
orderer.ifantasy.net 7150 orderer 组织的 CA 服务,为联盟链网络提供排序服务
orderer1.orderer.ifantasy.net 7151 orderer 组织的 orderer1 成员节点
soft.ifantasy.net 7250 soft 组织的 CA 服务,蕴含成员:peer1、admin1
peer1.soft.ifantasy.net 7251 soft 组织的 peer1 成员节点
peer2.soft.ifantasy.net 7252 soft 组织的 peer2 成员节点
web.ifantasy.net 7350 web 组织的 CA 服务,蕴含成员:peer1、admin1
peer1.web.ifantasy.net 7351 web 组织的 peer1 成员节点

增加新节点

生成 peer2 的组织证书

因为 peer2 属于 soft 组织,所以其证书间接应用已有的 CA 服务器即可生成。

  1. 生成 TLS-CA 证书:

    export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/council.ifantasy.net/ca/crypto/ca-cert.pem
    export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/council.ifantasy.net/ca/admin
    fabric-ca-client register -d --id.name peer2soft --id.secret peer2soft --id.type peer -u https://council.ifantasy.net:7050
  2. 生成 CA 证书:

    export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/ca/crypto/ca-cert.pem
    export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/ca/admin
    fabric-ca-client register -d --id.name peer2 --id.secret peer2 --id.type peer -u https://soft.ifantasy.net:7250
  3. 结构证书目录:

    echo "Enroll Peer2"
    export FABRIC_CA_CLIENT_HOME=$LOCAL_CA_PATH/soft.ifantasy.net/registers/peer2
    export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/ca-cert.pem
    export FABRIC_CA_CLIENT_MSPDIR=msp
    fabric-ca-client enroll -d -u https://peer2:peer2@soft.ifantasy.net:7250
    # for TLS
    export FABRIC_CA_CLIENT_MSPDIR=tls-msp
    export FABRIC_CA_CLIENT_TLS_CERTFILES=$LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem
    fabric-ca-client enroll -d -u https://peer2soft:peer2soft@council.ifantasy.net:7050 --enrollment.profile tls --csr.hosts peer2.soft.ifantasy.net
    cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer2/tls-msp/keystore/*_sk $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer2/tls-msp/keystore/key.pem
    mkdir -p $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer2/msp/admincerts
    cp $LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp/signcerts/cert.pem $LOCAL_CA_PATH/soft.ifantasy.net/registers/peer2/msp/admincerts/cert.pem

    配置 peer2 的容器及环境变量

  4. compose 目录下新建 update-peer.yaml 文件,内容如下:

    version: '2'
    
    networks:
      network:
    
    services:
      peer2.soft.ifantasy.net:
     container_name: peer2.soft.ifantasy.net
     extends:
       file: docker-base.yaml
       service: peer-base
     environment:
       - CORE_PEER_ID=peer2.soft.ifantasy.net
       - CORE_PEER_ADDRESS=peer2.soft.ifantasy.net:7051
       - CORE_PEER_LOCALMSPID=softMSP
       - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer2.soft.ifantasy.net:7051
     volumes:
       - ${LOCAL_CA_PATH}/soft.ifantasy.net/registers/peer2:${DOCKER_CA_PATH}/peer
     ports:
       - 7252:7051
  5. 启动 peer2 容器:

    docker-compose -f $LOCAL_ROOT_PATH/compose/update-peer.yaml up -d peer2.soft.ifantasy.net

    此时能够应用 docker ps 命令看到 peer2 容器胜利运行:

  6. 增加 peer2 的 DNS 解析记录到本机:

    echo "127.0.0.1       peer2.soft.ifantasy.net" >> /etc/hosts
  7. 将 peer1 的环境变量文件 envpeer1soft 复制一份到 envpeer2soft,其内容为:

    export LOCAL_ROOT_PATH=$PWD
    export LOCAL_CA_PATH=$LOCAL_ROOT_PATH/orgs
    export DOCKER_CA_PATH=/tmp
    export COMPOSE_PROJECT_NAME=fabriclearn
    export DOCKER_NETWORKS=network
    export FABRIC_BASE_VERSION=2.4
    export FABRIC_CA_VERSION=1.5
    echo "init terminal soft"
    export FABRIC_CFG_PATH=$LOCAL_ROOT_PATH/config
    export CORE_PEER_TLS_ENABLED=true
    export CORE_PEER_LOCALMSPID="softMSP"
    export CORE_PEER_ADDRESS=peer2.soft.ifantasy.net:7252
    export CORE_PEER_TLS_ROOTCERT_FILE=$LOCAL_CA_PATH/soft.ifantasy.net/assets/tls-ca-cert.pem
    export CORE_PEER_MSPCONFIGPATH=$LOCAL_CA_PATH/soft.ifantasy.net/registers/admin1/msp
    export ORDERER_CA=$LOCAL_CA_PATH/orderer.ifantasy.net/registers/orderer1/tls-msp/tlscacerts/tls-council-ifantasy-net-7050.pem

    peer2 退出通道

  8. 拉取通道创世区块:

    peer channel fetch 0 mychannel.block -o orderer1.orderer.ifantasy.net:7151 -c mychannel --tls --cafile $ORDERER_CA

    因为 peer2 还没有 mychannel 通道的拜访权限,所以目前为止咱们都是应用 peer1 的环境变量进行操作,前面退出通道后能够应用 peer2 的环境变量。

  9. peer2 退出通道:

    source envpeer2soft
    peer channel fetch 0 mychannel.block -o orderer1.orderer.ifantasy.net:7151 -c mychannel --tls --cafile $ORDERER_CA

    此时 peer2 曾经退出通道,然而其区块高度仍为 0:

  10. peer2 装置链码:

    peer lifecycle chaincode install basic.tar.gz

    当初 peer2 的区块高度已更新到最新的 6:

    删除旧节点

    或者是删除旧节点不合乎区块链的设计思维,因而官网并没有提供办法来移除曾经退出通道的 peer 节点,然而在理论应用中,咱们能够间接通过停用 peer 容器来移除 peer 节点 2

参考

<!– 1: 作者. 文章题目. 发表地. [发表或更新日期] –>


  1. zcc0721. Fabric 向现有组织中增加新节点. 2021-01-14. [CSDN] ↩
  2. Alessandro Sorniotti. How to remove peer from a channel. 2018-11-14. [CSDN] ↩

正文完
 0