Hyperledger Fabric節點的動態新增和刪除

丿風色幻想發表於2022-04-10

前言

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 網路為:
初始 docker 網路

本實驗初始區塊高度為6:
驗初始區塊高度

本文工作

向 Hyperledger Fabric 網路中的 soft 組織動態新增一個節點 peer2 ,網路結構為(實驗程式碼已上傳至:https://github.com/wefantasy/FabricLearn2_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
  1. 生成 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
  1. 構造證書目錄:
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的容器及環境變數

  1. 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
  1. 啟動 peer2 容器:
docker-compose -f $LOCAL_ROOT_PATH/compose/update-peer.yaml up -d peer2.soft.ifantasy.net

此時可以使用 docker ps 命令看到 peer2 容器成功執行:
啟動 peer2 容器
3. 新增 peer2 的 DNS 解析記錄到本機:

echo "127.0.0.1       peer2.soft.ifantasy.net" >> /etc/hosts
  1. 將 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加入通道

  1. 拉取通道創世區塊:
peer channel fetch 0 mychannel.block -o orderer1.orderer.ifantasy.net:7151 -c mychannel --tls --cafile $ORDERER_CA

由於 peer2 還沒有 mychannel 通道的訪問許可權,所以目前為止我們都是使用 peer1 的環境變數進行操作,後面加入通道後可以使用 peer2 的環境變數。

  1. peer2 加入通道:
source envpeer2soft
peer channel fetch 0 mychannel.block -o orderer1.orderer.ifantasy.net:7151 -c mychannel --tls --cafile $ORDERER_CA

此時 peer2 已經加入通道,但是其區塊高度仍為0:
peer2 區塊高度

  1. peer2 安裝鏈碼:
peer lifecycle chaincode install basic.tar.gz

現在 peer2 的區塊高度已更新到最新的6:
peer2 區塊高度2

刪除舊節點

或許是刪除舊節點不符合區塊鏈的設計思想,因此官方並沒有提供方法來移除已經加入通道的 peer 節點,但是在實際使用中,我們可以直接通過停用 peer 容器來移除 peer 節點[2]

參考


  1. zcc0721. Fabric向現有組織中新增新節點. 2021-01-14. [CSDN] ↩︎

  2. Alessandro Sorniotti. How to remove peer from a channel. 2018-11-14. [CSDN] ↩︎

相關文章