HyperLedger Fabric 多机部署(二)
启动各个节点:./orderer order节点启动方式
./peer node start peer节点启动方式
[email?protected]使用hyperledger fabric可以通过SDK,也可以使用peer命令。 这里直接演示peer命令的用法。 在fabric-deploy中创建目录 mkdir [email?protected]
将用户证书复制到其中: cp -rf certs/peerOrganizations/org1.example.com/users/Admin@org1.example.com/* Admin@org1.example.com/
还需要将core.yaml复制到用户目录下: cp peer0.org1.example.com/core.yaml Admin@org1.example.com/
为了方便使用,创建一个脚本 #!/bin/bash PATH=`pwd`/../bin:$PATH export FABRIC_CFG_PATH=`pwd` export CORE_PEER_TLS_ENABLED=true export CORE_PEER_TLS_CERT_FILE=./tls/client.crt export CORE_PEER_TLS_KEY_FILE=./tls/client.key export CORE_PEER_MSPCONFIGPATH=./msp export CORE_PEER_ADDRESS=peer0.org1.example.com:7051 export CORE_PEER_LOCALMSPID=Org1MSP export CORE_PEER_TLS_ROOTCERT_FILE=./tls/ca.crt export CORE_PEER_ID=cli export CORE_LOGGING_LEVEL=INFO peer $*
然后直接通过这个脚本访问peer0.org1.example.com: $ ./peer.sh node status
status:STARTED
2018-04-29 14:32:03.517 CST [main] main -> INFO 001 Exiting.....
$ cd ..
可以看到 为了减少演示过程中的重复操作,下面使用复制、替换的方式,准备另外两个用户的目录。 [email?protected]User1与Admin1使用相同的peer,因此只需要替换用户证书即可: cp -rf Admin@org1.example.com/ User1@org1.example.com/
rm -rf User1@org1.example.com/msp
rm -rf User1@org1.example.com/tls
cp -rf certs/peerOrganizations/org1.example.com/users/User1@org1.example.com/* User1@org1.example.com/
执行peer.sh检验: $ cd User1@org1.example.com
$ ./peer.sh node status
status:STARTED
2018-04-29 14:37:48.251 CST [main] main -> INFO 001 Exiting.....
$ cd ..
[email?protected]同样在Admin@org1.example.com/的基础上修改,替换掉msp和tls目录: cp -rf Admin@org1.example.com/ Admin@org2.example.com/
rm -rf Admin@org2.example.com/msp/
rm -rf Admin@org2.example.com/tls/
cp -rf certs/peerOrganizations/org2.example.com/users/Admin@org2.example.com/* Admin@org2.example.com/
对于[email?protected]另一个组织的用户, cp peer0.org2.example.com/core.yaml Admin@org2.example.com/
还需要将 export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
export CORE_PEER_LOCALMSPID=Org1MSP
修改为:
export CORE_PEER_ADDRESS=peer0.org2.example.com:7051
export CORE_PEER_LOCALMSPID=Org2MSP
验证: $ cd Admin@org2.example.com
$ ./peer.sh node status
status:STARTED
2018-04-29 14:44:22.395 CST [main] main -> INFO 001 Exiting.....
$ cd ..
创建channel与peer的设置准备channel文件这里用命令行演示channel的创建与peer的设置。(也可以通过SDK,SDK将单独讨论) 需要再次回到fabric-deploy目录中,用configtxgen生成channel文件: ./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx mychannel.tx -channelID mychannel
channel名字为mychannel,生成的mychannel.tx备用。 还需要为每个组织的peer生成一个anchor文件,每个组织只需要一个: ./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
./bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
生成的Org1MSPanchors.tx和Org2MSPanchors.tx备用。 这里生成的三个文件的含义与内容,见超级账本HyperLedger Fabric中Channel配置的读取转换。 下一步操作中要访问orderer.example.com,需要将验证orderer.example.com的根证书复制到用户目录中: cp certs/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem Admin@org1.example.com/
cp certs/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem User1@org1.example.com/
cp certs/ordererOrganizations/example.com/tlsca/tlsca.example.com-cert.pem Admin@org2.example.com/
创建channel在[email?protected]目录中执行下面的命令,: cd Admin@org1.exampl.com
./peer.sh channel create -o orderer.example.com:7050 -c mychannel -f ../mychannel.tx --tls true --cafile tlsca.example.com-cert.pem
执行完成后,会生成一个 $ ls
core.yaml msp mychannel.block peer.sh tls tlsca.example.com-cert.pem
将mychannel.block复制一份到 cp mychannel.block ../Admin@org2.example.com/
cd ..
将peer加入channel分别在 cd Admin@org1.example.com/
./peer.sh channel join -b mychannel.block
cd ..
因为org1有两个peer,因此需要将peer.sh中peer修改为 ./peer.sh channel join -b mychannel.block
在Admin@org2.example.com/中执行一次: cd Admin@org2.example.com/
./peer.sh channel join -b mychannel.block
cd ..
可以用channel list查看peer所在channel $ ./peer.sh channel list
2018-04-29 16:37:47.016 CST [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized
Channels peers has joined:
mychannel
2018-04-29 16:37:47.018 CST [main] main -> INFO 002 Exiting.....
最后需要每个组织指定一个anchor peer,anchor peer是组织用来接收orderer下发的区块的peer: cd Admin@org1.example.com/
./peer.sh channel update -o orderer.example.com:7050 -c mychannel -f ../Org1MSPanchors.tx --tls true --cafile ./tlsca.example.com-cert.pem
cd ..
cd Admin@org2.example.com/
./peer.sh channel update -o orderer.example.com:7050 -c mychannel -f ../Org2MSPanchors.tx --tls true --cafile ./tlsca.example.com-cert.pem
cd ..
安装合约(chaincode)在hyperledger fabric中,合约被称为chaincode。 需要安装一个go语言的开发环境,安装方法这里就不介绍了。 这里将go的开发环境安装在fabric-deploy所在的机器上。 直接用 go get github.com/lijiaocn/fabric-chaincode-example/demo
注意代码的查看地址是:https://github.com/lijiaocn/fabric-chaincode-example 到 cd Admin@org1.example.com/
执行下面命令进行合约打包与签署: ./peer.sh chaincode package demo-pack.out -n demo -v 0.0.1 -s -S -p github.com/lijiaocn/fabric-chaincode-example/demo
./peer.sh chaincode signpackage demo-pack.out signed-demo-pack.out
然后安装合约: ./peer.sh chaincode install ./signed-demo-pack.out
安装之后,可以用chaincode list查看peer上已经安装的合约。 $ ./peer.sh chaincode list --installed
Get installed chaincodes on peer:
Name: demo,Version: 0.0.1,Path: github.com/lijiaocn/fabric-chaincode-example/demo,Id: 3d733bd28accf77b06b2bec065d8ce7315bd7c5441c51beea4650982f79eab46
2018-04-29 18:57:54.327 CST [main] main -> INFO 001 Exiting....
chaincode只能用Admin安装,并且需要在每个peer上都安装一次。 将peer0.org1.example.com切换为peer1.org1.example.com后(修改peer.sh中的地址),再次安装一次: ./peer.sh chaincode install ./signed-demo-pack.out (不需要重新打包签署)
cd ..
将signed-demo-pack.out复制到 cp Admin@org1.example.com/signed-demo-pack.out Admin@org2.example.com/
cd Admin@org2.example.com/
./peer.sh chaincode install ./signed-demo-pack.out
合约初始化合约安装之后, cd Admin@org1.example.com/
./peer.sh chaincode instantiate -o orderer.example.com:7050 --tls true --cafile ./tlsca.example.com-cert.pem -C mychannel -n demo -v 0.0.1 -c ‘{"Args":["init"]}‘ -P "OR(‘Org1MSP.member‘,‘Org2MSP.member‘)"
第一进行合约初始化的时候的会比较慢,因为需要需要创建、启动容器。 合约调用可以在任意一个peer上调用合约,例如以[email?protected]的进行写操作: cd Admin@org2.example.com/
./peer.sh chaincode invoke -o orderer.example.com:7050 --tls true --cafile ./tlsca.example.com-cert.pem -C mychannel -n demo -c ‘{"Args":["write","key1","key1valueisabc"]}‘
如果是第一次在一个peer访问一个合约,这个peer需要先启动容器,响应会比较慢。进行写操作(invoke命令)时,需要指定orderer(-o orderer.example.com:7050)。 进行查询操作时,不需要指定orderer,例如: cd User1@org1.example.com/
./peer.sh chaincode query -C mychannel -n demo -c ‘{"Args":["query","key1"]}‘
更新合约将更改后的合约重新打包,使用一个新的版本号: cd Admin@org1.example.com/
执行下面命令进行合约打包与签署: ./peer.sh chaincode package demo-pack-2.out -n demo -v 0.0.2 -s -S -p github.com/lijiaocn/fabric-chaincode-example/demo
./peer.sh chaincode signpackage demo-pack-2.out signed-demo-pack-2.out
然后安装合约: ./peer.sh chaincode install ./signed-demo-pack-2.out
更新的合约不需要初始化,需要进行更新操作: ./peer.sh chaincode upgrade -o orderer.example.com:7050 --tls true --cafile ./tlsca.example.com-cert.pem -C mychannel -n demo -v 0.0.2 -c ‘{"Args":["init"]}‘ -P "OR(‘Org1MSP.member‘,‘Org2MSP.member‘)"
新的合约也需要在每个peer上单独安装。 因此需要将peer0.org1.example.com切换为peer1.org1.example.com后,再次安装一次: ./peer.sh chaincode install ./signed-demo-pack-2.out (不需要重新打包签署)
将signed-demo-pack.out复制到 cp Admin@org1.example.com/signed-demo-pack-2.out Admin@org2.example.com/
cd Admin@org2.example.com/
./peer.sh chaincode install ./signed-demo-pack-2.out
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |