多機部署
1. 搭建環境
本文使用的是Fabric 1.4版本,搭建solo模式的4+1的架構:1Order,4Peer,機器之間的網路需要互通,保證五臺機子上的Fabric網路可以正常運行,舉例說明如下:
| 域名 | ip |
|---|---|
| orderer.example.com | 172.18.4.49 |
| peer0.org1.example.com | 172.18.4.33 |
| peer1.org1.example.com | 172.18.4.34 |
| peer0.org2.example.com | 172.18.4.35 |
| peer1.org2.example.com | 172.18.4.36 |
Fabric 的環境搭建程序不再詳解,例子中的order節點和4個peer節點放在5臺不同機子上,我們搭建的程序共使用三臺:order1臺 + 組織1的peer0和peer1一臺,組織2的peer0和peer1一臺,
2. 多機環境搭建
只在Orderer節點的機子上修改組態檔,最后通過scp命令將組態檔復制到其余四臺機子,保證所有的節點所使用的組態檔都是相同的,
本文使用 first-network 這個檔案夾內的組態檔來修改為自己所需要的組態檔,(位于fabric同級目錄的fabric-samples官方樣例下的first-network)
2.1 準備組態檔(只在Order節點操作)
#step1 進入到first-network檔案夾的上一級目錄
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/
#step2 拷貝first-network檔案夾,并命名為first
cp -r first-network/ first
#step3 進入到first檔案夾內
cd first
#step4 洗掉此次多機環境搭建使用不到的檔案,檔案夾內剩余的檔案有
.
├── base
│ ├── docker-compose-base.yaml
│ └── peer-base.yaml
├── channel-artifacts
├── configtx.yaml
├── crypto-config.yaml
├── docker-compose-cli.yaml
├── docker-compose-couch.yaml
本文就對以上檔案進行修改搭建自己的Fabric多機網路
由于官方的 first-network 中的組態檔中使用的就是4+1的架構,所以我們可以直接生成所需要的證書檔案,創世區塊,通道組態檔,
2.2 生成相關組態檔(只在Order節點操作)
#step1 生成證書檔案
cryptogen generate --config=./crypto-config.yaml
#step2 生成創世區塊 首先要確保channel-artifacts檔案夾存在,如果不存在需要手動創建,不然會報錯
configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
#step3 生成通道組態檔 其中通道名mychannel可以修改為自己的
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
#step4 生成錨節點組態檔
#========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 中應該有以下幾個檔案:

2.3 修改節點組態檔(只提醒一次:所有檔案內容的格式不能變,前面空格的數量必須和原檔案一致)
2.3.1 base/docker-compose-base.yaml(Order主機)
刪掉order.example.com下image項的冒號

下面內容暫不需要修改!!!(因為我們是多機環境,不存在埠沖突問題暫時用不到)
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 #這里更改為7051,因為我們是多機環境,不存在埠沖突問題
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer0.org1.example.com:/var/hyperledger/production
ports:
- 7051:7051
peer1.org1.example.com:
container_name: peer1.org1.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer1.org1.example.com
- CORE_PEER_ADDRESS=peer1.org1.example.com:8051 # 7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:8051 #7051
- CORE_PEER_CHAINCODEADDRESS=peer1.org1.example.com:8052 #7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:8052 #7052
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.example.com:8051 #7051
- CORE_PEER_GOSSIP_BOOTSTRAP=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer1.org1.example.com:/var/hyperledger/production
ports:
- 8051:8051 #這里不要忘記修改為 7051:7051
...
#只需要修改當前主機上需要啟動的節點的埠就可以,比如當前主機節點為peer0.org1.example.com,那么只需要修改peer0.org1...的埠資訊
2.3.2 docker-compose-cli.yaml(Order主機)
本文需要使用該檔案啟動節點,我們將該檔案復制一份,以orderer節點為例:
#復制該檔案,并命名為docker-compose-orderer.yaml
cp docker-compose-cli.yaml docker-compose-orderer.yaml
#用編輯器打開該檔案
sudo vim docker-compose-orderer.yaml
我們只在這臺電腦上啟動orderer節點,所以關于peer節點的資訊用不到,我們將組態檔中多余的欄位洗掉,只留下這些內容:
version: '2'
volumes:
orderer.example.com:
networks:
byfn:
services:
orderer.example.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.example.com
container_name: orderer.example.com
networks:
- byfn
執行以下命令啟動Orderer節點
sudo docker-compose -f docker-compose-orderer.yaml up
可能問題:no such image: hyperledger/fabric-ordered::invalid reference format
**原因:**base/docker-compose-base.yaml沒有刪掉order.example.com下image的冒號
對于Order節點,關閉網路的命令:
sudo docker-compose -f docker-compose-orderer.yaml down --volumes
建議在每一次啟動網路之前都執行一次關閉網路的命令,
2.3.3 peer節點配置
以下以peer0.org1節點為例,其余peer節點操作相同
orderer 節點啟動成功后,我們使用 scp 命令將 first 檔案夾傳輸到 peer0.org1節點服務器,
#step1 進入到上級目錄
cd ..
#step2 傳輸檔案
sudo scp -r first/ [peer0.org1節點主機名]@10.65.26.64:/home/[用戶名]/
比如對我來說,我運行以下指令
sudo scp -r first/ lzz@172.18.4.33:/home/lzz/
輸入peer0.org1節點主機登錄密碼后,在peer0.org1節點主機/home/[用戶名]下查看到first檔案夾,將first移動到fabric-samples內first-network同級目錄
然后,我們去peer0.org1節點主機,對 peer0.org1節點進行配置,同樣,我們復制一份 docker-compose-cli.yaml 檔案:
#step1:進入傳輸到的first檔案夾
cd ~/first
#step2:復制docker-compose-cli.yaml檔案 并命名為docker-compose-peer0-Org1.yaml
cp docker-compose-cli.yaml docker-compose-peer0-Org1.yaml
#step3:用編輯器打開該檔案
vim docker-compose-peer0-Org1.yaml
對于peer0.Org1節點,同樣,首先洗掉多余的部分,添加一些欄位,記得根據自己的情況修改cli 部分的路徑!如果你和默認一樣就不用改了,如果不同一定要修改!!否則后面會出現問題,最終檔案內容為:
-
volumes只保留當前節點
-
extra_hosts 欄位除了當前節點不寫,其他節點都寫(比如我的Org1的peer0、peer1放在一臺主機,那么當前主機的此檔案只寫orderer、peer0.org2、peer1.org2的配置ip)
-
cli下的image洗掉$IMAGE_TAG前面的冒號
-
cli下的environment、working_dir、volumes中存盤路徑要和我們具體情況對應
默認檔案里的路徑是/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/…,我們要把中間的fabric/peer/crypto/替換為fabric-samples/first/crypto-config/()
-
depends_on保留當前節點、extra_hosts保留所有節點
version: '2'
volumes: #只保留當前節點
peer0.org1.example.com:
networks:
byfn:
services:
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org1.example.com
networks:
- byfn
extra_hosts: #=========需要添加的額外欄位,這里不寫當前節點
- "orderer.example.com:172.18.4.49"
- "peer1.org1.example.com:172.18.4.34"
- "peer0.org2.example.com:172.18.4.35"
- "peer1.org2.example.com:172.18.4.36"
cli:
container_name: cli
image: hyperledger/fabric-tools$IMAGE_TAG #====洗掉此處$IMAGE_TAG前面的冒號
tty: true
stdin_open: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
#- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
#- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
#- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
#- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
#上面四處替換如下
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
#working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
working_dir: /opt/gopath/src/github.com/hyperledger/fabric-samples/first
command: /bin/bash
volumes:
- /var/run/:/host/var/run/
#- ./../chaincode/:/opt/gopath/src/github.com/chaincode
#- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
#- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
#- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
# 上述四行替換如下
- ./../chaincode/:/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric-samples/first/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric-samples/first/channel-artifacts
depends_on: #========只保留當前節點
- peer0.org1.example.com
networks:
- byfn
extra_hosts: #=========所有節點,包括order
- "orderer.example.com:172.18.4.49"
- "peer0.org1.example.com:172.18.4.33" #這里需要寫當前節點,因為cli容器需要與peer0.org1節點進行通信
- "peer1.org1.example.com:172.18.4.34"
- "peer0.org2.example.com:172.18.4.35"
- "peer1.org2.example.com:172.18.4.36"
修改完docker-compose-peer0-Org1.yaml后,打開base/peer-base.yaml:
- 洗掉peer-base和orderer-base下$IMAGE_TAG前的冒號:
- 修改services-environment-CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE={project_name}_byfn(已經修改,例如first_name)
- 記得修改所有peer節點的first_byfn
# Copyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
version: '2'
services:
peer-base:
image: hyperledger/fabric-peer$IMAGE_TAG #===洗掉冒號
environment:
- GODEBUG=netdns=go
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
# the following setting starts chaincode containers on the same
# bridge network as the peers
# https://docs.docker.com/compose/networking/
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=first_byfn
- FABRIC_LOGGING_SPEC=INFO
#- FABRIC_LOGGING_SPEC=DEBUG
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_GOSSIP_USELEADERELECTION=true
- CORE_PEER_GOSSIP_ORGLEADER=false
- CORE_PEER_PROFILE_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: peer node start
orderer-base:
image: hyperledger/fabric-orderer$IMAGE_TAG #===洗掉冒號
environment:
- FABRIC_LOGGING_SPEC=INFO
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
# enabled TLS
- ORDERER_GENERAL_TLS_ENABLED=true
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
- ORDERER_KAFKA_TOPIC_REPLICATIONFACTOR=1
- ORDERER_KAFKA_VERBOSE=true
- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
working_dir: /opt/gopath/src/github.com/hyperledger/fabric
command: orderer
peer0.org1的組態檔已經修改完畢,接下來我們啟動該節點:
sudo docker-compose -f docker-compose-peer0-Org1.yaml up
需要注意的是:如果后續操作有錯誤或者更新資訊,一定要使用
sudo docker-compose -f docker-compose-peer0-Org1.yaml down
先關閉網路然后再重新開啟網路生效,
啟動該節點后,如下表示成功啟動:

如果沒有報錯的話,peer0.org1節點成功啟動,至于其他peer節點,只需要將 first 檔案夾使用 scp 命令復制到各個服務器上,按照該模板對組態檔進行修改即可,
3. 創建通道
3.1 創建通道
創建通道需要進入cli容器:(以peer0.org1節點為例)

看到游標前的資訊由ubuntu變為xxxxxx則成功進入容器
首先配置環境變數:(每次退出cli容器之后再次進入需要重新設定環境變數!!!)
#當前cli容器默認配置是節點peer0,所以不需要其他配置資訊
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/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
#看到如下資訊說明創建通道成功
2019-06-20 13:05:55.829 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
2019-06-20 13:05:55.926 UTC [cli.common] readBlock -> INFO 002 Received block: 0
#將生成的檔案移動到channel-artifacts檔案夾中
mv mychannel.block channel-artifacts/
3.2 加入通道(全在peer0Org1的主機上切換身份進行)
#因為當前cli容器使用的是peer0的配置,所以可以直接將peer0加入通道
peer channel join -b channel-artifacts/mychannel.block
#更新環境變數使其他節點也加入通道
#=========peer1.org1=========== 注意這里埠要與上面檔案中配置的埠號相同
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
#=========peer0.org2============
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer channel join -b channel-artifacts/mychannel.block
#=========peer1.org2=============
CORE_PEER_ADDRESS=peer1.org2.example.com:10051
peer channel join -b channel-artifacts/mychannel.block
#退出容器
exit

3.3 更新錨節點
CORE_PEER_TLS_ROOTCERT_FILE、CORE_PEER_MSPCONFIGPATH中路徑對應正確
#重新進入容器
sudo docker exec -it cli bash
#更新環境變數
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#========Org1================
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile $ORDERER_CA
#========Org2================
#更新環境變數
CORE_PEER_LOCALMSPID="Org2MSP"
CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt
CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
CORE_PEER_ADDRESS=peer0.org2.example.com:9051
peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
#退出容器
exit
4. 鏈碼的安裝測驗
4.1 安裝鏈碼
所有節點的安裝鏈碼一定要在第一臺安裝鏈碼的機器上切換身份進行安裝!!!
請注意,鏈碼的安裝需要安裝在所有節點,這一步需要如同3.2一樣,在peer0Org1節點主機切換身份,四個節點均需要安裝鏈碼,因為鏈碼相當于工具,每個節點安裝后我們才能呼叫鏈碼介面
#進入容器
sudo docker exec -it cli bash
#更新環境變數
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#=========peer0.org1===========
#這里很有可能會出現路徑不存在的錯誤,解決方法是在容器內找到對應的鏈碼所在位置,然后替換當前鏈碼路徑
##比如本文中鏈碼路徑為/opt/gopath/src/github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go
##則將下面命令的路徑進行替換github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go/chaincode_example02
#peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric-samples/chaincode/chaincode_example02/go/
#實體化鏈碼 該步驟創建了a,b兩個賬戶,其中a賬戶余額定義為100,b賬戶余額定義為200
peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
#這一步執行完畢后可以在其他節點上也安裝鏈碼
-
如果出現問題:Error: error getting chaincode code mycc: path to chaincode does not exist ,再訂正一遍 docker-compose-peer0-Org1.yaml 中的路徑有沒有問題,把之前啟動的網路關閉,在重啟,
-
如果在其他三個節點身份下,出現Error: Bad response: 500 - error installing chaincode code mycc :1.0(chaincode /var/hyperledger/production/chaincodes/mycc.1.0 exists),執行以下命令,重啟網路進行嘗試,(但其實這說明已經存在,并不用再次下載)
docker rmi -f $(docker ps -aq)
docker volume prune
4.2 實體化鏈碼
在通道上實體化鏈碼,這會在通道上初始化鏈碼,為鏈碼指定背書策略,然后為目標節點啟動鏈碼容器,同時指定 -P “OR (‘Org1MSP.member’,‘Org2MSP.member’)” 作為策略,
ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric-samples/first/crypto-config/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
#實體化鏈碼 該步驟創建了a,b兩個賬戶,其中a賬戶余額定義為100,b賬戶余額定義為200
peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
#這一步執行完畢后可以在其他節點上也安裝鏈碼
4.3 呼叫鏈碼
#以peer0.org1為例
#首先進入cli容器
sudo docker exec -it cli bash
#執行以下命令進行查詢a賬戶余額
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
#如果命令列輸出100說明鏈碼成功呼叫.
#接下來我們發起一筆交易:通過peer0.org1節點將a賬戶余額轉賬給b20
peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C mychannel -n mycc -c '{"Args":["invoke","a","b","10"]}'
#然后登陸peer1.org1節點進行查詢
CORE_PEER_ADDRESS=peer1.org1.example.com:8051
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
#如果輸出結果為:80
說明Fabric網路手動搭建成功
#退出容器
exit
如果出現問題:Error: error getting endorser client for channel: endorser client failed to connect to peer1.org2.example.com:10051: failed to create new connection: context deadline exceeded
解決方法:在 docker-compose-cli.yaml 中 cli 容器下,添加環境變數 GODEBUG=netdns=go,在 base/peer-base.yaml 中 peer-base 容器下,添加環境變數 GODEBUG=netdns=go
無效,
因為我們在每個節點都安裝了鏈碼,所以在實體化之后,我們就可以在不同peer節點主機去進行交易,也仍然可以通過一臺主機切換身份來進行操作,
5 總結
以上就是Fabric1.4.1的多機部署程序,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/303930.html
標籤:區塊鏈
上一篇:方差互換(Variance Swap)定價推導及VIX相關介紹
下一篇:2021.09.27數字貨幣小計
