Hyperledger fabric 共识机制-Kafka集群篇(五)

Hyperledger fabric 共识机制-Kafka集群篇(五)

1、准备工作

最小的kafka集群网络配置

为了实现机器的可复用性,不同类型的节点可以部署到同一台服务器上,同一类型节点需要部署在不同服务器中。

zookeeper服务器:奇数个,且最小为3台,最多为7台

kafka服务器:最小4台

orderer节点:最小3个

名称 Hostname IP地址
zk1 zookeeper1 1
zk2 zookeeper2 2
zk3 zookeeper3 3
kafka1 kafka1 1
kafka2 kafka2 2
kafka3 kafka3 3
kafka4 kafka4 4
orderer0 orderer0.example.com 1
orderer1 orderer1.example.com 2
orderer2 orderer2.example.com 3

为了保证整个集群的正常工作,需要给集群中各个节点设置工作目录,必须要保证各个节点工作目录是相同的

mkdir ~/kafka

2、生成证书文件

修改crypto-config.yaml文件,添加2个orderer节点

OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: test.com
    EnableNodeOUs: true

    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs below for complete description
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer0
      - Hostname: orderer1
      - Hostname: orderer2

3、生成创始块文件和通道文件

修改configtx.yaml文件,首先需要在Orderer.Addresses中声明3个orderer节点信息,将Orderer.OrdererType的值由默认的solo修改为kafka,在Orderer.Kafka.Brokers中添加Kafka集群服务器的配置信息。

Orderer: &OrdererDefaults

    # Orderer Type: The orderer implementation to start
    # Available types are "solo","kafka"  and "etcdraft"
    OrdererType: kafka

    Addresses:
        - orderer0.test.com:7050
        - orderer1.test.com:7050
        - orderer2.test.com:7050

    # Batch Timeout: The amount of time to wait before creating a batch
    BatchTimeout: 2s

    # Batch Size: Controls the number of messages batched into a block
    BatchSize:

        # Max Message Count: The maximum number of messages to permit in a batch
        MaxMessageCount: 10

        # Absolute Max Bytes: The absolute maximum number of bytes allowed for
        # the serialized messages in a batch.
        AbsoluteMaxBytes: 99 MB

        # Preferred Max Bytes: The preferred maximum number of bytes allowed for
        # the serialized messages in a batch. A message larger than the preferred
        # max bytes will result in a batch larger than preferred max bytes.
        PreferredMaxBytes: 512 KB

    Kafka:
        # Brokers: A list of Kafka brokers to which the orderer connects
        # NOTE: Use IP:port notation
        Brokers:
            - kafka0:9092
            - kafka1:9092
            - kafka2:9092
            - kafka3:9092

4、配置docker-compose.yml文件

4.1、配置zookeeper服务器

ZooKeeper部分:(如果为多机多节点,则此部分单独为一个zookeeper.yaml文件)

version: '2'

services:
  zookeeper1:
    container_name: zookeeper1
    hostname:zookeeper1
    image: hyperledger/fabric-zookeeper:latest
    #restart:always
    environment:
    #ID在集合中必须是唯一且应该有一个值,在1-255之间(服务器在集群内的当前zookeerper服务器节点的ID)
      -  ZOO_MY_ID=1
      #server.x = hostname:port1:port2
      -  ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    port:
      - '2181'
      - '2888'
      - '3888'
      extra_hosts:
        - "zookeeper1:192.168.1.1"
        - "zookeeper2:192.168.1.2"
        - "zookeeper3:192.168.1.3"
        - "kafka1:127.0.0.1"
        - "kafka2:127.0.0.2"
        - "kafka1:127.0.0.3"
        - "kafka2:127.0.0.4"
        
   zookeeper2:
    container_name: zookeeper2
    hostname:zookeeper2
    environment:
    #ID在集合中必须是唯一且应该有一个值,在1-255之间(服务器在集群内的当前zookeerper服务器节点的ID)
      -  ZOO_MY_ID=2
 

配置项解释:

ZOO_SERVERS:

  • zookeeper集群服务器列表
  • 两个端口号
    • 第一个:追随者用来连接leader使用
    • 第二个:用户选举leader

三个端口port:

  • 访问zookeeper的端口:2181
  • zookeeper集群中追随者连接leader的端口:2888
  • zookeeper集群中选举leader的端口:3888

4.2、kafka集群配置及orderer节点

#
# Copyright IBM Corp All Rights Reserved
#
# SPDX-License-Identifier: Apache-2.0
#
version: '2'

networks:
  default:

services:
  ca.innovation.com:
    image: hyperledger/fabric-ca
    environment:
      - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca.innovation.com
      - FABRIC_CA_SERVER_CA_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.innovation.com-cert.pem
      - FABRIC_CA_SERVER_CA_KEYFILE=/etc/hyperledger/fabric-ca-server-config/fc0d22c49db02855470082d05e7933353bb06cf3c1b899164843b0e2de1e674e_sk
      - FABRIC_CA_SERVER_TLS_ENABLED=true
      - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.innovation.com-cert.pem
      - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/fc0d22c49db02855470082d05e7933353bb06cf3c1b899164843b0e2de1e674e_sk
    ports:
      - "7054:7054"
    command: sh -c 'fabric-ca-server start -b admin:adminpw'
    volumes:
      - ./crypto-config/peerOrganizations/org1.innovation.com/ca/:/etc/hyperledger/fabric-ca-server-config
    container_name: ca.innovation.com
    networks:
      default:
        aliases:
          - ca.innovation.com

  orderer1.innovation.com:
    container_name: orderer1.innovation.com
    image: hyperledger/fabric-orderer
    environment:
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISPROFILE=business
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      #kafka
      - CONFIGTX_ORDERER_ORDERERTYPE=kafka
      - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka:9092,kafka1:9092,kafka2:9092,kafka3:9092]
      #第一阶段
      #orderer节点连接kafka可能会失败,ORDERER_KAFKA_RETRY_SHORTINTERVAL为重试的间隔时间
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      #总共重试的时间
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      #第二阶段
      #间隔ORDERER_KAFKA_RETRY_LONGINTERVAL开始重新尝试连接
      - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s
      #一共尝试的时间
      -ORDERER_KAFKA_RETRY_LONGTOTAL=100s
      - ORDERER_KAFKA_VERBOSE=true
      #TLS
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    depends_on:
      - kafka0
      - kafka1
      - kafka2
      - kafka3
    ports:
      - 7050:7050
    volumes:
        - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
        - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/msp:/var/hyperledger/orderer/msp
        - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/tls:/var/hyperledger/orderer/tls
    networks:
      default:
        aliases:
          - orderer1.innovation.com

  orderer2.innovation.com:
    container_name: orderer2.innovation.com
    image: hyperledger/fabric-orderer
    environment:
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISPROFILE=business
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      #kafka
      - CONFIGTX_ORDERER_ORDERERTYPE=kafka
      - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka:9092,kafka1:9092,kafka2:9092,kafka3:9092]
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      - ORDERER_KAFKA_VERBOSE=true
      #TLS
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    depends_on:
      - kafka0
      - kafka1
      - kafka2
      - kafka3
    ports:
      - 7050:7050
    volumes:
      - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
      - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/msp:/var/hyperledger/orderer/msp
      - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/tls:/var/hyperledger/orderer/tls
    networks:
      default:
        aliases:
          - orderer2.innovation.com

  orderer0.innovation.com:
    container_name: orderer0.innovation.com
    image: hyperledger/fabric-orderer
    environment:
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISPROFILE=business
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      #kafka
      - CONFIGTX_ORDERER_ORDERERTYPE=kafka
      - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka:9092,kafka1:9092,kafka2:9092,kafka3:9092]
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      - ORDERER_KAFKA_VERBOSE=true
      #TLS
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    depends_on:
      - kafka0
      - kafka1
      - kafka2
      - kafka3
    ports:
      - 7050:7050
    volumes:
      - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
      - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/msp:/var/hyperledger/orderer/msp
      - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/tls:/var/hyperledger/orderer/tls
    networks:
      default:
        aliases:
          - orderer0.innovation.com

  peer0.org1.innovation.com:
    container_name: peer0.org1.innovation.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_ATTACHSTDOUT=true
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_CHAINCODE_LOGGING_LEVEL=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_NETWORKID=business
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
      - CORE_PEER_ID=peer0.org1.innovation.com
      - CORE_PEER_ADDRESSAUTODETECT=true
      - CORE_PEER_ADDRESS=peer0.org1.innovation.com:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.innovation.com:7051
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_LOCALMSPID=org1.innovation.com
      - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
      - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0.org1.innovation.com
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
      - 7051:7051
      - 7053:7053
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.innovation.com/peers/peer0.org1.innovation.com/msp:/var/hyperledger/msp
        - ./crypto-config/peerOrganizations/org1.innovation.com/peers/peer0.org1.innovation.com/tls:/var/hyperledger/tls
    depends_on:
      - orderer.innovation.com
      - couchdb
    networks:
      default:
        aliases:
          - peer0.org1.innovation.com

  peer1.org1.innovation.com:
    container_name: peer1.org1.innovation.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_ATTACHSTDOUT=true
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_CHAINCODE_LOGGING_LEVEL=info
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_NETWORKID=business
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
      - CORE_PEER_ID=peer1.org1.innovation.com
      - CORE_PEER_ADDRESSAUTODETECT=true
      - CORE_PEER_ADDRESS=peer1.org1.innovation.com:7151
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org1.innovation.com:7151
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_LOCALMSPID=org1.innovation.com
      - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
      - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer1.org1.innovation.com
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
      - 7151:7151
      - 7153:7153
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org1.innovation.com/peers/peer1.org1.innovation.com/msp:/var/hyperledger/msp
        - ./crypto-config/peerOrganizations/org1.innovation.com/peers/peer1.org1.innovation.com/tls:/var/hyperledger/tls
    depends_on:
      - orderer.innovation.com
      - couchdb
    networks:
      default:
        aliases:
          - peer1.org1.innovation.com


  peer0.org2.innovation.com:
    container_name: peer0.org2.innovation.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_ATTACHSTDOUT=true
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_CHAINCODE_LOGGING_LEVEL=info
      - CORE_PEER_LOCALMSPID=Org2MSP
      - CORE_PEER_NETWORKID=business
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
      - CORE_PEER_ID=peer0.org2.innovation.com
      - CORE_PEER_ADDRESSAUTODETECT=true
      - CORE_PEER_ADDRESS=peer0.org2.innovation.com:7251
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org2.innovation.com:7251
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_LOCALMSPID=org2.innovation.com
      - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
      - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer0.org2.innovation.com
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
      - 7251:7251
      - 7253:7253
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org2.innovation.com/peers/peer0.org2.innovation.com/msp:/var/hyperledger/msp
        - ./crypto-config/peerOrganizations/org2.innovation.com/peers/peer0.org2.innovation.com/tls:/var/hyperledger/tls
    depends_on:
      - orderer.innovation.com
      - couchdb
    networks:
      default:
        aliases:
          - peer0.org2.innovation.com

  peer1.org2.innovation.com:
    container_name: peer1.org2.innovation.com
    image: hyperledger/fabric-peer
    environment:
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_ATTACHSTDOUT=true
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_CHAINCODE_LOGGING_LEVEL=info
      - CORE_PEER_LOCALMSPID=Org2MSP
      - CORE_PEER_NETWORKID=business
      - CORE_PEER_PROFILE_ENABLED=true
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/var/hyperledger/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/var/hyperledger/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/var/hyperledger/tls/ca.crt
      - CORE_PEER_ID=peer1.org2.innovation.com
      - CORE_PEER_ADDRESSAUTODETECT=true
      - CORE_PEER_ADDRESS=peer1.org2.innovation.com:7351
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.org2.innovation.com:7351
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_LOCALMSPID=org2.innovation.com
      - CORE_PEER_MSPCONFIGPATH=/var/hyperledger/msp
      - CORE_PEER_TLS_SERVERHOSTOVERRIDE=peer1.org2.innovation.com
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
      - 7351:7351
      - 7353:7353
    volumes:
        - /var/run/:/host/var/run/
        - ./crypto-config/peerOrganizations/org2.innovation.com/peers/peer1.org2.innovation.com/msp:/var/hyperledger/msp
        - ./crypto-config/peerOrganizations/org2.innovation.com/peers/peer1.org2.innovation.com/tls:/var/hyperledger/tls
    depends_on:
      - orderer.innovation.com
      - couchdb
    networks:
      default:
        aliases:
          - peer1.org2.innovation.com

  couchdb:
    container_name: couchdb
    image: hyperledger/fabric-couchdb
    # Populate the COUCHDB_USER and COUCHDB_PASSWORD to set an admin user and password
    # for CouchDB.  This will prevent CouchDB from operating in an "Admin Party" mode.
    environment:
      - COUCHDB_USER=
      - COUCHDB_PASSWORD=
    ports:
      - 5984:5984


  zookeeper1:
    container_name: zookeeper1
    environment:
      - ZOO_MY_ID=1
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
    - '2181'
    - '2888'
    - '3888'
    networks:
      default:
        - aliases:
            - zookeeper1

  zookeeper2:
    container_name: zookeeper2
    environment:
      - ZOO_MY_ID=2
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
      - '2181'
      - '2888'
      - '3888'
    networks:
      default:
        - aliases:
            - zookeeper2

  zookeeper3:
    container_name: zookeeper3
    environment:
      - ZOO_MY_ID=3
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
      - '2181'
      - '2888'
      - '3888'
    networks:
      default:
        - aliases:
            - zookeeper3


  kafka0:
    container_name: kafka0
    environment:
    #当前kafka服务器在集群中的ID,非负数,不能重复
      - KAFKA_BROKER_ID=0
      #标识log日志保持时间,官方默认关闭,为-1
      - KAFKA_LOG_RETENTION_MS=-1
      #消息的最大字节数,和configtx.yaml中的Orderer.BatchSize.AbsoluteMaxBytes对应
      #由于消息都有头信息,所以这个值要比计算的值稍大,多加1M就够了
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      #副本最大字节数,为每个channel获取的消息的字节数
      #AbsoluteMaxBytes<KAFKA_REPLICA_FETCH_MAX_BYTES<= KAFKA_MESSAGE_MAX_BYTES
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      #不共识选取领导节点,设置为false:采取共识选取leader节点
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      #最小同步备份,该值要小于环境变量KAFKA_DEFAULT_REPLICATION_FACTOR
      - KAFKA_MIN_INSYNC_REPLICAS=2
      #默认同步备份,该值要小于kafka集群数量
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      #指向zookeeper节点的集合
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    ports:
    - '9092'
    networks:
      default:
        - aliases:
            - kafka0


  kafka1:
    container_name: kafka1
    environment:
      - KAFKA_BROKER_ID=0
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    ports:
      - '9092'
    networks:
      default:
        - aliases:
            - kafka1

  kafka2:
    container_name: kafka2
    environment:
      - KAFKA_BROKER_ID=0
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    ports:
      - '9092'
    networks:
      default:
        - aliases:
            - kafka2

  kafka3:
    container_name: kafka3
    environment:
      - KAFKA_BROKER_ID=0
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    ports:
      - '9092'
    networks:
      default:
        - aliases:
            - kafka3

配置项解释

kafka0:
    container_name: kafka0
    environment:
    #当前kafka服务器在集群中的ID,非负数,不能重复
      - KAFKA_BROKER_ID=0
      #标识log日志保持时间,官方默认关闭,为-1
      - KAFKA_LOG_RETENTION_MS=-1
      #消息的最大字节数,和configtx.yaml中的Orderer.BatchSize.AbsoluteMaxBytes对应
      #由于消息都有头信息,所以这个值要比计算的值稍大,多加1M就够了
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      #副本最大字节数,为每个channel获取的消息的字节数
      #AbsoluteMaxBytes<KAFKA_REPLICA_FETCH_MAX_BYTES<= KAFKA_MESSAGE_MAX_BYTES
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      #不共识选取领导节点,设置为false:采取共识选取leader节点
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      #最小同步备份,该值要小于环境变量KAFKA_DEFAULT_REPLICATION_FACTOR
      - KAFKA_MIN_INSYNC_REPLICAS=2
      #默认同步备份,该值要小于kafka集群数量
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      #指向zookeeper节点的集合
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
    depends_on:
      - zookeeper1
      - zookeeper2
      - zookeeper3
    ports:
    - '9092'
    networks:
      default:
        - aliases:
            - kafka0
            
            
            
orderer1.innovation.com:
    container_name: orderer1.innovation.com
    image: hyperledger/fabric-orderer
    environment:
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISPROFILE=business
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      #kafka
      - CONFIGTX_ORDERER_ORDERERTYPE=kafka
      - CONFIGTX_ORDERER_KAFKA_BROKERS=[kafka:9092,kafka1:9092,kafka2:9092,kafka3:9092]
      #第一阶段
      #orderer节点连接kafka可能会失败,ORDERER_KAFKA_RETRY_SHORTINTERVAL为重试的间隔时间
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      #总共重试的时间
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      #第二阶段
      #间隔ORDERER_KAFKA_RETRY_LONGINTERVAL开始重新尝试连接
      - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s
      #一共尝试的时间
      -ORDERER_KAFKA_RETRY_LONGTOTAL=100s
      #orderer与kafka通信是否写log日志
      - ORDERER_KAFKA_VERBOSE=true
      #TLS
      - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
      - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
      - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderer
    command: orderer
    depends_on:
      - kafka0
      - kafka1
      - kafka2
      - kafka3
    ports:
      - 7050:7050
    volumes:
        - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/genesis.block
        - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/msp:/var/hyperledger/orderer/msp
        - ./crypto-config/ordererOrganizations/innovation.com/orderers/orderer.innovation.com/tls:/var/hyperledger/orderer/tls
    networks:
      default:
        aliases:
          - orderer1.innovation.com

5、集群的启动

启动顺序:zookeeper集群,kafka集群,orderer集群

启动顺序不能错,在启动过程中可以通过查看节点日志是否启动成功,例如查看zookeeper1

docker logs zookeeper1

5.1、zookeeper集群启动

  • zookeeper1

1、进入当前节点的工作目录,~/kafka

2、将写好的配置文件部署到当前主机~/kafka目录 zookeeper.yaml

3、启动docker-compose

docker-compose -f zookeeper1.yaml up -d

  • zookeeper2

1、进入当前节点的工作目录,~/kafka

2、将写好的配置文件部署到当前主机~/kafka目录 zookeeper.yaml

3、启动docker-compose

docker-compose -f zookeeper2.yaml up -d

  • zookeeper3

1、进入当前节点的工作目录,~/kafka

2、将写好的配置文件部署到当前主机~/kafka目录 zookeeper.yaml

3、启动docker-compose

docker-compose -f zookeeper3.yaml up -d

5.2、kafka集群启动

第一台kafka,之后依次启动

1、进入当前节点的工作目录,~/kafka

2、将写好的配置文件部署到当前主机~/kafka目录 kafka0.yaml

3、启动docker-compose

docker-compose -f kafka0.yaml up -d

5.3、orderer集群启动

  • orderer0

    1、进入当前节点的工作目录,~/kafka

    2、将写好的配置文件部署到当前主机~/kafka目录 kafka0.yaml

    3、首先把生成的证书文件和创始块文件部署到主机

    4、启动docker-compose

    docker-compose -f orderer0.yaml up -d

posted @ 2020-12-25 10:18  风云傲天  阅读(412)  评论(0编辑  收藏  举报