排序服务需要处理fabirc网络中的所有交易消息,是全网的关键所在。Fabric目前(2018/01)支持两种排序类型:solo和kafka。在生成环境下,Orderer节点需要采用kafka集群进行排序,以提高其可靠性。本文就介绍排序节点基于kafka的配置方式。
我们要配置的网络的拓扑结构与Building Your First Network相同,即一个通道,两个组织,每个组织下两个peer节点,每个组织中的第一个节点(peer0)作为锚节点与其他组织进行通信。不同之处在于BYFN的排序类型是solo,仅有一个排序节点。而我们要在kafka基础上配置多个排序节点,以便在生成环境使用。
下面就分步骤说明这样一下fabric网络的配置和启动过程:
1,2步中列出的命令只是为了说明其用途,可以不执行,项目中有脚本统一执行!
# crypto-config.yaml
OrdererOrgs: # 组织类型OrdererOrgs
- Name: Orderer #组织名称
Domain: example.com
Specs:
- Hostname: orderer0
- Hostname: orderer1
PeerOrgs: # 组织类型PeerOrgs
- Name: Org1
Domain: org1.example.com
Template:
Count: 2
Users:
Count: 1
- Name: Org2
Domain: org2.example.com
Template:
Count: 2
Users:
Count: 1
//生成指定拓扑结构的组织和身份文件,保存在cryto-config目录下
cryptogen generate --config=./crypto-config.yaml
configtx.yaml
Profiles:
TwoOrgsOrdererGenesis: # orderer系统通道模版
Orderer: # 指定orderer系统通道自身的配置信息
<<: *OrdererDefaults
Organizations: # 参与到此orderer的组织信息
- *OrdererOrg
Consortiums: # orderer所服务的联盟列表
SampleConsortium:
Organizations:
- *Org1
- *Org2
TwoOrgsChannel: # 应用通道模版
Consortium: SampleConsortium #该应用通道所关联联盟的名称
Application: #指定属于某应用通道的信息
<<: *ApplicationDefaults
Organizations:
- *Org1
- *Org2
Organizations:
- &OrdererOrg
Name: OrdererOrg
# ID to load the MSP definition as
ID: OrdererMSP
MSPDir: crypto-config/ordererOrganizations/example.com/msp
- &Org1
Name: Org1MSP
# ID to load the MSP definition as
ID: Org1MSP
MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
AnchorPeers:
- Host: peer0.org1.example.com
Port: 7051
- &Org2
Name: Org2MSP
# ID to load the MSP definition as
ID: Org2MSP
MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
AnchorPeers:
- Host: peer0.org2.example.com
Port: 7051
Orderer: &OrdererDefaults
OrdererType: kafka
Addresses:
- orderer0.example.com:7050
- orderer1.example.com:7050
BatchTimeout: 2s
BatchSize:
MaxMessageCount: 10
AbsoluteMaxBytes: 99 MB
PreferredMaxBytes: 512 KB
Kafka:
# 配置kafka集群信息
Brokers:
- kafka0:9092
- kafka1:9092
- kafka2:9092
- kafka3:9092
Organizations:
Application: &ApplicationDefaults
Organizations:
生成初始区块
根据上述配置文件configtx.yaml的内容,通过如下命令指定TwoOrgsOrdererGenesis profile生成orderer通道的初始区块文件
configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
生成创建应用通道需要的配置交易
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID $CHANNEL_NAME
生成锚节点Peer的更新配置交易
# 使用-asOrg来指定组织身份
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP
编写docker-compose配置文件
分别配置3个zookeeper和4个kafka实例来支持orderer集群,详细的配置参数参见官方文档:Bringing up a Kafka-based Ordering Service,这里配置信息较多,不便列出。github源码地址:docker-compose-cli.yaml,docker-compose-base.yaml
启动网络
在项目目录下执行如下命令:
./byfn.sh -m generate
./byfn.sh -m up
# 登陆cli
docker exec -it cli bash
# 在cli容器内执行脚本
/bin/bash -c './scripts/script.sh mychannel'
调用链码进行查询,可以看到查询结果为90
peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
>>> Query Result: 90
以上就是配置orderer节点集群的方式,在集群环境下,客户端将交易发送到任何一个排序节点都可以。