前言
在实际项目中,因为项目的需求变动,一般都会对fabric网络做一个修改,最常见的变动就是在现有的Fabric网络中增加一个节点,现在以之前搭建的fabric网络(版本1.1),balance-transfer为例做个介绍,整个过程其实也很简单,生成节点证书,增加新节点的docker配置文件并启动相应的服务,然后将新节点加到现有的channel当中,并在节点上安装智能合约(Chaincode),下午详情讲一下具体的操作步骤。
1、修改crypto-config.yaml文件并生成对应的节点证书。
首先我们确认我们需要在Org2里增加节点,那么我们在crypto-config.yaml文件里找到对应Org2的配置,把Template字段里的count参数修改成2,意思就是在此组织下生成两个节点,配置文件如下
1
2
3
4
5
6
7
| - Name: Org2
Domain: org2.xuyao.com
EnableNodeOUs: true
Template:
Count: 2
Users:
Count: 1
|
修改好配置文件后,我们现在使用cryptogen来生成证书,在在artifacts/channel目录下执行:
1
| ./cryptogen extend --config=./crypto-config.yaml
|
这样我们就为新节点生成了证书,可以到Org2相应的目录上查看,发现已经新生成了一个节点,加上之前那个,一共有两个节点。
1
| peer0.org2.mbasechain.com peer1.org2.mbasechain.com
|
2、配置docker-compose文件并启动节点容器
接下来我们需要新增一个doceker-compose有配置文件,用来启动一个新节点容器,我们将新节点的配置文件全名为:Org2Peer1.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
| version: '2'
services:
couchdb:
container_name: couchdb
image: hyperledger/fabric-couchdb:latest
ports:
- "5984:5984"
peer1.org1.xuyao.com:
container_name: peer1.org1.xuyao.com
image: hyperledger/fabric-peer:latest
environment:
- CORE_PEER_ID=peer1.org1.xuyao.com
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_ADDRESS=peer1.org1.xuyao.com:7051
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=artifacts_default
- CORE_LOGGING_LEVEL=debug
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- GODEBUG=netdns=go
# The following setting skips the gossip handshake since we are
# are not doing mutual TLS
- CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
- CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/crypto/peer/msp
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/crypto/peer/tls/server.key
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/crypto/peer/tls/server.crt
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/crypto/peer/tls/ca.crt
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
ports:
- 7051:7051
- 7053:7053
volumes:
- /var/run/:/host/var/run/
- ./channel/crypto-config/peerOrganizations/org1.mbasechain.com/peers/peer0.org1.xuyao.com/:/etc/hyperledger/crypto/peer
- ../mount/peer0.org1.xuyao.com/var/hyperledger/production:/var/hyperledger/production
depends_on:
- couchdb
|
这个配置文件跟之前的peer节点的配置一样,只要改下相应的参数即可,接下来我们就来启动这个节点。
1
| docker-compose -f Org2Peer1.yaml up -d
|
启动过程也和之前的一样。
3、修改network-config.json配置文件
启动节点后,我们需要配置network-config.json,让应用与节点之前通信,在peers那块增加一个通讯节点就可以
1
2
3
4
5
6
7
| peer1.org2.xuyao.com:
url: grpcs://127.0.0.1:10051
eventUrl: grpcs://127.0.0.1:10053
grpcOptions:
ssl-target-name-override: peer1.org2.xuyao.com
tlsCACerts:
path: artifacts/channel/crypto-config/peerOrganizations/org4.mbasechain.com/peers/peer1.org2.xuyao.com/tls/ca.crt
|
修改配置后,我们启动balance-transfer,运行runApp.sh,将项目跑起来。
4、将新节点加入到所需的Channel中
接下来我们需要将新节点加到某个Channel里,首先我们通过注册接口,在Org2里拿到用户的Token,再拿此Token请求中入Channel接口
1
2
3
4
5
6
7
| curl -s -X POST \
http://localhost:4000/channels/mychannel/peers \
-H "authorization: Bearer $ORG2_TOKEN" \
-H "content-type: application/json" \
-d '{
"peers": ["peer1.org2.xuyao.com"]
}'
|
5、安装Chaincode
加入channel后,peer3已经可以参与记账,但是不能指定该节点进行查询或交易,这时候需要发起请求安装chaincode:
1
2
3
4
5
6
7
8
9
10
| curl -s -X POST \
http://localhost:$PORT/chaincodes \
-H "authorization: Bearer $ORG1_TOKEN" \
-H "content-type: application/json" \
-d '{
"peers": ["peer1.org2.xuyao.com"],
"chaincodeName":"mycc",
"chaincodePath":"github.com/example_cc",
"chaincodeVersion":"v0"
}'
|
安装成功后指定新节点进行查询或交易操作,会自动生成该节点的chaincode镜像,并启动容器运行chaincode。在已有组织中新加节点的操作到这里就全部完成了!