4个组织Fabric+Kafka共识环境部署及测试总结(上)

Posted 复杂美干货日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4个组织Fabric+Kafka共识环境部署及测试总结(上)相关的知识,希望对你有一定的参考价值。

本文主要介绍在FabricRelease1.0.5版本下,采用Kafka共识使用docker方式构建一个四个组织的测试环境。然后再介绍一些实际的测试用例。

       目前1.0.5是官方宣称的稳定版本。

       本文同时参考了当时media项目使用Fabric-alpha1.0的环境搭建流程。

 

  • 名词解释

  • 组织(Organization): 代表一组拥有共同信任的根证书的成员。同一个组织的成员节点在网络中可以被认为是同一身份,代表组织进行签名。通常多个组织为了进行数据沟通,可以加入到同一个通道中,形成一条链。

  • 联盟:由若干组织构成的集合,联盟中的成员会使用同一个排序服务,并且遵循相同的通道创建策略。

  • 通道:通道与绑定到该通道上的配置和数据(交易,账本,链码实例,成员身份等)一起构成一条完整的链。通道外的成员无法访问到通道内的数据,     通道可以理解为就是一条区块链。

  • 链码:经过安装和实例化操作后,就可被调用。在安装时,需要指定具体安装到哪个peer节点(Endorser),实例化时还需要指定在哪个通道实例化。链码之间还可以通过互相调用,创建更灵活的逻辑。

  • 背书节点:负责对交易提案进行检查和背书,计算交易执行结果。

  • 确认节点:负责在接受交易结果前再次检查合法性,接受合法交易对账本的修改,并写入区块链。

  • 锚节点(Anchor Peer):组织中负责对外通信的节点,为防止单点故障,可以在一个组织中设置多个锚节点。

  • Endorsement policy / 背书策略:背书策略定义了依赖于特定chaincode执行交易的channel上的peer和响应结果的必要组合条件(即返回Yes或No的条件)。背书策略由背书节点基于应用程序和对抵御不良行为的期望水平来组织管理。在安装和初始化Chaincode时需要指定背书策略。

  • Membership Service Provider / MSP:MSP是指为client和peer提供证书的系统抽象组件。Client用证书来认证他们的交易;peer用证书认证其交易背书。该接口与系统的交易处理组件密切相关,旨在使已定义的成员身份服务组件以这种方式顺利插入而不会修改系统的交易处理组件的核心。

  • 环境配置

  • 系统要求和组织拓扑

以下的测试基于阿里云,操作系统是CentOS7,内存4G,硬盘40G。

组织拓扑:每个Org中分配一个锚节点,负责对外通信。 所有的peer连上orderer服务实现共识。 目前orderer服务和kafka集群服务放在同一台机器上,每个peer各放一台机器。

 

  • 安装docker(所有机器都要安装)

root或sudo下执行以下命令

curl -fsSLhttps://get.docker.com/ | sh

 

安装完后进行版本验证:

docker -v

Docker version 17.11.0-ce, build 1caf76c

 

  • 通常要设置一下加速,不然镜像pull不下来。执行以下命令

curl -sSLhttps://get.daocloud.io/daotools/set_mirror.sh | sh -shttp://96eae579.m.daocloud.io

sudo service dockerrestart

 

  • 安装Go语言环境(只在管理机上安装就行,此处选择orderer作为管理机)

 wget--no-check-certificatehttps://studygolang.com/dl/golang/go1.9.2.linux-amd64.tar.gz

tar -zxvfgo1.9.2.linux-amd64.tar.gz

 

  • 安装完后配置GOPATH和环境变量

mkdir-p gopath/src/github.com/hyperledger

mkdir -pgopath/bin


vi $HOME/.bashrc

export GOROOT=$HOME/go

export GOPATH=$HOME/gopath

exportGOBIN=$GOPATH/bin

exportPATH=$PATH:$GOROOT/bin:$GOBIN

source $HOME/.bashrc

 

  • 获取Fabric代码

cd $GOPATH/src/github.com/hyperledger

git clone https://github.com/hyperledger/fabric.git

切换到release-1.0.5版本

      cd fabric

git branch -a

git checkout -b release-1.0.5

 

  • 生成Fabric运行的相关配置文件

suning项目用到的SDK和docker启动配置文件已经上传到github上,可以直接下载。

cd $GOPATH/src/github.com

git clone https://github.com/fkeitxflf/fabric-suning-sdk.git

 

根据测试要求,需要生成4个组织的拓扑,所以部署网络前要提前生成一些用于启动的配置文件。主要是以下几类文件:

  • MSP: 依赖于crypto-config.yaml文件,包括证书,私钥等

  • TLS相关:依赖于crypto-config.yaml文件,包括TLS证书

  • 系统通道初始区块:依赖configtx.yaml文件,用于启动orderer服务,配置网络中策略

  • 新建应用通道交易文件:依赖configtx.yaml文件,用于新建应用通道

  • 锚节点配置更新交易文件:依赖configtx.yaml文件,用于配置通道中各组织的锚节点信息

注:文件也可以通过fabric-ca生成,但是效率不高,也容易出错,暂时不推荐,目前fabric是提供cryptogen工具来生成。


根据需求修改crypto-config.yaml文件

vi$GOPATH/src/github.com/fabric-suning-sdk/suning-env/kafka/crypto-config.yaml

定义一个OrdererOrgs类型和一个PeerOrgs类型,其中PeerOrgs中又包含四个Orgs, 如下所示:

OrdererOrgs:

  - Name: Orderer

    Domain: example.com

    Specs:

      - Hostname: orderer

PeerOrgs:

  - Name: Org1

    Domain: org1.example.com

    Template:

      Count: 2 #一个组织中生成Count个数个主机

    Users:

      Count: 1    #生成指定个数的普通用户,除了Admin

  - Name: Org2

    Domain: org2.example.com

    Template:

      Count: 2

    Users:

      Count: 1

  - Name: Org3

    Domain: org3.example.com

    Template:

      Count: 2

    Users:

      Count: 1

  - Name: Org4

    Domain: org4.example.com

    Template:

      Count: 2

    Users:

      Count: 1

 

       接着通过cryptogen工具生成证书文件

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

 

       在kafka目录下生成一个crypto-config的证书文件夹,文件目录结构如下:

[root@order fabric-suning-test]#tree -L 3 kafka/crypto-config

crypto-config

├──ordererOrganizations

│   └── example.com

│       ├── ca

│       ├── msp

│       ├── orderers

│       ├── tlsca

│       └── users

└── peerOrganizations

    ├── org1.example.com

    │  ├── ca

    │  ├── msp

    │  ├── peers

    │  ├── tlsca

    │  └── users

    ├── org2.example.com

    │  ├── ca

    │  ├── msp

    │  ├── peers

    │  ├── tlsca

    │  └── users

    ├── org3.example.com

    │  ├── ca

    │  ├── msp

    │  ├── peers

    │  ├── tlsca

    │  └── users

    └── org4.example.com

        ├── ca

        ├── msp

        ├── peers

        ├── tlsca

        └── users

 

根据需求修改configtx.yaml文件,并使用configtgen工具生成Ordering服务启动初始区块,新通道的配置交易文件,以及锚节点配置更新文件

vi $GOPATH/src/github.com/fabric-suning-sdk/suning-env/kafka/configtx.yaml

  Profiles:
FourOrgsOrdererGenesis:
Orderer:
<<:*OrdererDefaults
Organizations:
-*OrdererOrg
Consortiums:
SampleConsortium:
Organizations:
-*Org1
-*Org2
-*Org3
-*Org4
FourOrgsChannel:
Consortium:SampleConsortium
Application:
<<:*ApplicationDefaults
Organizations:
-*Org1
-*Org2
-*Org3
-*Org4
 
Organizations:
-&OrdererOrg
Name:OrdererOrg
ID:OrdererMSP
MSPDir:crypto-config/ordererOrganizations/example.com/msp
 
-&Org1
Name:Org1MSP
ID:Org1MSP
MSPDir:crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
-Host:peer0.org1.example.com
Port:7051
 
-&Org2
Name:Org2MSP
ID:Org2MSP
MSPDir:crypto-config/peerOrganizations/org2.example.com/msp
AnchorPeers:
-Host:peer0.org2.example.com
Port:7051
 
-&Org3
Name:Org3MSP
ID:Org3MSP
MSPDir:crypto-config/peerOrganizations/org3.example.com/msp
AnchorPeers:
-Host:peer0.org3.example.com
Port:7051
 
-&Org4
Name:Org4MSP
ID:Org4MSP
MSPDir:crypto-config/peerOrganizations/org4.example.com/msp
AnchorPeers:
-Host:peer0.org4.example.com
Port:7051
 
Orderer:&OrdererDefaults
OrdererType:kafka# 采用kafka共识
Addresses:
-orderer.example.com:7050
BatchTimeout:2s
BatchSize:
MaxMessageCount:10
AbsoluteMaxBytes:98MB
PreferredMaxBytes:512KB
Kafka:
Brokers:
-kafka0:9092
-kafka1:9092
-kafka2:9092
-kafka3:9092
 
Organizations:
Application:&ApplicationDefaults
Organizations:

 

 

生成orderer.genesis.block

./configtxgen -profileFourOrgsOrdererGenesis -outputBlock./kafka/channel-artifacts/orderer.genesis.block

 

生成新建通道的配置交易

./configtxgen -profile FourOrgsChannel-outputCreateChannelTx ./kafka/channel-artifacts/sunningchannel.tx -channelIDsunningchannel

 

生成锚节点配置更新文件

/configtxgen -profile FourOrgsChannel-outputAnchorPeersUpdate ./kafka/channel-artifacts/Org1MSPanchors.tx -channelIDsunningchannel -asOrg Org1MSP

./configtxgen -profile FourOrgsChannel-outputAnchorPeersUpdate ./kafka/channel-artifacts/Org2MSPanchors.tx -channelIDsunningchannel -asOrg Org2MSP

./configtxgen -profile FourOrgsChannel-outputAnchorPeersUpdate ./kafka/channel-artifacts/Org3MSPanchors.tx -channelIDsunningchannel -asOrg Org3MSP

./configtxgen -profile FourOrgsChannel-outputAnchorPeersUpdate ./kafka/channel-artifacts/Org4MSPanchors.tx -channelIDsunningchannel -asOrg Org4MSP


到此,环境所需要的证书文件以及初始块,通道相关的配置文件都生成完毕,生成两个目录:crypto-config和channel-artifacts都存放于kafka目录下。这两个文件对应的路径后续是需要配置进docker-compose文件中去的。



以上是关于4个组织Fabric+Kafka共识环境部署及测试总结(上)的主要内容,如果未能解决你的问题,请参考以下文章

菜鸟系列Fabric——Fabric 1.4共识机制

菜鸟系列Fabric——Fabric 1.2 多机部署

kafka集群环境部署fabric1.4.6

fabric 共识模式深度解析

fabric1.4.1新特性 — raft排序服务

Fabric中Raft相关介绍翻译