HyperLedger Fabric 多机部署(二)
启动各个节点:
./orderer order节点启动方式
./peer node start peer节点启动方式
Admin@org1.example.com
使用hyperledger fabric可以通过SDK,也可以使用peer命令。
这里直接演示peer命令的用法。
在fabric-deploy中创建目录Admin@org1.example.com
,在其中存放该用户的所有资料。
mkdir Admin@org1.example.com
将用户证书复制到其中:
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/
为了方便使用,创建一个脚本Admin@org1.example.com/peer.sh
:
#!/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 ..
可以看到peer0.org1.example.com:7051
的状态是启动的。
为了减少演示过程中的重复操作,下面使用复制、替换的方式,准备另外两个用户的目录。
User1@org1.example.com
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/
注意上面的过程,就是把msp和tls目录替换了。
执行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 ..
Admin@org2.example.com
同样在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/
对于Admin@org2.example.com另一个组织的用户,core.yaml
需要替换成它自己组织(org2)的core.yaml:
cp peer0.org2.example.com/core.yaml Admin\@org2.example.com/
还需要将Admin\@org2.example.com/peer.sh
中peer地址修改为org2的peer地址:
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
注意peer.sh中需要修改的地方有两个: org1->org2,Org1->Org2。
验证:
$ 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
在Admin@org1.exampl.com目录中执行下面的命令,:
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
执行完成后,会生成一个mychannel.block
文件:
$ ls
core.yaml msp mychannel.block peer.sh tls tlsca.example.com-cert.pem
将mychannel.block复制一份到Admin\@org2.example.com/
中备用:
cp mychannel.block ../Admin\@org2.example.com/
cd ..
将peer加入channel
分别在Admin\@org1.example.com/
和Admin\@org2.example.com/
执行下面的命令:
cd Admin\@org1.example.com/
./peer.sh channel join -b mychannel.block
cd ..
因为org1有两个peer,因此需要将peer.sh中peer修改为peer1.org1.example.com
后,再添加一次:
./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
获取一份合约代码:
go get github.com/lijiaocn/fabric-chaincode-example/demo
注意代码的查看地址是:https://github.com/lijiaocn/fabric-chaincode-example
到Admin@org1.example.com/
目录下,以Admin@org1.example.com的身份打包合约:
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复制到Admin@org2.exmaple.com
中安装一次
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上调用合约,例如以admin@org2.example.com的进行写操作:
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复制到Admin@org2.exmaple.com
中安装一次
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
HyperLedger Fabric 多机部署(二)的更多相关文章
- HyperLedger Fabric 多机部署(一)
本文参考:http://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/04/26/hyperledger-fabric-deploy.html 学习. 1.准备工 ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(上)
环境:ubuntu 16.04 Docker 17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...
- 基于docker的 Hyperledger Fabric 多机环境搭建(下)
Docker环境部署见上一篇博客:http://www.cnblogs.com/cnblogs-wangzhipeng/p/6994541.html. 我们部署分布式容器服务后就要在上面部署Fabri ...
- Hyperledger Fabric——balance transfer(二)注册用户
详细分析blance transfer示例的用户注册(register)与登录(enroll)功能. 源码分析 1.首先分析项目根目录的app.js文件中关于用户注册和登录的路由函数.注意这里的tok ...
- Fabric 1.0的多机部署
Fabric1.0已经正式发布一段时间了,官方给出的单机部署的脚本也很完备,基本上傻瓜式的一键部署,直接运行官方的network_setup.sh up即可.但是在实际生产环境,我们不可能把所有的节点 ...
- HyperLedger Fabric 学习思路分享
HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...
- Hyperledger Fabric基础知识
文章目录 什么是Hyperledger Fabric? Hyperledger架构是怎么工作的? Hyperledger交易如何执行 总结 Hyperledger Fabric基础知识 本文我们会介绍 ...
- 联盟链 Hyperledger Fabric 应用场景
一.说明 本文主要通过一个例子分享以 Hyperledger Fabric 为代表的联盟链应用场景. 关于 Fabric 的相关概念请先参考文章 <Hyperledger Fabric 核心概念 ...
- HyperLedger Fabric 1.4 多机多节点部署(10.3)
多机多节点指在多台电脑上部署多个组织和节点,本案例部署一个排序(orderer)服务,两个组织(org1,org2)和四个节点(peer),每个组织包括两个节点,需要五台计算机,计算机配置如下: 多机 ...
随机推荐
- SAP 增强表MODSAP 和TFDIR
2.第二代增强(基于函数模块的增强),用于SMOD和CMOD 维护 在SAP发布的版本中,使用Call customer-function 'xxx'调用函数模块的, 所以你可以通过在程序中搜索 cu ...
- angularJs-HelloWorld
AngularJS使用了不同的方法,它尝试去补足HTML本身在构建应用方面的缺陷.AngularJS通过使用我们称为标识符(directives)的结构,让浏览器能够识别新的语法. 1使用双大括号{{ ...
- EASYARM-IMX283 nfs启动内核和根文件系统
EASYARM-IMX283(以下简称IMX283)默认采用从nand flash启动,但是在开发过程中因为要频繁的替换内核,我们更倾向于从nfs启动. 先看看IMX283中uboot中默认采用的启动 ...
- Word怎么在方框里打勾
插入--->符号--->其他符号--->在“子集”中选择“数学运算符”.第三行就可以找到“勾”符号,选中后点击“插入”即可. 或插入-->符号-->其他符号-->在 ...
- ffmpeg去水印
1.用potplayer打开有水印的视频文件,截图一张待用.2.用IrfanView打开保存的图片,调整到100%大小,按住鼠标左键框选水印位置,记下标题“Selection:”右边的4组数字.3.f ...
- css中字体大小在不同浏览器兼容性问题
css中使用font-size设定字体大小,不同浏览器的字体height一样,但是width不同,比如在火狐和谷歌中,font-size:20px,字体的高度变为20px,但是谷歌的字体宽度比火狐长 ...
- 时间序列数据库——索引用ES、聚合分析时加载数据用什么?docvalues的列存储貌似更优优势一些
加载 如何利用索引和主存储,是一种两难的选择. 选择不使用索引,只使用主存储:除非查询的字段就是主存储的排序字段,否则就需要顺序扫描整个主存储. 选择使用索引,然后用找到的row id去主存储加载数据 ...
- 为什么修改头文件make不重新编译
make是根据依赖文件的时间戳来决定要不要重新编译的.在: object: deplist # actions 中,可以把头文件加进deplist,这样修改头文件后,make就会重新编译了. 单纯地修 ...
- 运算符-----------instanceof
- [POI 2000] 公共串
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=2946 [算法] 建立多串后缀树 对于后缀树上的每个点 , 判断该节点所代表的等价类是 ...