在《HyperLedger 实战(一)-快速搭建一个 Fabric1.0 环境》一文中,快速搭建一个Fabric网络的过程中,使用的是官方提供的脚本。我们所做的只是简单的运行一个 shell 脚本,至于Fabric网络的搭建步骤,我们并不清楚。
接下来的这篇文章,将会简单介绍Fabric网络搭建的基本流程。在此基础之上,着重介绍几个重要的配置文件及工具。全文的架构如下:
前言
手动搭建Fabric,对于我们理解Fabric网络时怎样运行的,是十分必要的。当我们下载好了Fabric网络源码之后。基本步骤包括通过本地编译,生成对应的配置文件,新建通道,开启 Order 服务等等。总的来说,可以分为下面七个步骤:
预备网络中各项配置文件
Fabric 网络在启动之前,需要提前生成一些用于启动的配置文件。主要包括:
- MSP 相关文件(msp/*)
- TLS 相关文件(tls/*)
- 系统通道初始区块(orderer.genesis.block)
- 新建应用通道交易文件(businesschannel.tx)
- 锚节点配置更新交易文件 Org1MSPanchors.tx 和 Org2MSPanchors.tx)等。
各类型文件的功能如下图所示:
以上只是介绍了一下我们需要准备的配置文件。那么,这些文件需要怎么准备呢?
当然不需要我们来手动来建立那么多的配置文件了,我们要做的只需要编写以依赖配置文件,也就是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/peers 的目录下,有四个 peer 节点的配置文件:
org2. alibaba. com/users 的目录下,有一个 admin 用户和 6 个 User 用户:
依赖配置文件 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 原理-配置管理工具介绍
总结
通过本文,我们了解了搭建过程中的两个重要文件和两个重要工具:
- crypto-config.yaml和configtx.yaml文件
- cryptogen和configtxgen 工具
有了它们,就可以来生成我们搭建网络的所有基本配置文件。手动搭建网络的主要基础知识,到这里就讲完了。在后面的手把手搭建 Fabric 网络实战中,我们会把这些基础知识串联起来, 彻底理解 Fabric 网络的搭建流程。
转自知乎 苏小乐 :https://www.zhihu.com/people/shan-de-ding-zhu/activities