Fabric中動態(tài)添加節(jié)點(peer)

前言

? 在實際項目中,因為項目的需求變動,一般都會對fabric網(wǎng)絡做一個修改,最常見的變動就是在現(xiàn)有的Fabric網(wǎng)絡中增加一個節(jié)點,現(xiàn)在以之前搭建的fabric網(wǎng)絡(版本1.1),balance-transfer為例做個介紹,整個過程其實也很簡單,生成節(jié)點證書,增加新節(jié)點的docker配置文件并啟動相應的服務,然后將新節(jié)點加到現(xiàn)有的channel當中,并在節(jié)點上安裝智能合約(Chaincode),下午詳情講一下具體的操作步驟。

1、修改crypto-config.yaml文件并生成對應的節(jié)點證書。

首先我們確認我們需要在Org2里增加節(jié)點,那么我們在crypto-config.yaml文件里找到對應Org2的配置,把Template字段里的count參數(shù)修改成2,意思就是在此組織下生成兩個節(jié)點,配置文件如下

- Name: Org2
    Domain: org2.xuyao.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

修改好配置文件后,我們現(xiàn)在使用cryptogen來生成證書,在在artifacts/channel目錄下執(zhí)行:

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

這樣我們就為新節(jié)點生成了證書,可以到Org2相應的目錄上查看,發(fā)現(xiàn)已經(jīng)新生成了一個節(jié)點,加上之前那個,一共有兩個節(jié)點。

peer0.org2.mbasechain.com peer1.org2.mbasechain.com

2、配置docker-compose文件并啟動節(jié)點容器

接下來我們需要新增一個doceker-compose有配置文件,用來啟動一個新節(jié)點容器,我們將新節(jié)點的配置文件全名為:Org2Peer1.yaml

version: '2'

services:

  couchdb:
    container_name: couchdb
    image: hyperledger/fabric-couchdb:latest
    ports:
      - "5984:5984"

  peer1.org1.xuyao.com:
    container_name: peer1.org1.xuyao.com
    image: hyperledger/fabric-peer:latest
    environment:
      - CORE_PEER_ID=peer1.org1.xuyao.com
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_ADDRESS=peer1.org1.xuyao.com:7051
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
      - CORE_LOGGING_LEVEL=debug
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - GODEBUG=netdns=go
      # The following setting skips the gossip handshake since we are
      # are not doing mutual TLS
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
      - 7051:7051
      - 7053:7053
    volumes:
        - /var/run/:/host/var/run/
        - ./channel/crypto-config/peerOrganizations/org1.mbasechain.com/peers/peer0.org1.xuyao.com/:/etc/hyperledger/crypto/peer
        - ../mount/peer0.org1.xuyao.com/var/hyperledger/production:/var/hyperledger/production
    depends_on:
        - couchdb

這個配置文件跟之前的peer節(jié)點的配置一樣,只要改下相應的參數(shù)即可,接下來我們就來啟動這個節(jié)點。

docker-compose -f Org2Peer1.yaml up -d

啟動過程也和之前的一樣。

3、修改network-config.json配置文件

啟動節(jié)點后,我們需要配置network-config.json,讓應用與節(jié)點之前通信,在peers那塊增加一個通訊節(jié)點就可以

peer1.org2.xuyao.com:
    url: grpcs://127.0.0.1:10051
    eventUrl: grpcs://127.0.0.1:10053
    grpcOptions:
      ssl-target-name-override: peer1.org2.xuyao.com
    tlsCACerts:
      path: artifacts/channel/crypto-config/peerOrganizations/org4.mbasechain.com/peers/peer1.org2.xuyao.com/tls/ca.crt

修改配置后,我們啟動balance-transfer,運行runApp.sh,將項目跑起來。

4、將新節(jié)點加入到所需的Channel中

接下來我們需要將新節(jié)點加到某個Channel里,首先我們通過注冊接口,在Org2里拿到用戶的Token,再拿此Token請求中入Channel接口

curl -s -X POST \
  http://localhost:4000/channels/mychannel/peers \
  -H "authorization: Bearer $ORG2_TOKEN" \
  -H "content-type: application/json" \
  -d '{
    "peers": ["peer1.org2.xuyao.com"]
}'

5、安裝Chaincode

加入channel后,peer3已經(jīng)可以參與記賬,但是不能指定該節(jié)點進行查詢或交易,這時候需要發(fā)起請求安裝chaincode:

curl -s -X POST \
    http://localhost:$PORT/chaincodes \
    -H "authorization: Bearer $ORG1_TOKEN" \
    -H "content-type: application/json" \
    -d '{
    "peers": ["peer1.org2.xuyao.com"],
    "chaincodeName":"mycc",
    "chaincodePath":"github.com/example_cc",
    "chaincodeVersion":"v0"
  }'

安裝成功后指定新節(jié)點進行查詢或交易操作,會自動生成該節(jié)點的chaincode鏡像,并啟動容器運行chaincode。在已有組織中新加節(jié)點的操作到這里就全部完成了!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容