fabric動態(tài)增加orderer節(jié)點(diǎn)(raft)

environment:
mac
Docker version 20.10.8
Docker Compose version v2.0.0-rc.1
fabric v2.0.0

一沥匈、概述

orderer_addnode.jpeg

如上圖捉撮,我們將orderer節(jié)點(diǎn)從5個擴(kuò)展到6個
步驟:

  • 啟動網(wǎng)絡(luò)(raft共識)
  • 準(zhǔn)備orderer6證書
  • 增加orderer6 tls證書到系統(tǒng)通道
  • 獲取最新區(qū)塊作為orderer6的創(chuàng)世區(qū)塊
  • 啟動orderer6節(jié)點(diǎn)容器
  • 增加orderer6節(jié)點(diǎn)信息到系統(tǒng)通道
  • 增加orderer6 tls證書到用戶通道(可選)
  • 增加orderer6節(jié)點(diǎn)信息到用戶通道(可選)

區(qū)塊變化如下圖:


involve_new_config_block.png

腳本執(zhí)行過程如下圖:


create_config_update.png

二寞奸、搭建網(wǎng)絡(luò)

1、下載鏡像以及相關(guān)工具包

https://github.com/hyperledger/fabric/blob/v2.2.0/scripts/bootstrap.sh內(nèi)容copy到剛創(chuàng)建的bootstrap.sh文件里面去
執(zhí)行以下命令:

sh bootstrap.sh

下載完后fabric的環(huán)境安裝完畢

2洛姑、修改crypto-config文件

我們需要把一個orderer節(jié)點(diǎn)擴(kuò)展成5個orderer節(jié)點(diǎn),需要修改的文件路徑為./fabric-samples/test-network/organizations/cryptogen/crypto-config-orderer.yaml
修改的內(nèi)容如下:

OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: example.com
    EnableNodeOUs: true
    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer
        SANS:
          - localhost
      - Hostname: orderer2
        SANS:
          - localhost
      - Hostname: orderer3
        SANS:
          - localhost
      - Hostname: orderer4
        SANS:
          - localhost
      - Hostname: orderer5
        SANS:
          - localhost

3、增加orderer節(jié)點(diǎn)的docker啟動節(jié)點(diǎn)

修改文件路徑為./fabric-samples/test-network/docker/docker-compose-test-net.yaml
請參考:https://github.com/jxu86/fabric-sample-test/blob/master/test-network/docker/docker-compose-test-net.yaml

4揩瞪、修改configtx.yaml

修改文件路徑為./fabric-samples/test-network/configtx/configtx.yaml
請參考:https://github.com/jxu86/fabric-sample-test/blob/master/test-network/configtx/configtx.yaml

5、啟動網(wǎng)絡(luò)

cd ./fabric-samples/test-network
sh network.sh up

啟動成功有以下信息:

[+] Running 9/9
 ? Network net_test                  Created                                                                                                                                                                                             0.1s
 ? Container orderer3.example.com    Started                                                                                                                                                                                             2.7s
 ? Container peer0.org2.example.com  Started                                                                                                                                                                                             3.3s
 ? Container orderer.example.com     Started                                                                                                                                                                                             2.8s
 ? Container orderer5.example.com    Started                                                                                                                                                                                             2.9s
 ? Container peer0.org1.example.com  Started                                                                                                                                                                                             3.6s
 ? Container orderer4.example.com    Started                                                                                                                                                                                             3.2s
 ? Container orderer2.example.com    Started                                                                                                                                                                                             2.9s
 ? Container cli                     Started                                                                                                                                                                                             4.3s
CONTAINER ID   IMAGE          COMMAND             CREATED         STATUS                  PORTS                                                 NAMES
839b297480e3   5eb2356665e7   "/bin/bash"         5 seconds ago   Up Less than a second                                                         cli
1da95678635b   760f304a3282   "peer node start"   5 seconds ago   Up 1 second             7051/tcp, 0.0.0.0:9051->9051/tcp, :::9051->9051/tcp   peer0.org2.example.com
0d89ebba2fb5   5fb8e97da88d   "orderer"           5 seconds ago   Up 2 seconds            0.0.0.0:8050->7050/tcp, :::8050->7050/tcp             orderer2.example.com
a86d6691a134   5fb8e97da88d   "orderer"           5 seconds ago   Up 2 seconds            0.0.0.0:9050->7050/tcp, :::9050->7050/tcp             orderer3.example.com
8dc263b51abd   760f304a3282   "peer node start"   5 seconds ago   Up 1 second             0.0.0.0:7051->7051/tcp, :::7051->7051/tcp             peer0.org1.example.com
2a3afac8c33e   5fb8e97da88d   "orderer"           5 seconds ago   Up 2 seconds            0.0.0.0:11050->7050/tcp, :::11050->7050/tcp           orderer5.example.com
0efa0704e13d   5fb8e97da88d   "orderer"           5 seconds ago   Up 1 second             0.0.0.0:10050->7050/tcp, :::10050->7050/tcp           orderer4.example.com
16d01d73e1b3   5fb8e97da88d   "orderer"           5 seconds ago   Up 2 seconds            0.0.0.0:7050->7050/tcp, :::7050->7050/tcp             orderer.example.com

6篓冲、安裝通道

sh network.sh createChannel

三李破、在現(xiàn)有運(yùn)行的網(wǎng)絡(luò)增加orderer節(jié)點(diǎn)

1、生成orderer6證書

修改./fabric-samples/test-network/organizations/cryptogen/crypto-config-orderer.yaml增加orderer6
執(zhí)行以下命令

cryptogen extend --config=./organizations/cryptogen/crypto-config-orderer.yaml --input ./organizations

2壹将、啟動orderer-cli的docker

創(chuàng)建fabric-samples/test-network/docker/docker-compose-orderer-cli.yaml文件嗤攻,內(nèi)容如下:

version: '2'

networks:
  test:

services:

  orderer-cli:
    container_name: orderer-cli
    image: hyperledger/fabric-tools:$IMAGE_TAG
    tty: true
    stdin_open: true
    environment:
      - SYS_CHANNEL=$SYS_CHANNEL
      - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      #- FABRIC_LOGGING_SPEC=DEBUG
      - FABRIC_LOGGING_SPEC=INFO
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=OrdererMSP
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/users/Admin@example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash
    volumes:
        - /var/run/:/host/var/run/
        - ../organizations:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ../scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
    networks:
      - test

啟動orderer-cli容器

docker-compose -f docker/docker-compost-orderer-cli.yaml up -d

3、系統(tǒng)通道增加orderer6 tls信息

創(chuàng)建fabric-samples/test-network/addOrdererNode/add_tls_sysCh.sh文件诽俯,內(nèi)容為

TLS_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer6.example.com/tls/server.crt
docker exec orderer-cli sh -c 'peer channel fetch config config_block.pb -o orderer.example.com:7050 -c system-channel --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem'
docker exec orderer-cli sh -c 'configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json'
docker exec -e TLS_FILE=$TLS_FILE orderer-cli sh -c 'echo "{\"client_tls_cert\":\"$(cat $TLS_FILE | base64)\",\"host\":\"orderer6.example.com\",\"port\":10050,\"server_tls_cert\":\"$(cat $TLS_FILE | base64)\"}" > $PWD/org6consenter.json'
docker exec orderer-cli sh -c 'jq ".channel_group.groups.Orderer.values.ConsensusType.value.metadata.consenters += [$(cat org6consenter.json)]" config.json > modified_config.json'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input config.json --type common.Config --output config.pb'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb'
docker exec orderer-cli sh -c 'configtxlator compute_update --channel_id system-channel --original config.pb --updated modified_config.pb --output config_update.pb'
docker exec orderer-cli sh -c 'configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json'
docker exec orderer-cli sh -c 'echo "{\"payload\":{\"header\":{\"channel_header\":{\"channel_id\":\"system-channel\", \"type\":2}},\"data\":{\"config_update\":"$(cat config_update.json)"}}}" | jq . > config_update_in_envelope.json'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb'
docker exec orderer-cli sh -c 'peer channel update -f config_update_in_envelope.pb -c system-channel -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem'

docker exec orderer-cli sh -c 'peer channel fetch config latest_config.block -o orderer.example.com:7050 -c system-channel --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem'
docker cp orderer-cli:/opt/gopath/src/github.com/hyperledger/fabric/peer/latest_config.block ./system-genesis-block/latest_config.block

運(yùn)行腳本

sh addOrdererNode/add_tls_sysCh.sh

4屯曹、啟動orderer6的docker節(jié)點(diǎn)

創(chuàng)建fabric-samples/test-network/docker/docker-compose-orderer6.yaml文件,內(nèi)容如下:

networks:
  test:

services:

  orderer6.example.com:
    container_name: orderer6.example.com
    image: hyperledger/fabric-orderer:$IMAGE_TAG
    environment:
      - FABRIC_LOGGING_SPEC=INFO
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=12050
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      # enabled TLS
      - ORDERER_GENERAL_TLS_ENABLED=true
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
      - ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
      - ORDERER_KAFKA_VERBOSE=true
      - ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
        - ../system-genesis-block/latest_config.block:/var/hyperledger/orderer/orderer.genesis.block
        - ../organizations/ordererOrganizations/example.com/orderers/orderer6.example.com/msp:/var/hyperledger/orderer/msp
        - ../organizations/ordererOrganizations/example.com/orderers/orderer6.example.com/tls/:/var/hyperledger/orderer/tls
        - ../data/orderer6.example.com:/var/hyperledger/production/orderer
    ports:
      - 12050:7050
    networks:
      - test

啟動節(jié)點(diǎn)命令

docker-compose -f docker/docker-compose-orderer6.yaml up -d

5惊畏、系統(tǒng)通道增加節(jié)信息

創(chuàng)建fabric-samples/test-network/addOrdererNode/add_ep_sysCh.sh文件恶耽,內(nèi)容為

docker exec orderer-cli sh -c 'peer channel fetch config config_block.pb -o orderer.example.com:7050 -c system-channel --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem'
docker exec orderer-cli sh -c 'configtxlator proto_decode --input config_block.pb --type common.Block | jq .data.data[0].payload.data.config > config.json'
docker exec orderer-cli sh -c 'jq ".channel_group.values.OrdererAddresses.value.addresses += [\"orderer6.example.com:12050\"]" config.json > modified_config.json'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input config.json --type common.Config --output config.pb'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb'
docker exec orderer-cli sh -c 'configtxlator compute_update --channel_id system-channel --original config.pb --updated modified_config.pb --output config_update.pb'
docker exec orderer-cli sh -c 'configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json'
docker exec orderer-cli sh -c 'echo "{\"payload\":{\"header\":{\"channel_header\":{\"channel_id\":\"system-channel\", \"type\":2}},\"data\":{\"config_update\":"$(cat config_update.json)"}}}" | jq . > config_update_in_envelope.json'
docker exec orderer-cli sh -c 'configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb'
docker exec orderer-cli sh -c 'peer channel update -f config_update_in_envelope.pb -c system-channel -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem'

執(zhí)行腳本

sh addOrdererNode/add_ep_sysCh.sh

最后對比orderer6和orderer的區(qū)塊文件是一樣大小,怎么添加orderer6成功了

?  test-network git:(master) ? ll data/orderer6.example.com/chains/system-channel/blockfile_000000
-rw-r-----  1 jc  staff   106K Sep  2 15:34 data/orderer6.example.com/chains/system-channel/blockfile_000000
?  test-network git:(master) ? ll data/orderer.example.com/chains/system-channel/blockfile_000000
-rw-r-----  1 jc  staff   106K Sep  2 15:27 data/orderer.example.com/chains/system-channel/blockfile_000000

6颜启、orderer6添加應(yīng)用通道

添加已有的用戶通道系統(tǒng)通道的步驟是一樣的偷俭,也是要增加orderer6 tls信息和增加節(jié)信息
具體參考:
https://github.com/jxu86/fabric-sample-test/blob/master/test-network/addOrdererNode/add_tls_appCh.sh
https://github.com/jxu86/fabric-sample-test/blob/master/test-network/addOrdererNode/add_ep_appCh.sh

代碼請參考:https://github.com/jxu86/fabric-sample-test

文章github地址

參考:
配置并使用 Raft 排序服務(wù)
Add an Orderer to a Running Raft-based Orderer Cluster

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缰盏,隨后出現(xiàn)的幾起案子涌萤,更是在濱河造成了極大的恐慌淹遵,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件负溪,死亡現(xiàn)場離奇詭異透揣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)川抡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門辐真,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人崖堤,你說我怎么就攤上這事侍咱。” “怎么了密幔?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵楔脯,是天一觀的道長。 經(jīng)常有香客問我胯甩,道長昧廷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任偎箫,我火速辦了婚禮麸粮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘弄诲。我一直安慰自己齐遵,他們只是感情好梗摇,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布想许。 她就那樣靜靜地躺著伶授,像睡著了一般糜烹。 火紅的嫁衣襯著肌膚如雪疮蹦。 梳的紋絲不亂的頭發(fā)上愕乎,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天感论,我揣著相機(jī)與錄音比肄,去河邊找鬼薪前。 笑死示括,一個胖子當(dāng)著我的面吹牛垛膝,可吹牛的內(nèi)容都是我干的丁稀。 我是一名探鬼主播线衫,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼枯跑,長吁一口氣:“原來是場噩夢啊……” “哼敛助!你這毒婦竟也來了纳击?” 一聲冷哼從身側(cè)響起焕数,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤百匆,失蹤者是張志新(化名)和其女友劉穎加匈,沒想到半個月后雕拼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啥寇,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡衰絮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淌友。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片震庭。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖拨拓,靈堂內(nèi)的尸體忽然破棺而出千元,到底是詐尸還是另有隱情幸海,我是刑警寧澤物独,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站官研,受9級特大地震影響担神,放射性物質(zhì)發(fā)生泄漏妄讯。R本人自食惡果不足惜亥贸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垦沉。 院中可真熱鬧寡壮,春花似錦况既、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耸三,卻和暖如春乱陡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背憨颠。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工适篙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铆铆,地道東北人碍论。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓藏研,卻偏偏與公主長得像敬矩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蠢挡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容