本文就讨论orde的raft集群部署,通过docker方式部署,总共我们部署三个orderer:
- orderer1-orgA
- orderer2-orgA
- orderer1-orgB
根据心法总纲,部署network的步骤为:
- 创建docker网络
- 颁发组织证书
- 配置系统通道
- 配置orderer运行环境
- 启动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
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/raft_configuration.html
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/orderer_deploy.html
- https://hyperledger-fabric-ca.readthedocs.io/en/latest/operations_guide.html#setup-orderer
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/orderer/ordering_service.html
- https://hyperledger-fabric.readthedocs.io/en/release-2.2/config_update.html?highlight=OrdererAddresses#sample-channel-configuration
- https://juejin.cn/post/6844904122630537224
回复 匿名 取消回复