超级账本Fabric学习(二)Fabric1.0.0版网络搭建(上)
- 1:配置文件准备
- 1.1:公私钥与证书
- 1.2:配置与介绍crypto-config.yaml文件
- 1.3:配置与介绍configtx.yaml文件
- 2:创世配置构造
- 2.1:MSP证书
- 2.2:Orderer创世区块
- 2.3:Channel创世交易/区块(通道的配置交易)
- 2.4:组织主节点配置文件
看完博客之后有喜欢的网友可以点赞关注哦,毕竟大家的支持就是我写博客的动力。
2020年8月7日,整理于家中。
注意:这里我们虽说是配置文件和搭建网络,但是为了大家方便理解我们并不做修改,多是介绍和讲解
1:配置文件准备
1.1:公私钥与证书
Fabric中有两种类型的公私钥和证书
- 第一种:一种是给节点之间,为了通讯安全而准备的TLS证书
- 第二种:另一种是用户登录和权限控制的用户证书
- (本来这些证书都应该是由CA来颁发的,但是我们这里是测试环境,并没有启用CA节点,这里我们使用cryptogen工具来生成这两种证书)
1.2:配置与介绍crypto-config.yaml文件
注意:该文件在 fabric-samples/first-network目录下
作用:
- crypto-config.yaml主要用于配置组织节点的个数,以及每个组织里面有用户的个数。
- 后面cryptogen工具还会根据该文件作为参数配置,生成这些组织,节点,用户相应的证书
也可以说是cryptogen工具读取这个配置文件产生证书和密钥。
重点:crypto-config.yaml文件源码详解
整个crypto-config.yaml源码可以分为两个部分:OrdererOrgs(排序节点组织) 和PeerOrgs(peer节点组织)
图片当中的注释可以参考
OrdererOrgs部分:
注意:上面源码中,我们使用了Specs的方式来定义了多个orderer节点,目前有三种模式:
- solo 模式:只允许有一个orderer节点,单个节点就可以部署。
- kafka模式:允许有一个或多个orderer节点,是需要群集支持(kafka和zookeeper)
- etcdraft模式:orderer本身集成了etcd服务,只需要启动一个或多个orderer即可,不需要额外的组件支持。
总结:solo模式仅供开发测试阶段使用,生产环境可以选择kafka或etcdraft。
PeerOrgs部分:
经过以上介绍之后,crypto-config.yaml配置文件可以根据我们自己的实际运用场景进行修改。
手动生成证书/密钥:
像上一篇博客中这一步的工作是直接靠byfn.sh脚本完成的,就是在脚本当中定义并调用了一个叫做generateCerts的函数,并且也使用了cryptogen工具。这里我们手动的话,根据configtx.yaml定义的网络配置,使用cryptogen工具生成证书,需要提供出工具所在的相对路径,然后加上cryptogen命令即可,工具二进制文件在fabric-samples/bin目录中。
../bin/cryptogen generate --config=./crypto-config.yaml
如果命令执行成功后,终端会显示如下内容:
org1.exmples.com
org2.exmples.com
而上述操作成功后生成的证书和密钥会保存在一个叫做crypto-config的文件夹中,如果我们之前没有在执行命令的目录下创建该文件夹,则会自动创建。如果之前拉取的源码目录下已经有这个目录,并且里面已经有了证书和密钥,可以把他们删除了,然后再自己测试一下。
该目录下,按照组织,节点,用户三大体系分类,不同的子目录下存放着各自的各种证书已经密钥。但如果我们仔细去看的话就会发现里面有很多证书都是一样的,比如说cacerts证书(CA证书)。就是"ca.example.com.cert.pem"文件
关于证书,我们现在可以不必过多的去关注,只需要知道他针对每一个组织,每一个节点,以及每一个用户都生成了一套证书就可以了。
而且每一套证书都包括CA呀,Amin证书,以及签名证书,加密通信证书等等。
1.3:配置与介绍configtx.yaml文件
注意:该文件在 fabric-samples/first-network目录下
作用:
configtx.yaml主要用于配置这个区块链联盟当中的组织信息
比如:
- 组织的名字呀,及对应的证书的位置。
- 对于peer节点来说,还有他的对外的主节点(锚节点AnchorPeer)
- 对于order节点来说,还有他共识机制的选择,区块的时间间隔呀,每一个块中能包含的交易的数量,块的大小,等等这些信息 。
configtxgen工具用于创建四个配置网络工件:
- genesis.block(创世区块)
- channek.tx(通道配置交易)
- Org1MSPchors.tx(锚节点交易)和Org2MSPchors.tx
解析:
其中创世区块是排序服务的创世区块;通道配置交易是在通道创建时广播给orderer;锚节点交易指定通道上每个组织的锚节。configtxgen将配置文件configtx.yaml作为参数配置,默认的configtx.yaml包含三个组织:一个orderer组织(OrdererOrg)和两个peer组织(Org1,Org2).每个peer组织维护两个peer节点(peer0,peer1),该文件还指定了一个联盟SampleConsortium,该联盟包含两个组织。
下面将插入configtx,yaml文件的源码图片,里面有中文注释,进行详细介绍
config.tx,yaml文件分为很多配置段,其中最为重要的是profiles配置段,该配置段相当于一个入口,通过configtxgen配置工具的-profiles参数指定选择哪个profile生成相应的文件,相当于一个回调函数的感觉,其他配置段都会在profiles配置端=段根据需求进行引用。
fabric中的configtx.yaml文件可以分为四个部分,四段,分别是:
- Profiles(配置入口段)
- Organizations(组织配置段)
- Orderer(排序节点配置段)
- Application(应用通道相关配置段)
Profiles
Organizations
Orderer
Application
2:创世配置构造
有了这两个配置文件下面我们就可以取构造区块链的创世配置了
创世配置的构造包括以下几个部分:
- MSP证书
- Orderer创世区块
- Channel创世交易/区块
- 组织主节点配置文件
2.1:MSP证书
第一个配置就是组织 ,节点,用户的证书。组织,节点,用户是三套不同的证书体系。而每一套证书体系都包括比如说:CA证书,加密通信的证书(tls证书),以及签名证书(sign)等等。
这一步就是上面将crypto-config.yaml文件生成各种证书和密钥的那一步。
生成证书文件:
cd ~/go/src/github.com/hypeledger/fabric-samples/first-network
../bin/cryptogen generate --config=./crypto-config.yaml
2.2:Orderer创世区块
目前通道分为两种类型:
-
系统通道
解释:排序节点通过系统通道来管理应用通道。
-
应用通道
解释:用户的交易信息通过应用通道传递,对一般用户来说,通道是指应用通道。
通过过这个区块我们解决的是先有鸡还是现有蛋的问题,得先有系统链才能去创建其他链。
该创世区块是指生成系统通道得创世区块,主要用于启动Ordering服务,配置网络中的策略。
生成Orderer创世区块
用到configtxgen工具和configtx.yaml文件
configtxgen工具参数信息以及解释:
Usage of configtxgen:
1.-asOrg string
#作为特定的组织(按名称string)执行配置生成,包括org(可能)有权设置的写集中的值。如用来指明锚节点所在的组织。
2.-channelCreateTxBaseProfile string
#指定一个概要文件作为orderer系统通道当前状态,以允许再通道创建tx期间修改非应用程序参数。仅在与outputCreatChannelTx组合 #时有效。
3.-channelID string
#在configtx中使用的通道ID,及通道名称。
4.-configPath string
#包含要使用的配置路径(如果设置的话)
5.-inspectBlock string
#按指定路径打印块中包含的配置,用来检查通道的配置信息。
6.-inspectChannelCreateTx string
#按指定路径打印块中包含的配置,用于检查和输出通道中创世区块的内容,锚节点在configtx.yaml中的AnchorPeers中指定。
7.-outputAnchorPeerUpdate string
#创建一个配置更新来更新锚节点(仅在默认通道创建时工作,并且仅在第一次更新时工作)
8.-outputBlock string
#将genesis块写入(如果设置)的路径。confitx.yaml文件中的Profiles要指定Consortiums,否则启动排序服务节点失败。
9.-outputCreateChannelTx string
#将通道配置交易文件写入(如果设置)的路径。configtx.yaml文件中的Profiles必须包括Application,否则创建通道会失败。
10.-profile string
#指定使用的时configtx.yaml中某个用于生成的Profiles配置项。
11.-printOrg string
#将组织的定义打印为JSON。(对于手动向通道添加组织非常有用)
12.-version
#显示版本信息
接下来我们要告诉configtxgen工具在哪里能够寻找到他需要的configtx.yaml文件,我们告诉他当前路径
cd ~/go/src/hyperledger/fabric-samples/first-network
FABRIC_CFG_PATH=$PWD
生成创世区块的命令如下:
#cd到之前生成MSP证书的config目录下创建一个名叫channel-artifacts的目录
cd ~/go/src/github.com/hyperledger/fabric-samples/first-network/config
mkdir channel-artifacts
#cd回first-network目录下
cd ../
../bin/configtxgen -profile TwoOrgsOrderGenesis -outputBlock ./config/channel-artifacts/genesis.block
2.3:Channel创世交易/区块(通道的配置交易)
顾名思义,就是去构建通道的第一笔交易,这笔交易是一笔配置交易,包括了通道的初始化信息,并且这笔交易会被单独包装成一块区块,也就是这个通道的创世区块。
命令如下:
#同样是在first-network 目录下
../bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./config/channel-artifacts/mychannel.tx / -channelID mychannel
2.4:组织主节点配置文件
就是去生成每个组织主节点的配置交易,在实际生产中也是可以不做的,因为在组织内部的peer节点之间,他们是通过Goosip协议进行区块同步的,如果我们没有去设置主节点,Goosip协议也会去动态选举一个主节点出来。
生成组织的锚节点交易,虽然这一步是没有必要的,但为了记录笔记,还是写上为好。
#在哪个路径下我都不想说了
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./config/channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Or1MSP
../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./config/channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Or2MSP
以上所有操作当中一个字母都不能错,有一个错了,都会造成错误和偏差,所以请谨慎小心为妙。
上面四次操作如果都成功的话会在config/channel-artifacts目录下生成以下四个文件:
后面剩下的就是启动网络了,这一部分放到下一篇博客讲解,我们这里采用的是docker-compose的方式来部署环境,所以接下来我们就可以配置docker-compose的yaml文件,以便顺利启动Fabric的docker环境。详情请看下一篇博客。这篇博客十分重要哦,毕竟涉及到了:docker-compose-cli.yaml , docker-compose-base.yaml , peer-base.yaml