Fabric2.0學(xué)習(xí)進(jìn)階——自定義網(wǎng)絡(luò)部署(三)

上一篇文章《Fabric2.0學(xué)習(xí)進(jìn)階——鏡像部署網(wǎng)絡(luò)(二)》
介紹了如何通過(guò)fabric-sample自帶的腳本byfn.sh來(lái)啟動(dòng)first-network網(wǎng)絡(luò)。為了弄清楚Fabric網(wǎng)絡(luò)的啟動(dòng)過(guò)程,本節(jié)通過(guò)二進(jìn)制可執(zhí)行程序完成Fabric的自定義啟動(dòng)。

本節(jié)規(guī)劃Fabric平臺(tái)由3個(gè)order節(jié)點(diǎn),2個(gè)組織,4個(gè)peer節(jié)點(diǎn)組成,每個(gè)組織兩個(gè)peer節(jié)點(diǎn)。Fabric2.0的共識(shí)機(jī)制只支持raft協(xié)議,該協(xié)議實(shí)現(xiàn)的共識(shí)必須至少3個(gè)節(jié)點(diǎn),節(jié)點(diǎn)數(shù)最好為奇數(shù)。

本節(jié)所有操作均在/usr/local/src/hyperleger/fabric/scripts/fabric-samples/first-network目錄執(zhí)行。

進(jìn)行后續(xù)操作之前,先設(shè)置好相關(guān)的環(huán)境變量。

export PATH=${PWD}/../bin:${PWD}:$PATH
export FABRIC_CFG_PATH=${PWD}

3.1 生成證書

Fabric平臺(tái)是許可區(qū)塊鏈平臺(tái),通過(guò)數(shù)字證書實(shí)現(xiàn)平臺(tái)參與者對(duì)平臺(tái)資源的訪問(wèn)操作權(quán)限,使網(wǎng)絡(luò)具備更高的安全性。

證書生成需要使用cryptogen工具以及配置文件crypto-config.yaml。根據(jù)平臺(tái)的節(jié)點(diǎn)規(guī)劃,修改(記得備份)crypto-config.yaml如下:

image

上圖中,Order組織定義了三個(gè)節(jié)點(diǎn):orderer,orderer2,orderer3,peer組織包括Org1和Org2兩個(gè)組織,每個(gè)組織包括2個(gè)節(jié)點(diǎn),包括Admin用戶和1個(gè)普通用戶。

配置文件修改完成之后,直接運(yùn)行如下命令完成order節(jié)點(diǎn)、peer節(jié)點(diǎn)、管理員和用戶的證書生成。

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

成功執(zhí)行之后,當(dāng)前目錄下將生成crypto-config目錄,目錄結(jié)構(gòu)如下圖所示:

image

3.2 創(chuàng)世區(qū)塊

創(chuàng)世區(qū)塊的生成需要使用configtxgen工具以及配置文件configtx.yaml。根據(jù)平臺(tái)的節(jié)點(diǎn)規(guī)劃,修改(記得備份)內(nèi)容如下:

iamge

將orderer4和orderer5相關(guān)的配置注釋,因?yàn)楸疚囊?guī)劃的fabric網(wǎng)絡(luò)只包含3個(gè)order節(jié)點(diǎn)。

配置文件修改完成之后,執(zhí)行如下命令:

configtxgen -profile SampleMultiNodeEtcdRaft -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block

成功執(zhí)行之后,channel-artifacts目錄下將生成創(chuàng)世區(qū)塊文件genesis.block。

iamge

對(duì)于創(chuàng)世區(qū)塊的生成,fabric1.x與fabric2.0有明顯的區(qū)別,注意上述命令profile參數(shù)值。

3.3 生成通道交易配置文件

通道交易配置文件的生成,fabric1.x與fabric2.0無(wú)明顯區(qū)別,所使用命令和配置文件與生成創(chuàng)世區(qū)塊使用的相同。

執(zhí)行如下命令,完成通道交易配置文件的創(chuàng)建。

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel

成功執(zhí)行之后,channel-artifacts目錄下將生成通道交易配置文件channel.tx。

image

3.4 生成錨節(jié)點(diǎn)配置文件

錨節(jié)點(diǎn)配置文件的生成,fabric1.x與fabric2.0無(wú)明顯區(qū)別,所使用命令和配置文件與生成創(chuàng)世區(qū)塊使用的相同。

執(zhí)行如下命令,完成Org1和Org2兩個(gè)組織錨節(jié)點(diǎn)配置文件的創(chuàng)建。

# 生成Org1的錨節(jié)點(diǎn)配置文件
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP

# 生成Org2的錨節(jié)點(diǎn)配置文件
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP

成功執(zhí)行之后,channel-artifacts目錄下將生成兩個(gè)錨節(jié)點(diǎn)配置文件Org1MSPanchors.tx和Org2MSPanchors.tx。

image

3.5 啟動(dòng)&停止網(wǎng)絡(luò)

Fabric網(wǎng)絡(luò)服務(wù)以docker方式啟動(dòng),涉及命令docker-compose和配置文件docker-compose-cli.yaml、docker-compose-etcdraft2.yaml、docker-compose-ca.yaml。

本文規(guī)劃的fabric網(wǎng)絡(luò)包括10個(gè)docker服務(wù):4個(gè)peer節(jié)點(diǎn)服務(wù),3個(gè)order節(jié)點(diǎn)服務(wù),2個(gè)CA服務(wù),1個(gè)cli服務(wù)。

修改配置文件docker-compose-etcdraft2.yaml,注釋掉orderer4和orderer5的相關(guān)配置。

image
image

執(zhí)行如下命令,將啟動(dòng)3個(gè)order節(jié)點(diǎn)服務(wù),1個(gè)cli節(jié)點(diǎn)服務(wù),4個(gè)peer節(jié)點(diǎn)服務(wù)和2個(gè)CA節(jié)點(diǎn)服務(wù)。

# 配置環(huán)境變量,CA節(jié)點(diǎn)必需
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)

# 根據(jù)指定配置文件啟動(dòng)容器服務(wù)
docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml up -d

命令執(zhí)行日志如下圖所示:

image

查看運(yùn)行的docker服務(wù),如下圖所示:

image

停止網(wǎng)絡(luò)執(zhí)行命令:

docker-compose -f docker-compose-cli.yaml -f docker-compose-etcdraft2.yaml -f docker-compose-ca.yaml  down

Fabric平臺(tái)所有節(jié)點(diǎn)服務(wù)均正常啟動(dòng),3.1節(jié)-3.4節(jié)生成的配置文件都是為后續(xù)的交易操作而準(zhǔn)備的,后續(xù)的操作均需進(jìn)入cli容器執(zhí)行相關(guān)命令。

3.6 創(chuàng)建通道

通道是Fabric的特性,可以在一個(gè)區(qū)塊鏈平臺(tái)上實(shí)現(xiàn)業(yè)務(wù)隔離,從邏輯上實(shí)現(xiàn)多鏈操作。

創(chuàng)建通道需要先進(jìn)入cli容器,執(zhí)行如下命令:

#連接cli服務(wù)
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    

#創(chuàng)建通道信息
peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA

#將生成的文件移動(dòng)到channel-artifacts文件夾中
mv mychannel.block channel-artifacts/

3.7 peer節(jié)點(diǎn)加入通道

上一步我們創(chuàng)建了一個(gè)名稱為mychannel的通道,但該通道還沒(méi)有任何peer節(jié)點(diǎn)加入,則無(wú)法進(jìn)行交易操作,本節(jié)將2個(gè)組織的4個(gè)節(jié)點(diǎn)都加入到mychannel通道。

通過(guò)查看環(huán)境變量,當(dāng)前cli容器使用的org1.peer0的配置。

image

按照當(dāng)前的配置,我們執(zhí)行如下命令,先將org1.peer0節(jié)點(diǎn)加入mychannel通道。

peer channel join -b channel-artifacts/mychannel.block

執(zhí)行成功結(jié)果如下圖所示:

image

切換節(jié)點(diǎn),將org1.peer1加入mychannel通道。

#切換節(jié)點(diǎn)org1.peer1
source scripts/utils.sh
setGlobals 1 1
# 將當(dāng)前節(jié)點(diǎn)加入通道
peer channel join -b channel-artifacts/mychannel.block

參照上述切換節(jié)點(diǎn)的方法,將org2組織的兩個(gè)節(jié)點(diǎn)也加入通道。

#切換節(jié)點(diǎn)org2.peer0
source scripts/utils.sh
setGlobals 0 2
# 將當(dāng)前節(jié)點(diǎn)加入通道
peer channel join -b channel-artifacts/mychannel.block

#切換節(jié)點(diǎn)org2.peer1
setGlobals 1 2
# 將當(dāng)前節(jié)點(diǎn)加入通道
peer channel join -b channel-artifacts/mychannel.block

至此,2個(gè)組織的4個(gè)節(jié)點(diǎn)均已加入mychannel通道。

3.8 更新錨節(jié)點(diǎn)

錨節(jié)點(diǎn)是組織內(nèi)的一種特殊peer節(jié)點(diǎn),通過(guò)錨節(jié)點(diǎn)可以實(shí)現(xiàn)不同組織內(nèi)節(jié)點(diǎn)間的通信。通常每次組織都要設(shè)置一個(gè)錨節(jié)點(diǎn),下面分別對(duì)org1和org2兩個(gè)組織設(shè)置錨節(jié)點(diǎn),本文假設(shè)將組織中的peer0節(jié)點(diǎn)設(shè)置為錨節(jié)點(diǎn)。

#切換到org1.peer0節(jié)點(diǎn)
setGlobals 0 1
#設(shè)置環(huán)境變量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
#更新設(shè)置錨節(jié)點(diǎn)
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA

#切換到org2.peer0節(jié)點(diǎn)
setGlobals 0 2
#設(shè)置環(huán)境變量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
#更新設(shè)置錨節(jié)點(diǎn)
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA

更新命令執(zhí)行成功結(jié)果如下圖所示:

image

經(jīng)過(guò)我們的努力,我們手動(dòng)配置并啟動(dòng)了一個(gè)fabric網(wǎng)絡(luò),包含3個(gè)orderer節(jié)點(diǎn),2個(gè)組織4個(gè)peer節(jié)點(diǎn),2個(gè)ca節(jié)點(diǎn),1個(gè)cli節(jié)點(diǎn),1個(gè)通道m(xù)ychannel,后續(xù)文章將基于該網(wǎng)絡(luò)進(jìn)行鏈碼操作。


文章作者:xiaohui249
本文鏈接:http://javatech.wang/index.php/archives/152/
版本所有 ?轉(zhuǎn)載時(shí)必須以鏈接形式注明作者和原始出處

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

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

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