基于Kafka共识的Fabric分布式环境搭建

测试环境服务器安排:

名称

IP

Hostname

组织

备注

zookeeper1

10.16.3.97

zookeeper1

公共

 

zookeeper2

10.16.3.98

zookeeper2

公共

 

zookeeper3

10.16.3.99

zookeeper3

公共

 

kafka1

10.16.3.92

kafka1

公共

 

kafka2

10.16.3.93

kafka2

公共

 

kafka3

10.16.3.94

kafka3

公共

 

kafka4

10.16.3.95

kafka4

公共

 

orderer0

10.16.8.91

orderer0.example.com

org1

 

orderer1

10.16.8.92

orderer1.example.com

org2

 

orderer2

10.16.8.93

orderer2.example.com

org3

 

peer0org1

10.16.8.97peer0.org1.example.comorg1 

ca

10.16.8.97

peer0.org1.example.com

org1

 

 

安装步骤:

在所有机器上新建文件夹,mkdir /apps/fabric_kafka

 

在zookeeper1:/apps/fabric_kafka上新建docker-zookeeper1.yaml,内容

version: '2'
services:
 zookeeper1:
 container_name: zookeeper1
    hostname: zookeeper1
    image: hyperledger/fabric-zookeeper
    restart: always
    environment:
 - ZOO_MY_ID=1
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
 - "2181:2181"
 - "2888:2888"
 - "3888:3888"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在zookeeper2:/apps/fabric_kafka上新建docker-zookeeper2.yaml,内容

version: '2'
services:
 zookeeper2:
 container_name: zookeeper2
    hostname: zookeeper2
    image: hyperledger/fabric-zookeeper
    restart: always
    environment:
 - ZOO_MY_ID=2
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
 - "2181:2181"
 - "2888:2888"
 - "3888:3888"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在zookeeper3:/apps/fabric_kafka上新建docker-zookeeper3.yaml,内容

version: '2'
services:
 zookeeper3:
 container_name: zookeeper3
    hostname: zookeeper3
    image: hyperledger/fabric-zookeeper
    restart: always
    environment:
 - ZOO_MY_ID=3
      - ZOO_SERVERS=server.1=zookeeper1:2888:3888 server.2=zookeeper2:2888:3888 server.3=zookeeper3:2888:3888
    ports:
 - "2181:2181"
 - "2888:2888"
 - "3888:3888"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在各zk机器上启动

docker-compose -f docker-zookeeper1.yaml up -d
docker-compose -f docker-zookeeper2.yaml up -d
docker-compose -f docker-zookeeper3.yaml up -d

在kafka1:/apps/fabric_kafka上新建docker-kafka1.yaml,内容

version: '2'
services:
 kafka1:
 container_name: kafka1
    hostname: kafka1
    image: hyperledger/fabric-kafka
    restart: always
    environment:
 - KAFKA_BROKER_ID=1
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M
    ports:
 - "9092:9092"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在kafka2:/apps/fabric_kafka上新建docker-kafka2.yaml,内容

version: '2'
services:
 kafka2:
 container_name: kafka2
    hostname: kafka2
    image: hyperledger/fabric-kafka
    restart: always
    environment:
 - KAFKA_BROKER_ID=2
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M
    ports:
 - "9092:9092"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在kafka3:/apps/fabric_kafka上新建docker-kafka3.yaml,内容

version: '2'
services:
 kafka3:
 container_name: kafka3
    hostname: kafka3
    image: hyperledger/fabric-kafka
    restart: always
    environment:
 - KAFKA_BROKER_ID=3
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M
    ports:
 - "9092:9092"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在kafka4:/apps/fabric_kafka上新建docker-kafka4.yaml,内容

version: '2'
services:
 kafka4:
 container_name: kafka4
    hostname: kafka4
    image: hyperledger/fabric-kafka
    restart: always
    environment:
 - KAFKA_BROKER_ID=4
      - KAFKA_MIN_INSYNC_REPLICAS=2
      - KAFKA_DEFAULT_REPLICATION_FACTOR=3
      - KAFKA_ZOOKEEPER_CONNECT=zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
      - KAFKA_MESSAGE_MAX_BYTES=103809024
      - KAFKA_REPLICA_FETCH_MAX_BYTES=103809024
      - KAFKA_UNCLEAN_LEADER_ELECTION_ENABLE=false
      - KAFKA_LOG_RETENTION_MS=-1
      - KAFKA_HEAP_OPTS=-Xmx256M -Xms128M
    ports:
 - "9092:9092"
 extra_hosts:
 - "zookeeper1:10.16.3.97"
 - "zookeeper2:10.16.3.98"
 - "zookeeper3:10.16.3.99"
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在各kafka机器上启动

docker-compose -f docker-kafka1.yaml up -d
docker-compose -f docker-kafka2.yaml up -d
docker-compose -f docker-kafka3.yaml up -d
docker-compose -f docker-kafka4.yaml up -d

peer0org1:/apps/fabric_kafka上新建configtx.yaml,内容

Organizations:
 - &OrdererOrg
        Name: OrdererMSP
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/example.com/msp
    - &Org1
        Name: Org1MSP
        ID: Org1MSP
        MSPDir: crypto-config/peerOrganizations/org1.example.com/msp
        AnchorPeers:
 - Host: peer0.org1.example.com
              Port: 7051
    - &Org2
        Name: Org2MSP
        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
        - orderer2.example.com:7050
    BatchTimeout: 2s

    BatchSize:
 MaxMessageCount: 10
        AbsoluteMaxBytes: 98 MB
        PreferredMaxBytes: 512 KB
    Kafka:
 Brokers:
 - 10.16.3.92:9092
            - 10.16.3.93:9092
            - 10.16.3.94:9092
            - 10.16.3.95:9092
    Organizations:
Application: &ApplicationDefaults
    Organizations:
Capabilities:
 Global: &ChannelCapabilities
        V1_1: true
    Orderer: &OrdererCapabilities
        V1_1: true
    Application: &ApplicationCapabilities
        V1_1: true

Profiles:
 TwoOrgsOrdererGenesis:
 Orderer:
 <<: *OrdererDefaults
            Organizations:
 - *OrdererOrg
        Consortiums:
 SampleConsortium:
 Organizations:
 - *Org1
                    - *Org2
    TwoOrgsChannel:
 Consortium: SampleConsortium
        Application:
 <<: *ApplicationDefaults
            Organizations:
 - *Org1
                - *Org2

peer0org1:/apps/fabric_kafka上新建crypto-config.yaml,内容

OrdererOrgs:
 - Name: Orderer
    Domain: example.com
    Specs:
 - Hostname: orderer0
      - Hostname: orderer1
      - Hostname: orderer2
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

peer0org1:/apps/fabric_kafka上执行

mkdir channel-artifacts

configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel

mkdir chaincode/go/chaincode_example02/go

讲fabric-example里面的chaincode_example02.go放置chaincode/go/chaincode_example02/go目录中

scp -r crypto-config channel-artifacts 10.16.8.91:/apps/fabric-kafka

scp -r crypto-config channel-artifacts 10.16.8.92:/apps/fabric-kafka

scp -r crypto-config channel-artifacts 10.16.8.93:/apps/fabric-kafka

在orderer0:/apps/fabric_kafka上新建docker-orderer0.yaml,内容

version: '2'
services:
 orderer0.example.com:
 container_name: orderer0.example.com
    image: hyperledger/fabric-orderer
    environment:
 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      - ORDERER_GENERAL_TLS_ENABLED=false
      - 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]
      - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s
      - ORDERER_KAFKA_RETRY_LONGTOTAL=100s
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      - ORDERER_KAFKA_VERBOSE=true
      - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
 - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/msp:/var/hyperledger/orderer/msp
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer0.example.com/tls/:/var/hyperledger/orderer/tls
    networks:
 default:
 aliases:
 - fabric_kafka
    ports:
 - 7050:7050
    extra_hosts:
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在orderer1:/apps/fabric_kafka上新建docker-orderer1.yaml,内容

version: '2'
services:
 orderer1.example.com:
 container_name: orderer1.example.com
    image: hyperledger/fabric-orderer
    environment:
 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      - ORDERER_GENERAL_TLS_ENABLED=false
      - 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]
      - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s
      - ORDERER_KAFKA_RETRY_LONGTOTAL=100s
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      - ORDERER_KAFKA_VERBOSE=true
      - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
 - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/msp:/var/hyperledger/orderer/msp
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer1.example.com/tls/:/var/hyperledger/orderer/tls
    networks:
 default:
 aliases:
 - fabric_kafka
    ports:
 - 7050:7050
    extra_hosts:
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在orderer2:/apps/fabric_kafka上新建docker-orderer2.yaml,内容

version: '2'
services:
 orderer2.example.com:
 container_name: orderer2.example.com
    image: hyperledger/fabric-orderer
    environment:
 - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default
      - ORDERER_GENERAL_LOGLEVEL=debug
      - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
      - ORDERER_GENERAL_LISTENPORT=7050
      - ORDERER_GENERAL_GENESISMETHOD=file
      - ORDERER_GENERAL_GENESISFILE=/var/hyperledger/orderer/orderer.genesis.block
      - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
      - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
      - ORDERER_GENERAL_TLS_ENABLED=false
      - 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]
      - ORDERER_KAFKA_RETRY_LONGINTERVAL=10s
      - ORDERER_KAFKA_RETRY_LONGTOTAL=100s
      - ORDERER_KAFKA_RETRY_SHORTINTERVAL=1s
      - ORDERER_KAFKA_RETRY_SHORTTOTAL=30s
      - ORDERER_KAFKA_VERBOSE=true
      - ORDERER_KAFKA_BROKERS=[10.16.3.92:9092,10.16.3.93:9092,10.16.3.94:9092,10.16.3.95:9092]
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric
    command: orderer
    volumes:
 - ./channel-artifacts/genesis.block:/var/hyperledger/orderer/orderer.genesis.block
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/msp:/var/hyperledger/orderer/msp
    - ./crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com/tls/:/var/hyperledger/orderer/tls
    networks:
 default:
 aliases:
 - fabric_kafka
    ports:
 - 7050:7050
    extra_hosts:
 - "kafka1:10.16.3.92"
 - "kafka2:10.16.3.93"
 - "kafka3:10.16.3.94"
 - "kafka4:10.16.3.95"

在各orderer机器上启动

docker-compose -f docker-orderer0.yaml up -d
docker-compose -f docker-orderer1.yaml up -d
docker-compose -f docker-orderer2.yaml up -d

peer0org1:/apps/fabric_kafka上新建docker-peer0.yaml,内容

version: '2'
services:
 couchdb:
 container_name: couchdb
    image: hyperledger/fabric-couchdb
    ports:
 - "5984:5984"
 ca:
 container_name: ca
    image: hyperledger/fabric-ca
    environment:
 - FABRIC_CA_HOME=/etc/hyperledger/fabric-ca-server
      - FABRIC_CA_SERVER_CA_NAME=ca
      - FABRIC_CA_SERVER_TLS_ENABLED=false
      - FABRIC_CA_SERVER_TLS_CERTFILE=/etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem
      - FABRIC_CA_SERVER_TLS_KEYFILE=/etc/hyperledger/fabric-ca-server-config/555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk
    ports:
 - "7054:7054"
 command: sh -c 'fabric-ca-server start --ca.certfile /etc/hyperledger/fabric-ca-server-config/ca.org1.example.com-cert.pem --ca.keyfile /etc/hyperledger/fabric-ca-server-config/555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk -b admin:adminpw -d'
    volumes:
 - ./crypto-config/peerOrganizations/org1.example.com/ca/:/etc/hyperledger/fabric-ca-server-config
  peer0.org1.example.com:
 container_name: peer0.org1.example.com
    image: hyperledger/fabric-peer
    environment:
 - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=10.16.8.89:5984
      - CORE_PEER_ID=peer0.org1.example.com
      - CORE_PEER_NETWORKID=fabric_kafka
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
      - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=fabric_kafka_default
      - CORE_VM_DOCKER_TLS_ENABLED=false
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_GOSSIP_SKIPHANDSHAKE=true
      - CORE_PEER_GOSSIP_USELEADERELECTION=true
      - CORE_PEER_GOSSIP_ORGLEADER=false
      - CORE_PEER_PROFILE_ENABLED=false
      - CORE_PEER_TLS_ENABLED=false
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt
    volumes:
 - /var/run/:/host/var/run/
        -./chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/chaincode/go
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
        - ./crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    ports:
 - 7051:7051
      - 7052:7052
      - 7053:7053
    depends_on:
 - couchdb
    networks:
 default:
 aliases:
 - fabric_kafka
    extra_hosts:
 - "orderer0.example.com:10.16.8.91"
 - "orderer1.example.com:10.16.8.92"
 - "orderer2.example.com:10.16.8.93"
 cli:
 container_name: cli
    image: hyperledger/fabric-tools
    tty: true
    environment:
 - GOPATH=/opt/gopath
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_LOGGING_LEVEL=DEBUG
      - CORE_PEER_ID=cli
      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      - CORE_PEER_CHAINCODELISTENADDRESS=peer0.org1.example.com:7052
      - CORE_PEER_LOCALMSPID=Org1MSP
      - CORE_PEER_TLS_ENABLED=false
      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    volumes:
 - /var/run/:/host/var/run/
        - ./chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/chaincode/go
        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
    depends_on:
 - peer0.org1.example.com
    extra_hosts:
 - "orderer0.example.com:10.16.8.91"
 - "orderer1.example.com:10.16.8.92"
 - "orderer2.example.com:10.16.8.93"
 - "peer0.org1.example.com:10.16.8.89"
 

注意:此处的555290c50d91fbfd50c03f6abb08910dab00a84403826e4ed97e48bbf287c268_sk要换成实际生成的私钥文件名

在peer0org1机器上启动

docker-compose -f docker-peer0.yaml up -d

在peer0org1机器上执行

docker exec -it cli bash

peer channel create -o orderer0.example.com:7050 -c mychannel -f ./channel-artifacts/mychannel.tx

peer channel join -b mychannel.block
peer chaincode install -n mychannel -p github.com/hyperledger/fabric/chaincode/go/chaincode_example02/go -v 1.0
peer chaincode instantiate -o orderer0.example.com:7050 -C mychannel -n mychannel -c '{"Args":["init","A","10","B","10"]}' -P "OR ('Org1MSP.member','Org2MSP.member')" -v 1.0
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query", "A"]}'
peer chaincode invoke -o orderer2.example.com:7050  -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode invoke -o orderer0.example.com:7050  -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode invoke -o orderer1.example.com:7050  -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'
peer chaincode query -C mychannel -n mychannel -c '{"Args":["query", "A"]}'

 

至此,Fabric分布式环境搭建完毕!

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值