HyperLedger Fabric 2.0 启动网络脚本配置剖析。
根据HyperLedger Fabric 2.0测试网络部署可知Fabric网络启动主要依赖脚本./byfn.sh up
接下针对这个脚本进行剖析,研究Fabric2.0 first-network的启动过程。
查看byfn.sh找到up模式主要做了什么,如下图可见,执行networkUp这个function来实现Fabric网络启动。
接下来进入networkUp详细阅读:
networkUp这个function里面核心脚本主要为以上红色框住的部分,分别为:
使用cli客户端执行脚本操作
其中在默认条件下启动yaml文件包括:
docker-compose-cli.yaml
docker-compose-etcdraft2.yaml
为了看清楚docker-compose-cli.yaml具体启动了什么,我们将文件拆分执行 首先打开控制台,输入以下命令
> cd first-network
> docker-compose -f docker-compose-cli.yaml up -d 2>&1
执行结果如下图所示:
总共启动了6个容器分别是:
5个排序节点中的其中一个排序节点: orderer.example.com
两个组织org1、org2的节点:
Fabric客户端: cli
从排序节点orderer.example.com
入手
一般来说,我会从启动日志入手,先看结果再看配置,打开控制台,输入以下命令
docker logs -f orderer.example.com --tail=300
控制台输出了orderer.example.com
的启动日志如下:
由于太长我分开几个部分来说
(1)排序节点配置项输出: 排序节点启动的时候,会根据环境变量输出相应的配置,包括证书配置、监听端口配置等,
而这些配置对应就是docker-compose-cli.yaml的以下配置: 我们继续追踪base/docker-compose-base.yaml,找到orderer.example.com服务
从上图来看,orderer的配置还是引入peer-base.yaml中的orderer-base服务
从上图来看与日志输出配置匹配,就是yaml里面加了ORDERER_前缀,其余配置的修改也可通过这种方式。详细排序节点配置说明,晚点补充。
(2)加载创始区块,启动排序节点。
好的系统的必需有一个好的日志输出,Fabric的日志输出还是很优秀的,从日志输出可以跟踪排序节点启动究竟干了什么,通过上图日志输出,可以读到:
(3)raft服务启动
上图已经标识了核心日志并且进行说明,有一点还是很清晰的就是,(对于没仔细研究Fabric2.0 raft的人来说)一个通道就是一个raft服务集群。红色的日志是错误,在分配完raft集群节点后,其余节点没启动,所以都是失败的,后面一直在做重连操作。
以上就是orderer.example.com
启动剖析过程。
然后我们来看一下组织节点 peer0.org1.example.com
, 打开控制台,输入以下命令:
docker logs -f peer0.org1.example.com --tail=300
控制台输出结果如下: peer节点启动主要是:
gossip
服务gossip
对同组织节点进行交互同样的套路,首先打开控制台,输入以下命令:
> cd first-network
> docker-compose -f docker-compose-etcdraft2.yaml up -d 2>&1
控制台输出结果如下: 由上图可知,主要启动了其余4个排序节点
先不看新启动的排序节点,查看原本开始启动的orderer.example.com
控制台输入以下命令:
> docker logs --tail=300 -f orderer.example.com
控制台输出结果如下: 由日志可以观察到,orderer.example.com以及成功连接其他raft节点,并且在raft 的term2 leader 从orderer.example.com (0)变成orderer5.example.com(5)
接下来我们看一下orderer5.example.com
节点的情况
控制台输入以下命令:
> docker logs --tail=300 -f orderer5.example.com
控制台输出: 由日志可见,在term2 经过一轮投票后,orderer5获得5票回应成为了term2的raft leader。 整体网络处于完全启动状态。
上面是对网络启动的脚本以及配置剖析,虽然比较简单,但是主要是展示整个学习的过程,一些比较详细的配置说明还是从官方文档学习比较好,通过上面的学习,也可以看到Fabric2.0的一些新特性,主要集中在智能合约以及raft共识,后面将继续往这个方向进行研究。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!