fabric生产环境搭建三:部署orderer的raft集群

本文就讨论orde的raft集群部署,通过docker方式部署,总共我们部署三个orderer:

  • orderer1-orgA
  • orderer2-orgA
  • orderer1-orgB

根据心法总纲,部署network的步骤为:

  1. 创建docker网络
  2. 颁发组织证书
  3. 配置系统通道
  4. 配置orderer运行环境
  5. 启动orderer

1. 创建docker网络

创建一个网络,供后续的orderer,peer使用

docker network create mhnet

2. 颁发组织证书

raft模式强制需要证书。至少需要准备好以下文件:

  • orderer的签名证书
  • orderer的签名密钥
  • orderer的TLS通讯证书
  • orderer的TLS通讯密钥
  • 组织的根证书
  • 组织的TLS通讯根证书
  • 管理员证书

本文为了简化,避免太多证书,把签名证书直接作为TLS通讯证书使用,同理,二者的根证书也是相同的

简化后需要的文件为:

  • orderer的签名证书,TLS通讯时也使用本证书
  • orderer的签名密钥
  • 组织的根证书,也作为TLS根证书
  • 管理员证书

具体证书的生成过程和相关命令:

[异次元传送门~~~>]()

准备好文件之后,需要把文件按照一定的格式组织起来。这种特定的文件目录结构,fabric中叫做msp。msp不需要特定的工具生成,自己手工建立文件夹就可以

一个orderer所需要的msp结构如下:

$ tree msp

msp
├── admincerts
│ └── admin-orgA.crt
├── cacerts
│ └── root-orgA.crt
├── keystore
│ └── orderer1-orgA.key
├── signcerts
│ └── orderer1-orgA.crt
└── tlscacerts
    └── root-orgA.crt

本项目中全部的MSP文件看这里:[异次元传送门~~~>]()

3. 配置系统通道

配置系统通道我们要使用工具configtxgen。并且需要一个配置文件configtx.yaml文件,用于描述系统通道的属性。

在fabric项目中有一个configtx.yaml,可以拷贝出来修改。

configtx.yaml中内容都很好理解,如果想知道更多,可以去看看[异次元传送门~~~>]()

本项目使用的configtx.yaml:[异次元传送门~~~>](),需要说明下:

  • 为了简化操作,本项目中configtx.yaml文件策略统统修改为ANY,即允许任意单个节点执行管理操作,避免多签复杂性,比如:
    > Rule: “ANY Admins”

configtx.yaml建立好后,使用configtxgen工具:

configtxgen -profile TwoOrgsGenesis  -channelID mh-syschannel -outputBlock ./genesis.block

执行后在当前目录生成gensis.block。gensis.block就是创世区块,也是System Channel的配置,或者有的文档叫做Network Configuration

4. 配置orderer运行环境

接下来要做的就是启动orderer, 连接创世区块

我们用docker-compose方式运行orderer。
我们看下orderer1-orgA的yaml:[orderer1-orgA.yaml]()

yaml配置好后,还要准备其他文件,在yaml中,我们看到如下配置:

# ORDERER自己的msp文件夹
- ORDERER_GENERAL_LOCALMSPDIR=/etc/hyperledger/fabric/mymsp

# ORDERER的TLS通讯证书相关
- ORDERER_GENERAL_TLS_ENABLED=true
- ORDERER_GENERAL_TLS_PRIVATEKEY=/etc/hyperledger/fabric/tls/orderer1-orgA.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/etc/hyperledger/fabric/tls/orderer1-orgA.crt
- ORDERER_GENERAL_TLS_ROOTCAS=/etc/hyperledger/fabric/tls/root-orgA.crt
# 指定创世区块的位置
- ORDERER_GENERAL_BOOTSTRAPMETHOD=file
- ORDERER_GENERAL_BOOTSTRAPFILE=/etc/hyperledger/fabric/genesis.block

这要求我们把前面生成msp文件,证书文件,以及创世区块,拷贝到container能够访问的路径中,一般通过docker的volume共享机制实现,本文不做讨论。

拷贝后我们在container容器中可以看到:

/etc/hyperledger/fabric # ls

genesis.block  mymsp    tls

tls目录下文件:

# ls tls

orderer1-orgA.crt  orderer1-orgA.key  root-orgA.crt

mymsp目录下文件:

mymsp/admincerts/admin-orgA.crt
mymsp/cacerts/root-orgA.crt
mymsp/keystore/orderer1-orgA.key
mymsp/signcerts/orderer1-orgA.crt
mymsp/tlscacerts/root-orgA.crt

5. 启动orderer

准备就绪 ,挨个启动orderer即可。

三个orderer所需要的yaml文件看这里:[异次元传送门~~~>]()

执行启动命令:

docker-compose -f orderer1-orgA.yaml up

docker-compose -f orderer2-orgA.yaml up

docker-compose -f orderer1-orgB.yaml up

常见错误

Channel ID包含非法字符

initializing configtx manager failed: bad channel ID: 'XXXX' contains illegal characters

错误原因:通道名称只能包含小写字母,数字,点和横线

Next

创建了fabric基础网络,接下来的就是创建Application Channel, 也就是私链,fabric必须要至少有一条Channel,才能执行正常的业务逻辑~~~闪光的传送门[]

Ref



《 “fabric生产环境搭建三:部署orderer的raft集群” 》 有 9 条评论

  1. Your writing style is witty, keep up the good work cytotec en walmart and Dickey et al

  2. This was then cloned into the AscI site of pMPG BFP tk neo to give rise to pMPG BFP CMV5 CymR tk neo, referred to as pMPG CymR tk neo in the manuscript for the sake of brevity priligy tablets over the counter So now, only companies with the connections in China to get around the ban, or with the contact to source SARMs either domestically or through Asia Eastern Europe are still thriving

  3. They were included into the hospital based Diarrheal Disease Surveillance System DDSS where 2 systematic surveillance patients from urban Dhaka Hospital and Health and Demographic Surveillance System HDSS patients from rural Matlab Hospital reddit priligy Excellent task

  4. 2022-12-16 08:15:24.274 UTC [orderer.consensus.etcdraft] logSendFailure -> ERRO 02e Failed to send StepRequest to 2, because: rpc error: code = Unavailable desc = connection error: desc = “transport: authentication handshake failed: x509: certificate is valid for orgA, not orderer2.orgA” channel=mh-syschannel node=1
    2022-12-16 08:15:24.274 UTC [orderer.consensus.etcdraft] logSendFailure -> ERRO 02f Failed to send StepRequest to 3, because: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial tcp: lookup orderer1.orgB on 127.0.0.11:53: no such host” channel=mh-syschannel node=1
    2022-12-16 08:15:25.144 UTC [comm.tls] ClientHandshake -> ERRO 030 Client TLS handshake failed after 1.689088ms with error: x509 : certificate is valid for orgA, not orderer2.orgA remoteaddress=172.22.0.2:7051
    2022-12-16 08:15:26.142 UTC [core.comm] ServerHandshake -> ERRO 031 Server TLS handshake failed in 2.446739ms with error remote error: tls: bad certificate server=Orderer remoteaddress=172.22.0.2:55936

    报证书不对,大佬帮忙看下如何解决

    1. 已解决,在生成证书的时候注意host

  5. 非常感谢博主写了这么多
    有的地方还是不太懂请教下,比如容器的数据卷,比如创建后以后我看地址是/var/lib/docker/volumes/network_etc-orderer1-orgA/_data,是要把msp和创世区块都考到那个文件夹里去么?
    我按配置写的,把orderer1-orgA的msp拷贝到/var/lib/docker/volumes/network_etc-orderer1-orgA/_data下,crt和key文件新建到tls文件夹下,但启动orderer的时候各种报错,麻烦请教下这里是怎么操作的?

    1. 你要先不移,启动docker-compose会自动生成一个order.yaml文件,然后再替换其他文件,重启即可

    2. 先不移动,启动docker-compose,会生成orderer.yaml文件,在替换其他文件,重启即可。

  6. Great technical blog. Thank you for sharing!

回复 菜鸟一只 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

About Me

一位程序员,会弹吉他,喜欢读诗。
有一颗感恩的心,一位美丽的妻子,两个可爱的女儿
mail: geraldlee0825@gmail.com
github: https://github.com/lisuxiaoqi
medium: https://medium.com/@geraldlee0825