上一篇文章《Fabric2.0學習進階——鏡像部署網絡(二)》介紹瞭如何經過fabric-sample自帶的腳本byfn.sh來啓動first-network網絡。爲了弄清楚Fabric網絡的啓動過程,本節經過二進制可執行程序完成Fabric的自定義啓動。php
本節規劃Fabric平臺由3個order節點,2個組織,4個peer節點組成,每一個組織兩個peer節點。Fabric2.0的共識機制只支持raft協議,該協議實現的共識必須至少3個節點,節點數最好爲奇數。java
本節全部操做均在/usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network目錄執行。git
進行後續操做以前,先設置好相關的環境變量。github
export PATH=${PWD}/../bin:${PWD}:$PATH export FABRIC_CFG_PATH=${PWD}
Fabric平臺是許可區塊鏈平臺,經過數字證書實現平臺參與者對平臺資源的訪問操做權限,使網絡具有更高的安全性。docker
證書生成須要使用cryptogen工具以及配置文件crypto-config.yaml。根據平臺的節點規劃,修改(記得備份)crypto-config.yaml以下:安全
上圖中,Order組織定義了三個節點:orderer,orderer2,orderer3,peer組織包括Org1和Org2兩個組織,每一個組織包括2個節點,包括Admin用戶和1個普通用戶。bash
配置文件修改完成以後,直接運行以下命令完成order節點、peer節點、管理員和用戶的證書生成。網絡
cryptogen generate --config=./crypto-config.yaml
成功執行以後,當前目錄下將生成crypto-config目錄,目錄結構以下圖所示:工具
創世區塊的生成須要使用configtxgen工具以及配置文件configtx.yaml。根據平臺的節點規劃,修改(記得備份)內容以下:學習
將orderer4和orderer5相關的配置註釋,由於本文規劃的fabric網絡只包含3個order節點。
配置文件修改完成以後,執行以下命令:
configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
成功執行以後,channel-artifacts目錄下將生成創世區塊文件genesis.block。
對於創世區塊的生成,fabric1.x與fabric2.0有明顯的區別,注意上述命令profile參數值。
通道交易配置文件的生成,fabric1.x與fabric2.0無明顯區別,所使用命令和配置文件與生成創世區塊使用的相同。
執行以下命令,完成通道交易配置文件的建立。
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
成功執行以後,channel-artifacts目錄下將生成通道交易配置文件channel.tx。
錨節點配置文件的生成,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。
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的相關配置。
執行以下命令,將啓動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
命令執行日誌以下圖所示:
查看運行的docker服務,以下圖所示:
中止網絡執行命令:
docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml down
Fabric平臺全部節點服務均正常啓動,3.1節-3.4節生成的配置文件都是爲後續的交易操做而準備的,後續的操做均需進入cli容器執行相關命令。
通道是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/
上一步咱們建立了一個名稱爲mychannel的通道,但該通道尚未任何peer節點加入,則沒法進行交易操做,本節將2個組織的4個節點都加入到mychannel通道。
經過查看環境變量,當前cli容器使用的org1.peer0的配置。
按照當前的配置,咱們執行以下命令,先將org1.peer0節點加入mychannel通道。
peer channel join -b channel-artifacts/mychannel.block
執行成功結果以下圖所示:
切換節點,將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通道。
錨節點是組織內的一種特殊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
更新命令執行成功結果以下圖所示:
通過咱們的努力,咱們手動配置並啓動了一個fabric網絡,包含3個orderer節點,2個組織4個peer節點,2個ca節點,1個cli節點,1個通道mychannel,後續文章將基於該網絡進行鏈碼操做。
文章做者:xiaohui249
本文連接:http://javatech.wang/index.ph...版本全部 ©轉載時必須以連接形式註明做者和原始出處