Hyperledger Fabric 应用实战(6)-- docker-compose编写

本文介绍了DockerSwarm的集群架构,包括管理节点和工作节点,以及服务、任务的概念。Swarm通过ingress网络实现服务对外暴露。同时,详细展示了HyperledgerFabric在Swarm中的部署配置,包括Peer节点、CouchDB实例以及网络设置,强调了组织间通信和端口映射的配置细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Docker Swarm 简介介绍

Swarm 集群 : 分为两类节点:

管理节点:负责集群状态的管理和协调

工作节点:负责执行具体的任务来管理容器,实现用户服务的启停等功能。

节点 : Swarm 集群中的每一台物理机或者虚拟机称为节点。节点按照工作职责分为管理节点和工作节点,管理节点由于需要使用 Raft 协议来协商节点状态。

服务 :服务是为了支持容器编排所提出的概念,它是一系列复杂容器环境互相协作的统称。一个服务的声明通常包含容器的启动方式、启动的**副本数、**环境变量、存储、配置、网络等一系列配置,用户通过声明一个服务,将它交给 Swarm,Swarm 负责将用户声明的服务实现。

任务 : 任务是集群中的最小调度单位,它包含一个真正运行中的 Docker 容器。当管理节点根据服务中声明的副本数将任务调度到节点时,任务则开始在该节点启动和运行。

服务外部访问 :集群中的容器可以访问到,但服务中任务(容器)ip是变化的,所以外部用户需要访问到运行任务的容器,则服务必须要映射到主机上的固定端口。

Swarm 使用入口负载均衡(ingress load balancing)的模式将服务暴露在主机上,每个服务会被分配一个公开端口(PublishedPort),当请求达到集群中的一个节点时,如果该节点没有要请求的服务,则会将请求转发到实际运行该服务的节点上,从而响应用户的请求。

1.1 网络

docker swarm 自带两个网络:docker_gwbridge和ingress.(实现容器通信和负载均衡)

  • docker_gwbridge:通过这个网络,容器可以连接到宿主机。
  • **ingress:**overlay网络,这个网络用于将服务暴露给外部访问,docker swarm就是通过它实现的routing mesh(将外部请求路由到不同主机的容器)。

创建跨主机网络:

docker network create  -d overlay rentnet

在网络里部分服务会自带一个网络的命名空间,用来隔离不同命名空间的容器,这边命名空间为rentnet,每个服务仅有一个replicas,也就是一个任务,一个docker容器。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6BII2O49-1677898672482)(https://secure2.wostatic.cn/static/ctBRSeytvfcWeQ3X5EgmY3/image.png?auth_key=1677898579-9xwhBU9aa7Kh7LgPgaQ1wd-0-3faff90cf0a8e6209240f9232ebd80d4)]

这里面有两种发布端口的方式:

  • 一种暴露service端口,通过使用参数--publish参数来暴露端口,target用来指定container内部的端口号;这是swarm默认模式,ingress实现的。
  • 直接在swarm节点上发布服务端口,一种是绕过路由网,也叫做host模式,每次通过端口访问,都指定访问到一个固定节点上的service,这种模式可以自动路由到请求需要的容器中,都是固定的。

1.2通信

同节点容器通信:

同节点所有服务都在rentnet网络中,那么每个服务都存在一个连接到rentnet的接口。节点间的通信方式是通过连接到命名空间网络中实现通信的。

容器与宿主机通信

通过docker_gwbridge网络里的接口连接到容器的eth1上。但docker_gwbridge并没有连接到外网,外部无法访问。

外部访问

通过ingress docker swarm自带的网络,容器一边肢接到了宿主机的网络,另一边肢接到了ingress网络。
在这里插入图片描述

2. supervisor组织

2.1 docker-compose-supervisor.yaml

version: '3.3'

volumes:
  peer0.supervisor.freerent.cn:
  peer1.supervisor.freerent.cn:
  peer2.supervisor.freerent.cn:


networks:
  rentnet:
    external: true
 
services:      
  peer0supervisor:
    image: "${PRIVATE_REGISTRY_URL}/fabric-peer:${FABRIC_TAG}"
    hostname: peer0.supervisor.freerent.cn
    environment:
      # Peer 基础 部分 
      - CORE_PEER_ID=peer0.supervisor.freerent.cn
      - CORE_PEER_ADDRESS=peer0.supervisor.freerent.cn:7051
      - CORE_PEER_LISTENADDRESS=0.0.0.0:7051
      - CORE_PEER_CHAINCODEADDRESS=peer0.supervisor.freerent.cn:7052
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
      - CORE_PEER_NETWORKID=rentnet
      - CORE_PEER_LOCALMSPID=SupervisorMSP
      - CORE_PEER_PROFILE_ENABLED=false
      # Peer  TLS 部分
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt # TLS服务器的 X.509 证书
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key  # TLS 服务器的私钥
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt #组织TLS CA 根证书
      # Peer Gossip部分
      - CORE_PEER_GOSSIP_USELEADERELECTION=true  # 动态选取
      - CORE_PEER_GOSSIP_ORGLEADER=false 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.supervisor.freerent.cn:7051
      - CORE_PEER_GOSSIP_ENDPOINT=peer0.supervisor.freerent.cn:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.supervisor.freerent.cn:7051

      # VM部分
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=rentnet

      - FABRIC_LOGGING_SPEC=INFO
      - FABRIC_CFG_PATH=/etc/hyperledger/fabric

      # Chaincode部分
      # Ledger 部分
      - CORE_LEDGER_STATE_STATEDATABASE=CouchDB
      - CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0supervisor:5984
      - CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=freerent
      - CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=freerent@2022

      # operations部分
      - CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443

      # metrics部分
      - CORE_METRICS_PROVIDER=prometheus

    depends_on:
      - couchdb0supervisor
    volumes:
      - /var/run/:/host/var/run/
      - ./../../channel/crypto-config/peerOrganizations/supervisor.freerent.cn/peers/peer0.supervisor.freerent.cn/msp:/etc/hyperledger/fabric/msp
      - ./../../channel/crypto-config/peerOrganizations/supervisor.freerent.cn/peers/peer0.supervisor.freerent.cn/tls:/etc/hyperledger/fabric/tls
      - ./../core.yaml:/etc/hyperledger/fabric/core.yaml
      - peer0.supervisor.freerent.cn:/var/hyperledger/production     
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: peer node start
    deploy:
      replicas: 1
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 30
        window: 120s
      placement:
        constraints: [node.hostname == supervisor]
    networks:
      rentnet:
        aliases:
          - peer0.supervisor.freerent.cn             
    ports:
      - target: 7051
        published: 7051
        protocol: tcp
        mode: host
      - target: 7052
        published: 7052
        protocol: tcp
        mode: host


  peer1supervisor:
    image: "${PRIVATE_REGISTRY_URL}/fabric-peer:${FABRIC_TAG}"
    hostname: peer1.supervisor.freerent.cn
    environment:
      # Peer 基础 部分 
      - CORE_PEER_ID=peer1.supervisor.freerent.cn
      - CORE_PEER_ADDRESS=peer1.supervisor.freerent.cn:7051
      - CORE_PEER_LISTENADDRESS=0.0.0.0:7051
      - CORE_PEER_CHAINCODEADDRESS=peer1.supervisor.freerent.cn:7052
      - CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
      - CORE_PEER_NETWORKID=rentnet
      - CORE_PEER_LOCALMSPID=SupervisorMSP
      - CORE_PEER_PROFILE_ENABLED=false
      # Peer  TLS 部分
      - CORE_PEER_TLS_ENABLED=true
      - CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt # TLS服务器的 X.509 证书
      - CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key  # TLS 服务器的私钥
      - CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt #组织TLS CA 根证书
      # Peer Gossip部分
      - CORE_PEER_GOSSIP_USELEADERELECTION=true  # 动态选取
      - CORE_PEER_GOSSIP_ORGLEADER=false 
      - CORE_PEER_GOSSIP_BOOTSTRAP=peer2.supervisor.freerent.cn:7051
      - CORE_PEER_GOSSIP_ENDPOINT=peer1.supervisor.freerent.cn:7051
      - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer1.supervisor.freerent.cn:7051

      # VM部分
      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
      - CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=rentnet

      - FABRIC_LOGGING_SPEC=INFO
      - FABRIC_CFG_PATH=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值