Hyperledger Fabric - 无法启动包含四个 Kafka 和三个 Zookeeper 的网络

Hyperledger Fabric - Unable to Start Network with Four Kafka and Three Zookeeper Ensemble

我正在尝试建立一个由 2 个组织组成的网络,每个组织都有两个对等点。第三个组织有 2 个排序节点,kakfa-zookeeper 集成有 4 个 kafka 和 3 个 zookeeper 节点。

下面是我的 crypto-config.yaml 文件的相关部分:

OrdererOrgs:
  - Name: Orderer
    Domain: ordererOrg.example.com
    Template:
      Count: 2

下面是我的 configtx.yaml 文件的相关部分:

- &OrdererOrg

    Name: OrdererOrg
    ID: OrdererMSP
    MSPDir: crypto-config/ordererOrganizations/ordererOrg.example.com/msp
    Policies:
        Readers:
            Type: Signature
            Rule: "OR('OrdererMSP.member')"
        Writers:
            Type: Signature
            Rule: "OR('OrdererMSP.member')"
        Admins:
            Type: Signature
            Rule: "OR('OrdererMSP.admin')"
      .................
Orderer: &OrdererDefaults

OrdererType: kafka
Addresses:
    - orderer0.ordererOrg.example.com:7050
    - orderer1.ordererOrg.example.com:7040
BatchTimeout: 2s
BatchSize:
    MaxMessageCount: 10
    AbsoluteMaxBytes: 99 MB
    PreferredMaxBytes: 512 KB

Kafka:
    Brokers:
        - kafka0.ordererOrg.example.com:9092
        - kafka1.ordererOrg.example.com:9092
        - kafka2.ordererOrg.example.com:9092
        - kafka3.ordererOrg.example.com:9092
...............

下面是我的 Docker 基本文件的相关部分:

zookeeper:
    image: hyperledger/fabric-zookeeper
    environment:
      - ZOO_SERVERS=server.1=zookeeper0.ordererOrg.example.com:2888:3888 server.2=zookeeper1.ordererOrg.example.com:2888:3888 server.3=zookeeper2.ordererOrg.example.com:2888:3888
    restart: always

kafka:
    image: hyperledger/fabric-kafka
    restart: always
    environment:
      - KAFKA_MESSAGE_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024 # 99 * 1024 * 1024 B
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper0.ordererOrg.example.com:2181,zookeeper1.ordererOrg.example.com:2181,zookeeper2.ordererOrg.example.com:2181

以下是我的 Docker 撰写文件的相关部分:

zookeeper0.ordererOrg. example.com:
    container_name: zookeeper0.ordererOrg.example.com
    extends:
      file: base/kafka-base.yaml
      service: zookeeper
    environment:
      - ZOO_MY_ID=1
    ports:
      - '2181:2181'
      - '2888:2888'
      - '3888:3888'
    networks:
      - byfn

  kafka0.ordererOrg.example.com:
    container_name: kafka0.ordererOrgvodworks.example.com
    extends:
      file: base/kafka-base.yaml
      service: kafka
    depends_on:
      - zookeeper0.ordererOrg.example.com
      - zookeeper1.ordererOrg.example.com
      - zookeeper2.ordererOrg.example.com
    environment:
      - KAFKA_BROKER_ID=0
    ports:
      - '9092:9092'
      - '9093:9093'
    networks:
      - byfn
----------------------- 
Note: The same structure is being followed for:
    - zookeeper1.ordererOrg. example.com
    - zookeeper2.ordererOrg. example.com
And
    - kafka1.ordererOrg.example.com
    - kafka2.ordererOrg.example.com
    - kafka3.ordererOrg.example.com

当我 运行 network start 命令时,我收到以下错误消息:

✖ Starting business network definition. This may take a minute... Error: Error trying to start business network. Error: No valid responses from any peers. Response from attempted peer comms was an error: Error: REQUEST_TIMEOUT

当我再次 运行 相同的 network start 命令时,我得到以下信息:

✖ Starting business network definition. This may take a minute... Error: Error trying to start business network. Error: No valid responses from any peers. Response from attempted peer comms was an error: Error: chaincode registration failed: timeout expired while starting chaincode tt_poc:0.0.1 for transaction

也没有针对链代码(BNA 文件)创建图像文件,如下图所示,您可以看到 ccenv 容器和排序节点日志:

peer channel create 命令之后,我在控制台上也得到了以下日志,尽管通道已成功创建:

2019-03-25 15:20:34.567 UTC [channelCmd] InitCmdFactory -> INFO 001 Endorser and rderer connections initialized 
2019-03-25 15:20:34.956 UTC [cli.common] readBlock -> INFO 002 Got status: &{SERVICE_UNAVAILABLE}

我尽量提供最多的信息,但如果您还需要任何其他容器的日志,请告诉我。感谢您的宝贵时间。

我终于解决了这个问题。这些 YAML 配置没有任何问题。问题是 docker 配置缺少资源,奇怪的是我在任何容器日志文件中都没有收到任何与资源相关的错误。所以,我只是在 docker 高级配置中增加了 CPUsMemory 设置,如下所示:

在这些配置更改之后,我的网络成功启动并正常工作。

感谢我的同事@Rafiq 帮助我解决了这个问题。