啟動多節點叢集
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