Hyperledger Fabric 区块链多机部署

Hyperledger Fabric 区块链多机部署

本文介绍如何从 Fabric 源码编译可执行程序,到多机部署 fabric区块链网络应用,以及链码测试样例。

  • 环境介绍
  • 源码编译、以及fabric 区块链网络部署环境准备
  • 编译 fabric区块链相关可执行程序
  • 多机部署fabric网络(solo共识)
  • 测试链码
  • 相关配置文件
  • 参考内容

环境介绍

fabric 项目是 hyperledger 项目中的一个联盟链子项目,本文介绍了,如何从fabric 源码编译相关组件以及工具,到实战部署一套fabric 区块链服务,来向大家介绍,并学习 fabric 区块链。

Fabric相关组件以及工具介绍:
- orderer 共识节点。为交易排序,并生成区块
- peer共识节点。为交易背书,并记录区块信息
- crypto用于生成区块链网络中相应用户的相关证书文件
- configtxgen 用于生成区块链系统链码的创世区块、新建通道的配置文件、以及组织中锚节点的配置文件

Fabric区块链网络部署环境介绍:
- 5台 Centos 7系统的虚拟机,硬件配置为:4核,8G 内存
- 1个 orderer 节点,4个 peer 节点,使用 solo 共识算法
   10.121.60.1 部署 orderer 节点
   12.10.121.60.2 – 10.121.60.3 部署peer 节点

源码编译、以及fabric 区块链网络部署环境准备

fabric 是基于 go 语言开发的,并且本例子中使用的测试用户链码例子,是基于 go 语言开发的,需要依赖 go 语言的编译开发环境。由于本文着重介绍 fabric 的应用,所以相关的环境请自行查找安装方式。
-安装 go 语言开发环境,并设置 相关环境变量 GOPATH、GOROOT、GOBIN(请安装 Go 1.8,以及以上版本)

-安装编译相关的依赖包 snappy-devel.x86_64、zlib-devel.x86_64、bzip2-devel.x86_64、libtoo-ltdl-devel.x86_64、libtool(依赖包是基于 centos 系统,其他 *nix 以及 mac 系统请自行查找并安装相关依赖文件)

-安装 docker、docker-compose(yum 上的 docker 版本过低,请从官网下载安装)

-安装 git(yum 上的 git 版本过低,请从官网下载安装)

-获取 fabric 源码(本次例子是基于 v1.0.0版本),并保存在目录 $GOPATH/src/github.com/hyperledger 下

-从 github.com 上下载 go 语言编译相关环境 gotools(golang.org 需要翻墙,所以从 github 上获取)

-在目录$GOPATH/src/golang/x/下执行
git clone https://github.com/golang/tools.git

编译 fabric区块链相关可执行程序

切换到 fabric 源码的目录下面,通过 makefile 文件,可以编译出 fabric 项目的全部可执行文件,如图:


fabric源码编译可执行程序列表

这次的演示例子中,只需要编译部分必要文件即可:orderer、peer、configtxgen、cryptogen。

以下命令,全部在$GOPATH/src/github.com/hyperledger/fabric 目录下执行。

1. 编译 go 相关工具

cp -r $GOPATH/src/golang.org/x/tools/ $GOPATH/src/github.com/hyperledger/fabric/gotools/build/gopath/src
make gotools

2. 编译 fabric基础环境

make buildenv

注意:编译过程中,如果遇到错误信息:
cp:build/docker/gotools/bin/protoc-gen-go:No such file or directory
解决方案:安装protocbuf
go get -u github.com/golang/protobuf/protoc-gen-go
cp $GOPATH/bin/protoc-gen-go
$GOPATH/src/github.com/hyperledger/fabric/build/docker/gotools/bin/

3. 编译区块链服务相关工具

-make orderer
-make peer
-make configtxgen
-make cryptogen
-编译的可执行程序生成在./fabric/build/bin目录下,设置该目录至 PATH环境变量

多机部署fabric网络(solo共识)

接下来,就是本文的重点,如何使用编译出来的可执行程序及相关工具,来搭建一个 fabric 区块链网络,并实现链码的部署以及测试。

分别在五台虚拟机中创建目录/etc/hyperledger/fabric,以下的命令 全部在该目录下执行,并且需要设置 fabric 网络执行的环境变量:
$FABRIC_CFG_PATH=/etc/hyperledger/fabric

1. 配置 fabric 网络用户拓扑关系

   -通过配置文件 crypto-config.yaml配置fabric 网络用户拓扑关系。Crypto-config.yaml 内容如下:

Crypto-config.yaml

   该配置文件,包含一个 orderer 节点,以及两个 peer组织,两个 peer 组织又分别包含了两个 peer 节点。

   -使用 cryptogen 工具,从crypto-config.yaml配置文件中生成用户相应的秘钥和证书文件:

cryptogen generate --config=./crypto-config.yaml --output ./crypto-config

   执行命令后,会在当前目录下生成文件夹 crypto-config,包含节点用户的秘钥以及证书文件,如图:
[图片上传失败...(image-57a246-1513748155452)]

   -通过scp命令分发 crypto-config文件夹,至其他4台虚拟机的/etc/hyperledger/fabric 目录下

   

2. 配置Orderer 节点的启动创世区块,新建通道交易的相关配置

   -通过配置文件 configtx.yaml 配置ordere 节点启动需要的创始区块信息,以及新建应用通道的交易信息。配置文件内容如下:

configtx.yaml

   -使用工具configtxgen生成 orderer 节点启动所需的创世区块:

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock genesis.block

   -使用工具 configtxgen生成创建应用通道的交易配置文件:

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx testchannel.tx -channelID testchannel

   -使用工具 configtxgen 生成更新组织锚节点的配置信息文件:

configtxgen –profile TwoOrgsChannel
–outputAnchorPeersUpdate ./Org1MSPanchors.tx –channelID testchannel –asOrg Org1MSP

configtxgen –profile TwoOrgsChannel
–outputAnchorPeersUpdate ./Org2MSPanchors.tx –channelID testchannel –asOrg Org2MSP

   -执行命令后,在当前目录下会生成如下文件:

genesis.block、testchannel.tx、Org1MSPanchors.tx、Org2MSPanchors.tx

   -通过 scp 命令发送 testchannel.yx 和 Org1MSPanchors.tx 两个文件至10.121.60.2
   -通过 scp 命令把 Org2MSPanchors.tx 文件至10.121.60.4

   

3. 设置虚拟机 Hosts 文件

   由于 fabric 网络启动相关的配置文件中,与网络地址相关的信息都是填写的域名,所以需要在 hosts 文件中配置域名与 ip 的对应关系,在我们这次的测试环境中处理 orderer 节点,其他的4个 peer 节点的虚拟机都需要配置相关的 hosts 信息:

10.121.60.1 orderer.test.com
10.121.60.2 peer0.org1.test.com
10.121.60.3 peer1.org1.test.com
10.121.60.4 peer0.org2.test.com
10.121.60.5 peer1.org2.test.com

   其中域名是根据 cryprto-config.yaml 的配置信息得来,后续的配置文件会详细说明

4. 配置 orderer 启动环境

   -在 orderer 节点的虚拟机配置 orderer 节点启动相关配置信息 orderer.yaml,并保存在/etc/hyperledger/fabric 目录下。相关配置文件内容见附件

 -  从 cypto-config 文件夹下,拷贝 orderer 节点的秘钥以及证书文件至 fabric 启动环境变量目录下:

cp –r ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/msp ./
cp –r ./crypto-config/ordererOrganizations/test.com/orderers/orderer.test.com/tls ./

   -根据前文的操作,fabric 网络 orderer 节点的执行环境目录下必须有以下文件及文件夹:

./crypto-config、./msp、./tls、orderer.yaml、genesis.block

   -启动 orderer 节点:orderer start

5. 配置 peer 启动环境

   -在 peer 节点的虚拟机配置 peer 节点启动相关配置信息 core.yaml,并保存在/etc/hyperledger/fabric 目录下。相关配置文件内容见附件。
   -从 crypto-config 文件夹下,拷贝 peer 节点的秘钥以及证书文件至 fabric 启动环境变量目录下:

cp –r ./crypto-config/peerOrganizations/org1.test.com/peers/peer0.org1.test.com/msp ./
cp –r ./crypto-config/peerOrganizations/org1.test.com/peers/peer0.org1.test.com/tls ./

注意标记部分应该在对应的目录下拷贝对应的文件信息(可以参考 hosts 配置信息的内容区分)

   -根据前文的操作,fabric 网络 peer 节点的执行环境目录下必须有以下文件及文件夹:

./crypto-config.tx、./msp、./tls、core.yaml、channel.tx 、 core.yaml、
Org1MSPanchors.tx(.2虚拟机)、
Org2MSPanchors.tx(.4虚拟机)

   -启动 peer 节点:peer node start

注意,拷贝 msp、tls 文件夹的动作可以不需要操作,只需要在对应的 orderer.yaml 以及 core.yaml 配置文件中设置相应的路径即可,这里为了能够与附件中的配置信息一致,故把相应的秘钥与证书文件拷贝至fabric 网络执行环境变量的目录下

6. 创建应用通道

 -  设置相应环境变量(根据相应环境修改配置)**

CORE_PEER_LOCALMSPID=”Org1MSP”
CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config \

/peerOrganizations/org1.test.com/users/Admin@org1.test.com/msp

 -  执行命令创建应用通道

peer channel create
-o orderer.test.com:7050
-c testchannel
-f ./channel.tx
--tls true
--cafile /etc/hyperledger/fabric/crypto-config
/ordererOrganizations/test.com/orderers
/orderer.test.com/msp/tlscacerts
/tlsca.test.com-cert/pem

   -命令执行成功以后,会在当前目录下生成 应用通道的创世区块testchannel.block 文件,只有使用该文件,才可以加入对应的应用通道。使用 scp命令分发至其他3台 peer 节点虚拟机的 fabric 网络执行环境变量下(/etc/hyperledger/fabric)。

7. 加入应用通道

   -执行命令加入应用通道:

peer channel join –b testchannel.block

   -命令执行成功后,会看到提示信息:

Peer joined the channel!

   -加入应用通道的peer 节点虚拟机都可以通过终端命令查看加入的通过信息,如图:

加入通道

  

8. 更新锚节点配置

   -执行命令更新负责代表组织与其他节点通信的锚节点:

peer channel update
-o orderer.test.com:7050
-c testchannel
-f ./Org1MSPanchors.tx
--tls true
--cafile /etc/hyperledger/fabric/crypto-config
/ordererOrganizations/test.com/orderers
/orderer.test.com/msp/tlscacerts
/tlsca.test.com-cert/pem

   -锚节点负责代表组织与其他组织中的节点进行 Gossip 通信。

测试链码

1. 安装链码

   -设置相应环境变量(根据相应环境修改配置):

CORE_PEER_LOCALMSPID=”Org1MSP”
CORE_PEER_MSPCONFIGPATH=/etc/hyperledger/fabric/crypto-config /peerOrganizations/org1.test.com/users/Admin@org1.test.com/msp

   -打包链码,由于这次的例子是基于 go 语言开发的智能合约,会依赖 go 的开发环境进行安装,如果使用 peer chaincode install 命令指定链码路径安装,可能会造成其他虚拟上安装的同样的链码无法同步实例化(go 开发环境不一致引起的问题),所以这里使用 go chaincode package 打包链码,然后通过安装打包链码文件进行链码的安装。

注意:这里进行测试的链码是 fabric 源码中的样例-p 指定的路径在命令执行的时候会自动根据 GOPATH 环境变量自动补全前缀,所以路径一个在 $GOPATH/src/目录下:
peer chaincode package –n test –p github.com/hyperledger/fabric/examples/chaincode /go/chaincode_exanple02 –v 1.0 test.pak
使用 scp 命令分发 test.pak 文件至其他3台 peer 节点虚拟机的 fabric 网络执行环境变量路径下。

 -  安装链码

peer chaincode install test.pak

   -安装链码的 peer 节点服务器可以通过终端命令查看已安装的链码信息,如图:

这里写图片描述

2. 初始化链码

   初始化链码,只需要在一台 peer 节点的服务器上执行实例化后自动创建链码容器,其他 peer 节点服务器会同步该实例化的链码信息,并创建链码容器

执行命令实例化链码:

peer chaincode instantiate
-o orderer.test.com:7050
-C testchannel
-n test
-v 1.0
-c‘{“Args”:[“init”,”a”,”100”,”b”,”200”]}’
-P “OR (‘Org1MSP.member’,’Org2MSP.member’)”
--tls true
--cafile /etc/hyperledger/fabric/crypto-config
/ordererOrganizations/test.com/orderers
/orderer.test.com/msp/tlscacerts
/tlsca.test.com-cert/pem

   命令执行后对交易用户 a赋值100,交易用户 b 赋值200代币。

   执行命令成功后,可以通过命令查看 peer 节点服务下已经实例化的链码信息,如图:


这里写图片描述

   使用命令查看链码容器信息:docker ps。如图:


这里写图片描述

3. 测试交易

   执行命令发送一笔交易,命令 a 向 b 转账 10个代币:

peer chaincode invoke
-o orderer.test.com:7050
-C testchannel
-n test
-c ‘{“Args”:[“invoke”,”a”,”b”,”10”]}’
--tls true
--cafile /etc/hyperledger/fabric/crypto-config
/ordererOrganizations/test.com/orderers
/orderer.test.com/msp/tlscacerts
/tlsca.test.com-cert/pem

   执行命令成功后,通过命令查询余额信息:

peer chaincode query \

-n test
-C testchannel
-c ‘{“Args”:[“query”,”a”]}’
结果如图:
[图片上传失败...(image-a26342-1513748155452)]

配置相关资源下载fabric多机部署配置文件

参考书籍与博客:

  1. 书籍:《区块链 原理、设计与应用》
  2. 博客:深蓝-Fabric1.0的多机部署
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容