天天看點

hyperledger fabric docker-compose 安裝方式(多節點)(三)

啟動多節點叢集

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=, lastConfigSeq=): 
-- :: UTC [orderer/multichain] NewManagerImpl -> INFO  Starting with system channel testchainid and orderer type solo
-- :: UTC [orderer/main] main -> INFO  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 為例。

這時候會建構一個新的容器來運作 chaincode,通過 docker ps -a 指令可以看到新容器:

[[email protected] e2e_cli]# docker ps 
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
a8a8babec0d        dev-peer1.org1.example.com-mycc-   "chaincode -peer.a..."    hours ago         Up  hours                                                           dev-peer1.org1.example.com-mycc-
c2635a9a90a        dev-peer1.org1.example.com-mycc-   "chaincode -peer.a..."    hours ago         Up  hours                                                           dev-peer1.org1.example.com-mycc-
c5ad416ff2        hyperledger/fabric-tools              "/bin/bash"               hours ago         Up  hours                                                           cli
d23589e49d2        hyperledger/fabric-peer               "peer node start"         hours ago         Up  hours          :->/tcp, :->/tcp   peer1.org1.example.com
[[email protected] 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: 
           

3. 執行 chaincode 的 invoke 交易

接下來,我們執行一個 invoke 交易,使得變量 a 向變量 b 轉帳 20,得到最終值為

peer chaincode invoke -o orderer.example.com: --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  -p \
github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02
           

等待一段時間後,可以通過 docker ps -a 來檢視新容器建構的容器,該容器的名稱為:

[[email protected] e2e_cli]# docker ps 
CONTAINER ID        IMAGE                                 COMMAND                  CREATED             STATUS              PORTS                                            NAMES
a8a8babec0d        dev-peer1.org1.example.com-mycc-   "chaincode -peer.a..."    hours ago         Up  hours                                                           dev-peer1.org1.example.com-mycc-
c2635a9a90a        dev-peer1.org1.example.com-mycc-   "chaincode -peer.a..."    hours ago         Up  hours                                                           dev-peer1.org1.example.com-mycc-
c5ad416ff2        hyperledger/fabric-tools              "/bin/bash"               hours ago         Up  hours                                                           cli
d23589e49d2        hyperledger/fabric-peer               "peer node start"         hours ago         Up  hours          :->/tcp, :->/tcp   peer1.org1.example.com
           

通過以下指令查詢 c 的變量:

[email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","c"]}'
-- :: UTC [msp] getMspConfig -> INFO  intermediate certs folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts: no such file or directory]
-- :: UTC [msp] getMspConfig -> INFO  crls folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/crls: no such file or directory]
-- :: UTC [msp] getMspConfig -> INFO  MSP configuration file not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/config.yaml]: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/config.yaml: no such file or directory]
-- :: UTC [msp] GetLocalMSP -> DEBU  Returning existing local MSP
-- :: UTC [msp] GetDefaultSigningIdentity -> DEBU  Obtaining default signing identity
-- :: UTC [msp/identity] Sign -> DEBU  Sign: plaintext: AAD070A6708031A0C08C3B098D60510..D7963631A0A0A0571756572790A0163 
-- :: UTC [msp/identity] Sign -> DEBU  Sign: digest: E7EE59436EB076C671CEA07334F11614DB106B7713FDF9583A7EFEDA81A 
Query Result: 
           

再次查詢 a 的變量:

[email protected]:/opt/gopath/src/github.com/hyperledger/fabric/peer# peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
-- :: UTC [msp] getMspConfig -> INFO  intermediate certs folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts: no such file or directory]
-- :: UTC [msp] getMspConfig -> INFO  crls folder not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/intermediatecerts]. Skipping.: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/crls: no such file or directory]
-- :: UTC [msp] getMspConfig -> INFO  MSP configuration file not found at [/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/config.yaml]: [stat /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected].example.com/msp/config.yaml: no such file or directory]
-- :: UTC [msp] GetLocalMSP -> DEBU  Returning existing local MSP
-- :: UTC [msp] GetDefaultSigningIdentity -> DEBU  Obtaining default signing identity
-- :: UTC [msp/identity] Sign -> DEBU  Sign: plaintext: AAD070A6708031A0C08BCB098D60510..D7963631A0A0A0571756572790A0161 
-- :: UTC [msp/identity] Sign -> DEBU  Sign: digest: F96F27107E16006971BA985F07284E56F4A495FB73686902B34DB281C172192 
Query Result: 
           

在其他節點分别執行一下指令

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

end

繼續閱讀