启动各个节点:

./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 多机部署(二)的更多相关文章

  1. HyperLedger Fabric 多机部署(一)

    本文参考:http://www.lijiaocn.com/%E9%A1%B9%E7%9B%AE/2018/04/26/hyperledger-fabric-deploy.html  学习. 1.准备工 ...

  2. 基于docker的 Hyperledger Fabric 多机环境搭建(上)

    环境:ubuntu 16.04 Docker  17.04.0-ce go 1.7.4 consoul v0.8.0.4 ======================================= ...

  3. 基于docker的 Hyperledger Fabric 多机环境搭建(下)

    Docker环境部署见上一篇博客:http://www.cnblogs.com/cnblogs-wangzhipeng/p/6994541.html. 我们部署分布式容器服务后就要在上面部署Fabri ...

  4. Hyperledger Fabric——balance transfer(二)注册用户

    详细分析blance transfer示例的用户注册(register)与登录(enroll)功能. 源码分析 1.首先分析项目根目录的app.js文件中关于用户注册和登录的路由函数.注意这里的tok ...

  5. Fabric 1.0的多机部署

    Fabric1.0已经正式发布一段时间了,官方给出的单机部署的脚本也很完备,基本上傻瓜式的一键部署,直接运行官方的network_setup.sh up即可.但是在实际生产环境,我们不可能把所有的节点 ...

  6. HyperLedger Fabric 学习思路分享

    HyperLedger Fabric 学习思路分享 HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的.由Linux基金会主办的一个超级账本项目,它是一个目前非常 ...

  7. Hyperledger Fabric基础知识

    文章目录 什么是Hyperledger Fabric? Hyperledger架构是怎么工作的? Hyperledger交易如何执行 总结 Hyperledger Fabric基础知识 本文我们会介绍 ...

  8. 联盟链 Hyperledger Fabric 应用场景

    一.说明 本文主要通过一个例子分享以 Hyperledger Fabric 为代表的联盟链应用场景. 关于 Fabric 的相关概念请先参考文章 <Hyperledger Fabric 核心概念 ...

  9. HyperLedger Fabric 1.4 多机多节点部署(10.3)

    多机多节点指在多台电脑上部署多个组织和节点,本案例部署一个排序(orderer)服务,两个组织(org1,org2)和四个节点(peer),每个组织包括两个节点,需要五台计算机,计算机配置如下: 多机 ...

随机推荐

  1. pymysql 模块的使用

    一 . pymysql 的下载和使用 在python 中操作数据库需要用到 pymysql 模块.    (1) . pymysql 模块的下载 pip3 install pymysql (2) . ...

  2. 在Spring中基于JDBC进行数据访问时如何控制超时

    超时分类 超时根据作用域可做如下层级划分: Transaction Timeout > Statement Timeout > JDBC Driver Socket Timeout Tra ...

  3. Cmder配置

    中文乱码和重叠 当我们使用ls命令查看文件目录时,发现,中文被显示成了一些奇怪的乱码,将以下几行代码配置在cmder/config/user-aliases下即可解决问题: l=ls --show-c ...

  4. 51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158 1158 全是1的最大子矩阵  基准时间限制:1 秒 空 ...

  5. vue 升降排序

    本实例是根据工作进度的百分比来进行排序. html <div class="ibox-content"> <li v-for="(rangeItem,i ...

  6. CSS样式命名整理

    CSS样式命名整理 页面结构 容器: container/wrap 整体宽度:wrapper 页头:header 内容:content 页面主体:main 页尾:footer 导航:nav 侧栏:si ...

  7. 分享知识-快乐自己:Hibernate 关联映射

    关联关系映射--概念: 关联关系是使用最多的一种关系,非常重要.在内存中反映为实体关系,映射到DB中为主外键关系. 实体间的关联,即对外键的维护.关联关系的发生,即对外键数据的改变. 外键:外面的主键 ...

  8. 【Codeforces】Gym 101156E Longest Increasing Subsequences LIS+树状数组

    题意 给定$n$个数,求最长上升子序列的方案数 根据数据范围要求是$O(n\log n)$ 朴素的dp方程式$f_i=max(f_j+1),a_i>a_j$,所以记方案数为$v_i$,则$v_i ...

  9. 常见排序算法-php

    1.归并排序 $a = [1, 4, 6, 8, 10, 14, 16]; $b = [2, 3, 5, 8, 9, 11]; function merge_sort($a, $b) { $a_i = ...

  10. 洛谷P2530 [SHOI2001]化工厂装箱员

    题目描述 118号工厂是世界唯一秘密提炼锎的化工厂,由于提炼锎的难度非常高,技术不是十分完善,所以工厂生产的锎成品可能会有3种不同的纯度,A:100%,B:1%,C:0.01%,为了出售方便,必须把不 ...