全文架构
前言
手动搭建Fabric,对于我们理解Fabric网络时怎样运行的,是十分必要的。当我们下载好了Fabric网络源码之后。基本步骤包括通过本地编译,生成对应的配置文件,新建通道,开启Order服务等等。总的来说,可以分为下面七个步骤:
图1-启动一个Fabric网络的七个步骤
预备网络中各项配置文件
Fabric网络在启动之前,需要提前生成一些用于启动的配置文件。主要包括:
- MSP相关文件(msp/*)
- TLS相关文件(tls/*)
- 系统通道初始区块(orderer.genesis.block)
- 新建应用通道交易文件(businesschannel.tx)
- 锚节点配置更新交易文件Org1MSPanchors.tx和Org2MSPanchors.tx)等。
各类型文件的功能如下图所示:
表1-各项配置文件的功能
以上只是介绍了一下我们需要准备的配置文件。那么,这些文件需要怎么准备呢?
当然不需要我们来手动来建立那么多的配置文件了,我们要做的只需要编写以依赖配置文件,也就是crypto-config.yaml和configtx.yaml文件。然后利用工具cryptogen和configtxgen来根据以上两个配置文件,自动生成最左侧我们需要的各项配置文件。
如何理解文件的命名?
crypto 的意思是加密。crypto-config,即加密配置。在Fabric中,和加密相关的组件有TLS、MSP等。故crypto-config.yaml文件主要是配置TLS以及MSP等功能。
transaction的英文缩写是TX,表示交易。configtx,表示交易配置。所以和交易相关的配置,如应用通道、锚节点、Ordering服务等,都是在config.tx文件中配置的。
总结:
在规范的代码开过程中,一般都会对变量以及文件的命令,有一定的要求,以期达到见名之意的效果。所以,在学习一些框架的过程中,我们最好弄懂每个变量以及文件名字的含义,这样可以更好的帮助我们理解和消化知识点。
依赖配置文件 crypto-config.yaml
如表1所示,crypto-config.yaml是MSP和TLS相关文件的依赖配置文件。它将Orderer和Peer两种节点的MSP都定义到了同一个文件中。
该文件的主要作用:
-
- 指定网络的拓扑结构
- 通过配置模板信息,来定义组织成员对应的结构。
- cryptogen可以快速根据该配置文件自动批量生成所需要的密钥和证书文件。
crypto-config.yaml指定了网络的拓扑结构,主要包括OrdererOrgs以及PeerOrgs两部分。
OrdererOrgs的配置如下:
OrdererOrgs:
- Name: Orderer
Domain: example.com
Specs:
- Hostname: orderer
OrdererOrgs:排序节点的组织定义。在定义排序节点时候,会同时定义节点名称、节点域名以及规范列表中节点所需的不带域名的主机名。
PeerOrgs:对于peer节点的组织定义,有两种写法。
一种是利用编辑配置文件中的一组Specs规范条目。每个规范条目由两个字段组成:Hostname和CommonName.
PeerOrgs:
- Name: Org1
Domain: org1.example.com
EnableNodeOUs: true
Specs:
- Hostname: foo
CommonName: foo27.org5.example.com
- Hostname: bar
- Hostname: baz
Hostname表示组织中节点的主机名称。CommonName是一个可选参数,可以通过重写来指定节点的名称。如果不指定CommonName,则其节点默认的名称为{{.Hostname}}.{{.Domain}},即bar和baz这两个节点文件目录和域名分别为http://bar.org1.example.com和http://baz.org1.example.com。
另一种是官方配置文件中的写法,使用模板来定义:
- Name: Org2
Domain: org2.alibaba.com
EnableNodeOUs: true
Template:
Count: 4
Users:
Count: 6
在该配置文件中,有指定组织名称、域名和模板信息。Template下的Count指的是该组织下组织节点的个数.Users指的是该组织中除了Admin之外的用户的个数。根据上述配置,生成的org2组织下的peer节点证书和user证书文件夹如下:
org2.alibaba.com组织文件目录
org2. alibaba. com/peers的目录下,有四个peer节点的配置文件:
peers目录架构
org2. alibaba. com/users的目录下,有一个admin用户和6个User用户:
users目录架构
依赖配置文件configtx.yaml
configtx.yaml包含网络的定义,并给出了网络组件的拓扑结构还指出每个网络实体的加密材料的存储位置。用来编写配置系统通道初始区块文件,新建应用通道配置文件,锚节点配置更新交易文件等。
该文件的主要作用:
-
- 配置一系列通道配置模板,包括Orderer系统通道模板和应用通道类型模板;
- 一系列组织结构定义,被其他部分引用。这里的组织结构,要和crypto-config.yaml中定义的组织结构一致。因为每一个组织都要靠前者生成一套证书和密钥文件。
- 定义Orderer系统通道相关配置,包括Orderer服务配置和参与Ordering服务的组织信息。
- 定义应用通道相关配置,主要包括参与应用网络的可用组织信息。
在正式进入configtx.yaml文件之前,需要快速学习一下Yaml的语法。可以参考:
在configtx.yaml文件,主要以下个部分组成:
Profile: 不同配置的概要文件可以在这里进行编码,将 Profile参数指定为configtxgen工具的参数。(英文解释 Different configuration profiles may be encoded here to be specified as parameters to the configtxgen tool.)
Organizationtions:定义了不同的组织标志,这些标志将在Profile部分被引用。
Orderer:定义了排序服务的相关参数,这些参数将用于创建创世区块。( This section defines the values to encode into a config transaction or genesis block for orderer related parameters)
Application:该部分定义了交易配置相关的值,以及包含和创世区块相关的值。(This section defines the values to encode into a config transaction or genesis block for application related parameters)
Channel:该部分定义了交易配置相关的值,以及包含和创世区块相关的值。(This section defines the values to encode into a config transaction or genesis block for channel related parameters.)
Capabilities:该部分用户定义Fabric网络的功能。
在这六个部分中,Profile部分,主要是引用其余五个部分的参数。configtxgen通过调用Profile参数,可以实现生成特定的区块文件。其中,profile的配置参数如下所示:
Profiles:
TwoOrgsOrdererGenesis:
<<: *ChannelDefaults
Orderer:
<<: *OrdererDefaults
Organizations:
- *OrdererOrg
Capabilities:
<<: *OrdererCapabilities
Consortiums:
SampleConsortium:
Organizations:
- *Org1
- *Org2
TwoOrgsChannel:
Consortium: SampleConsortium
Application:
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Capabilities:
<<: *ApplicationCapabilities
# 重复的内容在YAML中可以使用&来完成锚点定义,使用*来完成锚点引用
在Profile配置中,TwoOrgsOrdererGenesis,OrdererDefaults,SampleConsortium,TwoOrgsChannel,以及ApplicationCapabilities 五个字段,可以自定义完成自己搭建联盟链的相关名称。
二进制自动生成工具
Fabric中提供了一系列辅助工具,包括cryptogen(生成组织结构和身份文件)、configtxgen(生成配置区块和配置交易)、configtxlator(解读配置信息)等。
在预备网络中各项配置文件过程中,我们利用cryptogen和configtxgen来生成我们所需要的配置文件了。这两个工具,需要我们在本地自动编译生成。生成cryptogen的步骤如下:
cd ~/go/src/github.com/hyperledger/fabric
make cryptogen
最终,生成的cryptogen工具会在该目录下:
build/bin/cryptogen
//以fabric为根目录
同理,生成configtxgen的步骤如下:
cd ~/go/src/github.com/hyperledger/fabric
make configtxgen
最终,生成的cryptogen工具会在该目录下:
build/bin/configtxgen
//以fabric为根目录
在上面两个步骤中,我们生成了cryptogen和configtxgen工具,也拥有了crypto-config.yaml和configtx.yaml文件。接下来,就是用他们来生成我们需要的各类配置文件了:
比如,生成我们需要的创世区块,可以用如下命令:
cd examples/e2e_cli/
../../build/bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
这里的TwoOrgsOrdererGenesis,定义在了我们的configtx.yaml文件中了。最终,将生成的创世区块放到channel-artifacts目录下。
生成其他的文件,可以使用类似的命令,具体的步骤,会在后面的实战笔记中来一一介绍。
使用介绍,参见:
苏晓乐:10-HyperLedger-Fabric原理-配置管理工具介绍zhuanlan.zhihu.com
总结
通过本文,我们了解了搭建过程中的两个重要文件和两个重要工具:
- crypto-config.yaml和configtx.yaml文件
- cryptogen和configtxgen工具
有了它们,就可以来生成我们搭建网络的所有基本配置文件。手动搭建网络的主要基础知识,到这里就讲完了。在后面的手把手搭建Fabric网络实战中,我们会把这些基础知识串联起来, 彻底理解Fabric网络的搭建流程。