docker-swarm实现高可用

 

一.集群介绍: 

        运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。节点分为管理 (manager) 节点和工作 (worker) 节点。

        管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。

         工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。下图展示了集群中管理节点与工作节点的关系。

二.集群模拟:      

  1.这里用了三个节点,都为manager节点     

172.192.25.13   //master1
172.192.25.14   //master2
172.192.25.15   //master3

   2.先在master1上初始化:

docker swarm init    //节点初始化

   3.获取连接秘钥

docker swarm join-token manager

   4.将秘钥复制,在另外两个节点执行

   5.查看集群信息

docker node list

 三.部署服务:

    1.给master3打标签,进行指定部署

docker node update --label-add func=portainer sm-master3

    2.编写启动yml文件

version: '3.2'

services:
  agent:
    image: portainer/agent
    environment:
      # REQUIRED: Should be equal to the service name prefixed by "tasks." when
      # deployed inside an overlay network
      AGENT_CLUSTER_ADDR: tasks.agent
      # AGENT_PORT: 9001
      # LOG_LEVEL: debug
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /data/docker/lib/docker/volumes:/var/lib/docker/volumes
    networks:
      - agent_network
    deploy:
      mode: global
      placement:
        constraints: [node.platform.os == linux]

  portainer:
    image: portainer/portainer
    command: -H tcp://tasks.agent:9001 --tlsskipverify
    ports:
      - "9000:9000"
    volumes:
      - portainer_data:/data
    networks:
      - agent_network
    deploy:
      mode: replicated
      replicas: 1      
      placement:
        constraints: [node.labels.func == portainer]

networks:
  agent_network:
    driver: overlay
    attachable: true

     3.启动容器

docker stack deploy -c docker-swarm.yml portainer

     4.查看服务分布

docker service ps portainer_portainer

四.总结:

     1.三个swarm构成的集群,你访问任何一个ip+port都能访问服务

     2.当没有指定部署环境时,负载均衡的部署在任何一个环境

     3.如果服务挂掉,会自动起来

     4.如果某个环境docker挂掉,则不能通过该ip访问服务

     5.如果是依赖本环境配置文件的工具服务时,可能会在另一个环境起不来或者初始化

 

你可能感兴趣的:(docker)