Hyperledger Fabric排序服务的集群配置

Bringing up a Kafka-based Ordering Service

排序服务需要处理fabirc网络中的所有交易消息,是全网的关键所在。Fabric目前(2018/01)支持两种排序类型:solo和kafka。在生成环境下,Orderer节点需要采用kafka集群进行排序,以提高其可靠性。本文就介绍排序节点基于kafka的配置方式。

我们要配置的网络的拓扑结构与Building Your First Network相同,即一个通道,两个组织,每个组织下两个peer节点,每个组织中的第一个节点(peer0)作为锚节点与其他组织进行通信。不同之处在于BYFN的排序类型是solo,仅有一个排序节点。而我们要在kafka基础上配置多个排序节点,以便在生成环境使用。

下面就分步骤说明这样一下fabric网络的配置和启动过程:

1,2步中列出的命令只是为了说明其用途,可以不执行,项目中有脚本统一执行!

  1. 使用cryptogen工具+crypto-config.yaml配置文件生成组织关系和身份证书
# 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
  1. 使用configtxgen生成通道配置信息
    configtxgen工具集合cryptogen生成的组织结构身份文件,来实现以下三个功能:
    • 生成启动Orderer需要的初始区块,并支持检查区块内容
    • 生成创建应用通道需要的配置交易,并支持检查交易内容
    • 生成锚节点Peer的更新配置交易

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
  1. 编写docker-compose配置文件
    分别配置3个zookeeper和4个kafka实例来支持orderer集群,详细的配置参数参见官方文档:Bringing up a Kafka-based Ordering Service,这里配置信息较多,不便列出。github源码地址:docker-compose-cli.yaml,docker-compose-base.yaml

  2. 启动网络
    在项目目录下执行如下命令:

./byfn.sh -m generate
./byfn.sh -m up

生成以下容器
Hyperledger Fabric排序服务的集群配置_第1张图片

  1. 测试网络
    第4步中我们已经运行了所有容器,接下来登陆cli,执行脚本来测试网络(脚本内容包括创建通道,加入通道,更新锚点,初始化链码和调用链码等操作)
# 登陆cli
docker exec -it cli bash
# 在cli容器内执行脚本
/bin/bash -c './scripts/script.sh mychannel'

运行结果如下
Hyperledger Fabric排序服务的集群配置_第2张图片

调用链码进行查询,可以看到查询结果为90

peer chaincode query -C mychannel -n mycc -c '{"Args":["query","a"]}'
>>> Query Result: 90

Hyperledger Fabric排序服务的集群配置_第3张图片

以上就是配置orderer节点集群的方式,在集群环境下,客户端将交易发送到任何一个排序节点都可以。

你可能感兴趣的:(Hyperledger)