fabric網(wǎng)絡在創(chuàng)建時就已經(jīng)確定了初始的節(jié)點數(shù)量,而在實際應用場景中可能會需要在某個組織中動態(tài)增加節(jié)點。這里以balance-transfer v1.0為例(2 Org,4 Peer),介紹如何在org1中加入第3個peer節(jié)點。
一、追加新節(jié)點的身份信息
首先需要在組織org1的MSP目錄中追加新節(jié)點的證書和私鑰信息,主要是用到cryptogen工具(v1.1.0以上版本)
1.修改cryptogen.yaml文件(或者直接新建一個文件)中Template字段里的count參數(shù),設置為需要該組織中存在的節(jié)點總數(shù),可一次增加多個節(jié)點。
這里只在org1加入一個節(jié)點,所以cryptogen.yaml文件修改部分如下:
PeerOrgs:
- Name: Org1
Domain: org1.example.com
CA:
Hostname: ca
Template:
Count: 3
SANS:
- "localhost"
Users:
Count: 1
2.執(zhí)行extend命令完成追加操作
在artifacts/channel目錄下執(zhí)行:
./cryptogen extend --config=./cryptogen.yaml
注:--config參數(shù)應以實際情況下配置文件的名稱及路徑為準
二、編寫新節(jié)點的docker配置文件
接下來需要編寫docker配置文件用于啟動新節(jié)點,內(nèi)容較為簡單,只需要在已有節(jié)點的配置上稍作修改即可,注意避免容器端口的沖突。
這里我將新節(jié)點的配置文件命名為new-peer.yaml,放置于artifacts目錄下,以下是文件內(nèi)容:
version: '2'
services:
peer2.org1.example.com:
container_name: peer2.org1.example.com
extends:
file: base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer2.org1.example.com
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_ADDRESS=peer2.org1.example.com:7051
ports:
- 7151:7051
- 7153:7053
volumes:
- ./channel/crypto-config/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/:/etc/hyperledger/crypto/peer
啟動新節(jié)點容器,在配置文件所在目錄下執(zhí)行:
docker-compose -f new-peer.yaml up -d
三、修改網(wǎng)絡配置文件
網(wǎng)絡配置文件network-config.json用于幫助應用程序獲取網(wǎng)絡節(jié)點的地址等信息,是app與節(jié)點通信的關鍵,所以需要在該配置文件中增加新節(jié)點的信息。
注:balance-transfer 1.1版本后已改為network-config.js文件。
在json文件的org1部分的peers字段后添加"peer3"的信息,注意ip和端口等信息需要與上述docker配置文件中保持一致,內(nèi)容如下:
"peer3": {
"requests": "grpcs://localhost:7151",
"events": "grpcs://localhost:7153",
"server-hostname": "peer2.org1.example.com",
"tls_cacerts": "../artifacts/channel/crypto-config/peerOrganizations/org1.example.com/peers/peer2.org1.example.com/tls/ca.crt"
}
四、將新節(jié)點加入通道
此時新增節(jié)點已經(jīng)加入了區(qū)塊鏈網(wǎng)絡,但并沒有加入某一個channel,所以是沒有賬本數(shù)據(jù)的。需要發(fā)送請求將其加入channel:
curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" \
-d '{
"peers": ["peer3"]
}'
請求中,$ORG1_TOKEN是通過注冊獲取的org1的token值,"peer3"是在網(wǎng)絡配置文件中設置的新節(jié)點的別名。
加入通道成功后,查看節(jié)點日志可以發(fā)現(xiàn)新節(jié)點開始從其他節(jié)點同步區(qū)塊:
docker logs peer2.org1.example.com
五、安裝鏈碼
加入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": ["peer3"],
"chaincodeName":"mycc",
"chaincodePath":"github.com/example_cc",
"chaincodeVersion":"v0"
}'
安裝成功后指定新節(jié)點進行查詢或交易操作,會自動生成該節(jié)點的chaincode鏡像,并啟動容器運行chaincode。在已有組織中新加節(jié)點的操作到這里就全部完成了!