hyperledger fabric docker-compose 安装方式(多节点)(三)

本文详细介绍了如何使用Hyperledger Fabric构建一个多节点的区块链网络。从启动Orderer节点开始,逐步介绍如何启动不同组织下的Peer节点并加入Channel,安装Chaincode,实例化Chaincode,以及如何执行Chaincode的查询和调用交易。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

启动多节点集群

1. 启动 orderer

[root@fabricorderer e2e_cli]# pwd
/root/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli
[root@fabricorderer e2e_cli]# docker-compose -f docker-compose-cli.yaml up -d

启动orderer成功的标识:出现一下信息

nfig=0, lastConfigSeq=0): 
2018-04-05 11:47:12.154 UTC [orderer/multichain] NewManagerImpl -> INFO 0e1 Starting with system channel testchainid and orderer type solo
2018-04-05 11:47:12.154 UTC [orderer/main] main -> INFO 0e2 Beginning to serve requests

2. 启动 org1 的第一个节点 peer0,即 peer0.org1.example.com

[root@fabric-CA e2e_cli]#  docker-compose -f docker-compose-cli.yaml up -d

[root@fabric-CA e2e_cli]# docker exec -it cli bash
[root@fabric-CA e2e_cli]# export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/cacerts/ca.example.com-cert.pem

[root@fabric-CA e2e_cli]# peer channel create -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/channel.tx -
-tls --cafile $ORDERER_CA

[root@fabric-CA e2e_cli]# peer channel join -b mychannel.block

[root@fabric-CA e2e_cli]# peer channel update -o orderer.example.com:7050 -c mychannel -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile $ORDERER_CA'

[root@fabric-CA e2e_cli]# peer chaincode install -n mycc -v 1.0 -p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

3. 启动 org1 的第二个节点 peer1,即 peer1.org1.example.com

[root@build e2e_cli]# docker-compose -f docker-compose-cli.yaml up -d

[root@build e2e_cli]# docker exec -it cli bash

[root@build e2e_cli]# peer channel join -b mychannel.block

[root@build e2e_cli]# peer chaincode install -n mycc -v 1.0 –p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

4. 启动 org2 的第一个节点 peer2,即 peer0.org2.example.com

[root@k8s03 e2e_cli]#  docker-compose -f docker-compose-cli.yaml up -d

[root@k8s03 e2e_cli]#  docker exec -it cli bash

[root@k8s03 e2e_cli]#  peer channel join -b mychannel.block

[root@k8s03 e2e_cli]#  peer channel update -o orderer.example.com:7050 -c mychannel -f ./channelartifacts/Org2MSPanchors.tx --tls --cafile $ORDERER_CA

[root@k8s03 e2e_cli]#  peer chaincode install -n mycc -v 1.0 -p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

5. 启动 org2 的第二个节点 peer3,即启动 peer1.org2.example.com

[root@k8s02 e2e_cli]#  docker-compose -f docker-compose-cli.yaml up -d

[root@k8s02 e2e_cli]#  docker exec -it cli bash

[root@k8s02 e2e_cli]#  peer channel join -b mychannel.block

[root@k8s02 e2e_cli]#  peer chaincode install -n mycc -v 1.0 -p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

6 运行 chaincode

通过前面的步骤,整个多节点 Fabric 网络已经运行起来了,每个 peer 都加入到了标识为 mychannel 的 channel 中,并且都安装了一个简单的 chaincode(该 chaincode 在安装时被标识为 mycc) 。下面步骤运行和维护 chaincode。

实例化 chaincode
chaincode 的实例化可在任意 peer 上进行,并且 chaincode 只能被实例化一次,下面以在
peer1.org1.example.com 上实例化 chaincode 为例。

[root@build e2e_cli]# peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

这时候会构建一个新的容器来运行 chaincode,通过 docker ps -a 命令可以看到新容器:

[root@build e2e_cli]# docker ps 
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
4a8a8babec0d        dev-peer1.org1.example.com-mycc-2.0   "chaincode -peer.a..."   2 hours ago         Up 2 hours                                                           dev-peer1.org1.example.com-mycc-2.0
9c2635a9a90a        dev-peer1.org1.example.com-mycc-1.0   "chaincode -peer.a..."   2 hours ago         Up 2 hours                                                           dev-peer1.org1.example.com-mycc-1.0
45c5ad416ff2        hyperledger/fabric-tools              "/bin/bash"              3 hours ago         Up 3 hours                                                           cli
9d23589e49d2        hyperledger/fabric-peer               "peer node start"        3 hours ago         Up 3 hours          0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer1.org1.example.com
[root@build e2e_cli]# 

上述实例化中,我们对两个变量‘a’和‘b’分别赋予初值 100 和 200,通过 channel 它们的值被同步到了其他 peer 的账本上,即使其他 peer 还没有构建运行 chaincode 的容器。

2. 执行 chaincode 的 query 交易

由于 chaincode 已经被 peer0.org2.example.com 实例化了,因此其他 peer 不需要再次实例化它了,但是 chaincode 的状态(world state)却是已经记录在各个 peer 的账本上。
接下来我们在 peer0.org1.example.com 上查看 chaincode 的状态,
内部执行:

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
...
Query Result: 100

3. 执行 chaincode 的 invoke 交易
接下来,我们执行一个 invoke 交易,使得变量 a 向变量 b 转帐 20,得到最终值为

peer chaincode invoke -o orderer.example.com:7050 --tls --cafile $ORDERER_CA -C mychannel -n
mycc -c '{"Args":["invoke","a","b","20"]}'

4. 再次执行 chaincode 的 query 交易

在 peer1.org1.example.com 上重复以上查看 chaincode 的步骤,得到返回结果为 80,说明测试通过,至此,Fabric 网络构建完毕,各个组件工作正常。

5. 更新 chaincode

peer chaincode install -n mycc -v 2.0 -p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
peer chaincode upgrade -o orderer.example.com:7050 --tls --cafile $ORDERER_CA \ -C mychannel -n mycc -v 2.0 -c '{"Args":["init","c", "10", "d","20"]}'

等待一段时间后,可以通过 docker ps -a 来查看新容器构建的容器,该容器的名称为:

[root@build e2e_cli]# docker ps 
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
4a8a8babec0d        dev-peer1.org1.example.com-mycc-2.0   "chaincode -peer.a..."   2 hours ago         Up 2 hours                                                           dev-peer1.org1.example.com-mycc-2.0
9c2635a9a90a        dev-peer1.org1.example.com-mycc-1.0   "chaincode -peer.a..."   2 hours ago         Up 2 hours                                                           dev-peer1.org1.example.com-mycc-1.0
45c5ad416ff2        hyperledger/fabric-tools              "/bin/bash"              3 hours ago         Up 3 hours                                                           cli
9d23589e49d2        hyperledger/fabric-peer               "peer node start"        3 hours ago         Up 3 hours          0.0.0.0:7051->7051/tcp, 0.0.0.0:7053->7053/tcp   peer1.org1.example.com

通过以下命令查询 c 的变量:

root@f2dc61cbd33a:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","c"]}'
2018-04-05 12:36:19.592 UTC [msp] getMspConfig -> INFO 001 intermediate certs folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts: no such file or directory]
2018-04-05 12:36:19.592 UTC [msp] getMspConfig -> INFO 002 crls folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/crls: no such file or directory]
2018-04-05 12:36:19.592 UTC [msp] getMspConfig -> INFO 003 MSP configuration file not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml]: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml: no such file or directory]
2018-04-05 12:36:19.610 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
2018-04-05 12:36:19.610 UTC [msp] GetDefaultSigningIdentity -> DEBU 005 Obtaining default signing identity
2018-04-05 12:36:19.610 UTC [msp/identity] Sign -> DEBU 006 Sign: plaintext: 0AAD070A6708031A0C08C3B098D60510...6D7963631A0A0A0571756572790A0163 
2018-04-05 12:36:19.610 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: 55E32E7EE59436EB076C671CEA07334F11614DB106B7713FDF9583A7EFEDA81A 
Query Result: 10

再次查询 a 的变量:

root@f2dc61cbd33a:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
2018-04-05 12:36:12.785 UTC [msp] getMspConfig -> INFO 001 intermediate certs folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts: no such file or directory]
2018-04-05 12:36:12.785 UTC [msp] getMspConfig -> INFO 002 crls folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/crls: no such file or directory]
2018-04-05 12:36:12.785 UTC [msp] getMspConfig -> INFO 003 MSP configuration file not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml]: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/config.yaml: no such file or directory]
2018-04-05 12:36:12.803 UTC [msp] GetLocalMSP -> DEBU 004 Returning existing local MSP
2018-04-05 12:36:12.803 UTC [msp] GetDefaultSigningIdentity -> DEBU 005 Obtaining default signing identity
2018-04-05 12:36:12.803 UTC [msp/identity] Sign -> DEBU 006 Sign: plaintext: 0AAD070A6708031A0C08BCB098D60510...6D7963631A0A0A0571756572790A0161 
2018-04-05 12:36:12.803 UTC [msp/identity] Sign -> DEBU 007 Sign: digest: 0F96F27107E16006971BA985F07284E56F4A495FB73686902B34DB281C172192 
Query Result: 80

在其他节点分别执行一下命令

peer chaincode install -n mycc -v 2.0 –p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值