fabric網(wǎng)絡(luò)在創(chuàng)建時(shí)就已經(jīng)確定了初始的節(jié)點(diǎn)數(shù)量,而在實(shí)際應(yīng)用場景中可能會(huì)需要在某個(gè)組織中動(dòng)態(tài)增加節(jié)點(diǎn)。這里以balance-transfer v1.0為例(2 Org校坑,4 Peer)紧武,介紹如何在org1中加入第3個(gè)peer節(jié)點(diǎn)。
一但指、追加新節(jié)點(diǎn)的身份信息
首先需要在組織org1的MSP目錄中追加新節(jié)點(diǎn)的證書和私鑰信息,主要是用到cryptogen工具(v1.1.0以上版本)
1.修改cryptogen.yaml文件(或者直接新建一個(gè)文件)中Template字段里的count參數(shù),設(shè)置為需要該組織中存在的節(jié)點(diǎn)總數(shù),可一次增加多個(gè)節(jié)點(diǎn)棋凳。
這里只在org1加入一個(gè)節(jié)點(diǎn)拦坠,所以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ù)應(yīng)以實(shí)際情況下配置文件的名稱及路徑為準(zhǔn)
二、編寫新節(jié)點(diǎn)的docker配置文件
接下來需要編寫docker配置文件用于啟動(dòng)新節(jié)點(diǎn)剩岳,內(nèi)容較為簡單贞滨,只需要在已有節(jié)點(diǎn)的配置上稍作修改即可,注意避免容器端口的沖突拍棕。
這里我將新節(jié)點(diǎn)的配置文件命名為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
啟動(dòng)新節(jié)點(diǎn)容器莫湘,在配置文件所在目錄下執(zhí)行:
docker-compose -f new-peer.yaml up -d
三尤蒿、修改網(wǎng)絡(luò)配置文件
網(wǎng)絡(luò)配置文件network-config.json用于幫助應(yīng)用程序獲取網(wǎng)絡(luò)節(jié)點(diǎn)的地址等信息,是app與節(jié)點(diǎn)通信的關(guān)鍵幅垮,所以需要在該配置文件中增加新節(jié)點(diǎn)的信息腰池。
注: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é)點(diǎn)加入通道
此時(shí)新增節(jié)點(diǎn)已經(jīng)加入了區(qū)塊鏈網(wǎng)絡(luò)呵萨,但并沒有加入某一個(gè)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)絡(luò)配置文件中設(shè)置的新節(jié)點(diǎn)的別名。
加入通道成功后忱嘹,查看節(jié)點(diǎn)日志可以發(fā)現(xiàn)新節(jié)點(diǎn)開始從其他節(jié)點(diǎn)同步區(qū)塊:
docker logs peer2.org1.example.com
五嘱腥、安裝鏈碼
加入channel后,peer3已經(jīng)可以參與記賬拘悦,但是不能指定該節(jié)點(diǎn)進(jìn)行查詢或交易齿兔,這時(shí)候需要發(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é)點(diǎn)進(jìn)行查詢或交易操作,會(huì)自動(dòng)生成該節(jié)點(diǎn)的chaincode鏡像础米,并啟動(dòng)容器運(yùn)行chaincode分苇。在已有組織中新加節(jié)點(diǎn)的操作到這里就全部完成了!