文档章节

hyperledger-fabric多机部署体验

fangYC
 fangYC
发布于 2017/08/09 11:21
字数 1636
阅读 249
收藏 0
点赞 0
评论 0

#参考# http://www.cnblogs.com/studyzy/p/7237287.html

http://chuansong.me/n/1957487152126

#准备# 两个装载ubuntu16.04.2 LTS的客户机

#要求# 两个客户机安装好docker、go等必须的软件和工具,测试byfn.sh例子通过(可参考笔者的另一篇文章“hyperledger-fabric+docker安装体验”)

#计划#

  第一个VM包括节点:orderer.example.com 、peer0.org1.example.com 、peer0.org2.example.com 、cli

  第二个VM包括节点:peer1.org1.example.com 、peer1.org2.example.com 、cli

#提示#

  @如果orderer.example.com单独部署在一个VM中,那么不需要cli容器,同时以下步骤中的有关cli的全部注释

  @yaml文件中不能有tab键,必须用空格!!!!

#步骤#

1、进入第一个VM的fabric-samples/first-network目录下,运行命令:./byfn.sh -m generate来生成channel-artifacts和crypto-config文件夹,然后复制到另一个VM的同目录下,如果已有,则先删除 #mychannel是默认的channel名,接下来的channel有关步骤要和mychannel一致,可以通过byfn.sh第299行修改

附加:: 关于如何把ubuntu的文件复制到另一个上:

1)测试是否安装ssh服务    ssh localhost

2)如果出现ssh: connect to host localhost port 22: Connection refused的错误说明没有安装,使用命令安装    sudo apt install openssh-server

3)安装完之后开始复制   scp -r <要复制的文件夹> <目标用户名>@<目标ip>:<目标路径>

2、修改第二个VM的/etc/hosts文件,添加以下几行:

   ip是第一个VM的ip,后面是映射到第一个VM不同节点的域名

192.168.221.130 orderer.example.com
192.168.221.130 peer0.org1.example.com
192.168.221.130 peer0.org2.example.com

注:在实际环境中最好使用配置DNS的方式而不是修改hosts的方式

3、修改第二个VM的docker-compose-cli.yaml脚本文件:

1)把第二个节点中不存在的节点service都注释了

2)在cli容器的volume加入以下映射:(挂载/etc/hosts是为了把主机的hosts映射带入cli容器)
	- ./peer/:/opt/gopath/src/github.com/hyperledger/fabric/peer/
	- /etc/hosts:/etc/hosts

3)注释cli中不存在的depends_on和command(cli的command执行一段chaincode查询和调用,以及打印日志,这些在单机部署中启动network时可以看到)

4)修改cli的environment,以下句子中在对应的地方改为cli要联系的那个peer:
	- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
	- CORE_PEER_LOCALMSPID=Org1MSP
	- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
	-CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
            - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
  	        - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

4、参照3步骤对第一个VM进行操作,其中,有区别的是,不需要挂载/etc/hosts

5、对两个VM都修改base/peer-base.yaml,添加volumes:(挂载/etc/hosts是为了把主机的hosts映射带入peer容器)

volumes:
-/etc/hosts:/etc/hosts

6、运行两个VM上的脚本,启动容器,要先启动VM1,也就是order所在的VM

docker-compose -f docker-compose-cli.yaml up -d

7、进入第一个VM,进入cli(由于环境变量,连接的是peer0.org1.example.com):

    docker exec -it cli bash

设置cli的环境变量,在对应的地方改为cli要联系的那个peer:

CORE_PEER_ADDRESS=peer0.org1.example.com:7051

CORE_PEER_LOCALMSPID=Org1MSP

CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt

CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key

CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

8、创建channel:

peer channel create -o orderer.example.com:7050 -c <channel_name> -f ./channel-artifacts/channel.tx --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
注:在VM当前目录/peer下会有一个<channel_name>.block文件,把它复制到其他的VM中去。需要注意的是,peer目录建立出来的是root权限,需要通过scp复制到其他VM的其他目录,再通过mv命令移动到peer中【笔者是这样做法,不知道有没有直接ssh获得远程机root的方法】

9、把cli对应连接的节点加入channel,执行以下命令,然后执行exit退出当前cli

peer channel join -b <channel_name.block>

10、重复执行7和9的步骤,通过改变cli的环境变量把对应的节点加入channel,注意,节点在哪个VM就要进入哪个VM进行操作

11、安装chaincode,每个节点都要,需要改变cli环境变量操作,如第七步

peer chaincode install -n <chaincode_name> -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/chaincode_example02

12、初始化chaincode,只需要在一个节点进行

peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C <channel_name> -n <chaincode_name> -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"

13、测试chaincode

1)在第一个VM中进入cli容器,执行invoke交易:(从b转50给a)

	peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C <channel_name> -n <chancode_name> -c '{"Args":["invoke","b","a","50"]}'

2)在第二个VM进入cli容器,中执行query交易:(查询b的余额)

	peer chaincode query -C <channel_name> -n <chancode_name> -c '{"Args":["query","b"]}'

3)发现b的余额为150,说明多机部署成功

#附笔者实践中发生的错误情况#

1)可能出现证书密钥不能识别,这个问题笔者也无法彻底解决,没有完全理解其过程,只能通使用重新生成证书等资料的方式

2)可能出现通道文件或者chancode相关文件没有找到,这个可以通过去对应路径寻找文件是否存在,要特别住要注意文件名字,注意上述代码中channel_name和chancode_name分别是通道名和链码实例名,因为过程中产生的文件都与这两个名字相关,产生文件的路径为,不同peer节点容器中的/var/hyperledger/production目录下

3)如果出现证书文件没有找到,重新生成并检查

4)可能出现连接错误,这个可以先检查/etc/hosts、docker-compose-cli.yaml和base/peer-base.yaml中的修改有没有出错,特别是hosts文件的挂载,然后再容器中用ping命令检查是否可以连接到,另外,base/docker-compose-base.yaml文件中的端口映射查看下有没有出现端口重复,经过单机测试后没有修改是不会有错的,但是如果经过修改了,一定要保证端口不重复映射,当然,如果一个节点一个VM的话那就没问题了

DONE.

© 著作权归作者所有

共有 人打赏支持
fangYC
粉丝 0
博文 9
码字总数 8145
作品 0
揭阳
程序员
HyperLedger Fabric 学习思路分享

HyperLedger Fabric 学习思路分享     HyperLedger Fabric最初是由Digital Asset和IBM公司贡献的、由Linux基金会主办的一个超级账本项目,它是一个目前非常流行并广为人知的区块链网络框...

Aberic
06/14
0
0
IBM Blockchain 101:开发人员快速入门指南

IBM Blockchain 101:开发人员快速入门指南 如何设置区块链网络并开始编码 Nikhil Gupta 和Joshua Horton 2017 年 2 月 14 日发布 在 IBM Cloud 上进行开发-- 免费试用 30 天 您可以获得 2G...

Joshua Horton
2017/02/14
0
0
hyperledger v1.0.5 区块链运维入门

摘要 你网上搜索hyperledger大部分文章是讲解开发环境的安装与配置,没有一篇关于怎样运维区块链的文章。当你配置好开发环境,写好合约,怎样落地呢?却很少文章提及。 要将区块链落地,我们...

雪花又一年
04/18
0
0
区块链入门学习网址大全

区块链学习网址 官网: 官网文档: docker入门教程: 区块链技术指南: 超能云区块链: 超能云免费主机: Hyperledger fablic源码: Hyperledger fablic 0.6: Hyperledger fablic 1.0: Hy...

zhaoliang1131
2017/01/24
0
0
用Kubernetes部署超级账本Fabric的区块链即服务(2)

题图摄于三藩市Pier 7:Coit Tower 3. 源码的说明与使用 3.1 环境准备 假定 K8s 平台已经成功部署,并且在各个 worker 节点已经预先下载相应的 Fabric v1.0.0 的 Docker 镜像,如表3-1。(预...

q48s71bczbeylou9t0n
2017/08/17
0
0
区块链Hyperledger Fabric在阿里云容器服务Kubernetes中的进阶使用技巧(一)

我们在支持用户在阿里云容器服务Kubernetes集群中使用容器服务区块链Hyperledger Fabric配置部署解决方案、或者使用自建的基于Hyperledger Fabric的区块链方案的过程中,逐渐积累了一些相关的...

余珊
2017/12/30
0
0
基于容器技术的阿里云区块链优势和实现方法

以下内容根据演讲PPT及现场分享整理: 在2017年北京云栖大会的“开发者服务专场”上,阿里云高级技术专家余珊带来了《敏捷智连——基于容器技术的区块链业务创新》的精彩分享。分享中,他重点...

1993wang
01/03
0
0
开源区块链分布式账本 - Hyperledger Fabric

Hyperledger Fabric 是由 Linux 基金会发起创建的开源区块链分布式账本。 Hyperledger Fabric Java SDK 的中文文档(由八斗金链翻译) src="http://www.badouchain.com/wp-content/themes/b...

匿名
2016/07/01
0
0
HyperLedger-fabric V0.6 for CentOS7.2开发环境搭建

BlockChain联盟链中的Hyperledger项目中的Fabrica项目是商业联盟应用区块链的基石之作,现在来搭建一个运行环境,进行技术验证。 安装组件如下: 1.Docker-compose:Docker 容器管理; 2.Go l...

newthink
06/26
0
0
超级账本Fabric 1.0 多节点集群的部署(3)

题图摄于美国加州17英里:Lone Cypress ( 接上期,部署配置中大量使用了 docker 和 docker compose ,建议不熟悉的读者先补充相关知识。) 2.3 多节点 Fabric 的配置 以下各VM的工作目录为:...

q48s71bczbeylou9t0n
2017/07/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Win10专业版安装GIT后使用Git Bash闪退解决办法

百度后把过程和最终解决办法记录下来: 百度首先出来的解决办法如下: 来自:https://segmentfault.com/q/1010000012722511?sort=created 重启电脑 重新安装 安装到C盘 尝试网上的教程 \Git...

特拉仔
19分钟前
0
0
设计模式

1.装饰器模式 概念 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。 实现 增加一个修饰类包裹原来的...

EasyProgramming
33分钟前
1
0
用python2和opencv进行人脸识别

一、安装cv2 sudo apt-get install python-opencv opencv-data 二、 Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 ...

wangxuwei
33分钟前
0
0
python模板中循环字典

{% for k,v in user.items %} {{ k}} {{ v}} {% endfor %}

南桥北木
今天
0
0
Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类...

HOT_POT
今天
0
0
获取调用方的className

/** * 获取调用方的class * @return */private static String getInvoke() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); S......

iborder
今天
0
0
深入了解一下Redis的内存模型!

一前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符...

Java填坑之路
今天
1
0
从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加。在这个背景下,平台的技术架构也完成了从传统的单体应用到微...

老道士
今天
1
0
大数据学习的各个阶段

第一阶段:Linux课程讲解Linux基础操作,讲的是在命令行下进行文件系统的操作,这是Hadoop学习的基础,后面的所有视频都是基于linux操作的。鉴于很多学员没有linux基础,特增加该内容,保证零linux...

董黎明
今天
0
0
CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部