zoukankan      html  css  js  c++  java
  • Docker Swarm

    Docker Swarm


    Docker Swarm 是一款用来管理多主机上的Docker容器的工具,可以负责帮你启动容器,监控容器状态,如果容器的状态不正常它会帮你重新帮你启动一个新的容器,来提供服务,同时也提供服务之间的负载均衡,而这些东西Docker-Compose 是做不到的

    集群方式的部署、

    1. 准备四台安装Docker的服务器

    2. 安装地址:https://docs.docker.com/develop/

    image-20200915153956629

    搭建集群:


     

    image-20200915155214481

    image-20200915155324752

    私网、公网

    初始化节点(创建)
    # docker swarm init 初始化节点
    #--advertise-addr 地址
    [root@Docker-01 ~]# docker swarm init --advertise-addr 192.168.1.99

    image-20200915155510717

    #获取令牌
    docker swarm join-token manager #管理节点
    docker swarm join-token worker  #工作节点
    [root@Docker-01 ~]# docker swarm join-token worker
    To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-bdxtj1xp5po6qmx3s1fu0hzhg 192.168.1.99:2377
    #2和3加入管理节点1
    [root@Docker-01 ~]# docker swarm join-token worker
    To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-bdxtj1xp5po6qmx3s1fu0hzhg 192.168.1.99:2377

    #查看:
    [root@Docker-01 ~]# docker node ls
    ID                           HOSTNAME           STATUS             AVAILABILITY       MANAGER STATUS     ENGINE VERSION
    nlccevd2kp3ddcvzealrcimh9 *   Docker-01           Ready               Active             Leader              19.03.12
    dlkzlvvsurcf62pir2efu05p7     Docker-02           Ready               Active                                  19.03.12
    mzzag5vqlqws94123kk9t58pw     Docker-03           Ready               Active                                  19.03.12
    #将04加入并管理节点
    [root@Docker-01 ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-d6114b887g9byls2mzo4feaeg 192.168.1.99:2377
    [root@Docker-04 ~]# docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-d6114b887g9byls2mzo4feaeg 192.168.1.99:2377
    This node joined a swarm as a manager.

    #再次查看
    [root@Docker-01 ~]# docker node ls
    ID                           HOSTNAME           STATUS             AVAILABILITY       MANAGER STATUS     ENGINE VERSION
    nlccevd2kp3ddcvzealrcimh9 *   Docker-01           Ready               Active             Leader              19.03.12
    dlkzlvvsurcf62pir2efu05p7     Docker-02           Ready               Active                                  19.03.12
    mzzag5vqlqws94123kk9t58pw     Docker-03           Ready               Active                                  19.03.12
    npw27mywz4g60ueh2f3m57rso     Docker-04           Ready               Active             Reachable           19.03.12

    #两个管理节点 两个工作节点()一般管理节点是3+台、奇数

    image-20200915161300004

    1. 生成主节点 init

    2. 加入(管理、工作节点)

     

    Raft协议


    双主双从:假设一个节点挂了,其他节点是否可用?

    Raft协议:保证大多数节点存活才可以用。集群至少>3台。

    实验:(基本命令操作)
    1. 将主节点docker-01服务停掉,查看另外一主节点(04节点)是否可用?(双主)

      [root@Docker-01 ~]# systemctl  stop docker 
      [root@Docker-04 ~]# docker node ls
      Error response from daemon: rpc error: code = DeadlineExceeded desc = context deadline exceeded
    2. 发现另一主节点不可用

    3. 将03节点离开集群、查看发现显示Down

      [root@Docker-03 ~]# docker swarm leave
      Node left the swarm.
      [root@Docker-04 ~]# docker node ls
      ID                           HOSTNAME           STATUS             AVAILABILITY       MANAGER STATUS     ENGINE VERSION
      nlccevd2kp3ddcvzealrcimh9     Docker-01           Ready               Active             Reachable           19.03.12
      dlkzlvvsurcf62pir2efu05p7     Docker-02           Ready               Active                                  19.03.12
      mzzag5vqlqws94123kk9t58pw     Docker-03           'Down'               Active                                  19.03.12
      npw27mywz4g60ueh2f3m57rso *   Docker-04           Ready               Active             Leader              19.03.12
    4. 把03加入设置为管理节点

      #获取管理节点令牌
      [root@Docker-01 ~]# docker swarm join-token manager
      To add a manager to this swarm, run the following command:
        docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-d6114b887g9byls2mzo4feaeg 192.168.1.99:2377
      #加入集群设置管理节点
      [root@Docker-03 ~]# docker swarm join --token SWMTKN-1-6cfhg4y3yyix3ba3bgnb66vzmcwnn61sj3f36bou11xn3e3ioz-d6114b887g9byls2mzo4feaeg 192.168.1.99:2377
      This node joined a swarm as a manager.
      #03节点测试
      [root@Docker-03 ~]# docker node ls
      ID                           HOSTNAME           STATUS             AVAILABILITY       MANAGER STATUS     ENGINE VERSION
      nlccevd2kp3ddcvzealrcimh9     Docker-01           Ready               Active             Reachable           19.03.12
      dlkzlvvsurcf62pir2efu05p7     Docker-02           Ready               Active                                  19.03.12
      mzzag5vqlqws94123kk9t58pw     Docker-03           Down               Active                                  19.03.12
      qy9su0bul9kqp7qxpzlija3s4 *   Docker-03           Ready               Active             Reachable           19.03.12
      npw27mywz4g60ueh2f3m57rso     Docker-04           Ready               Active             Leader              19.03.12
    5. work就是工作的、管理节点操作、3台机器设置为主节点

    6. 现在再把01主节点停掉、查看另外两个主节点是否可用、

      [root@Docker-01 ~]# systemctl stop docker 
      [root@Docker-03 ~]# docker node ls  
      ID                           HOSTNAME           STATUS             AVAILABILITY       MANAGER STATUS     ENGINE VERSION
      nlccevd2kp3ddcvzealrcimh9     Docker-01           Ready               Active             'Unreachable'         19.03.12
      dlkzlvvsurcf62pir2efu05p7     Docker-02           Ready               Active                                  19.03.12
      mzzag5vqlqws94123kk9t58pw     Docker-03           Down               Active                                  19.03.12
      qy9su0bul9kqp7qxpzlija3s4 *   Docker-03           Ready               Active             Reachable           19.03.12
      npw27mywz4g60ueh2f3m57rso     Docker-04           Ready               Active             Leader              19.03.12
      #发现03和04主节点依旧可用、
    7. 现在再把03停用、04是否可用?

      [root@Docker-03 ~]# systemctl stop docker
      [root@Docker-04 ~]# docker node ls
      Error response from daemon: rpc error: code = Unknown desc = The swarm does not have a leader. It's possible that too few managers are online. Make sure more than half of the managers are online.
      #发现不可用、需要等一下,有延迟

    总结:集群,可用! 3个主节点。。

    Raft协议:保证大多数节点存活,才能使用,高可用!

     

    弹性、扩缩容!

    体会弹性、扩缩容!

    以后告别docker run !

    docker-compose up! 启动一个项目,单机!

    集群: swarm docker service

    容器=》服务! =>副本!

    redis=3 !容器 、集群:高可用,web->redis(3台分布不同主机上)

    体验:创建服务、动态扩展服务、动态更新服务。

    [root@Docker-01 ~]# docker service --help
    Usage: docker service COMMAND
    Manage services
    Commands:
    create     Create a new service
    inspect     Display detailed information on one or more services
    logs       Fetch the logs of a service or task
     ls         List services
     ps         List the tasks of one or more services
     rm         Remove one or more services
    rollback   Revert changes to a service's configuration
    scale       Scale one or multiple replicated services
    update     Update a service
    Run 'docker service COMMAND --help' for more information on a command.

    灰度发布:金丝雀发布!


    启动一个服务:

    # docker  run  容器启动、 不具有扩缩容器
    # docker service 服务!   具有扩缩容、滚动更新!
    [root@Docker-01 ~]# docker service create -p 8888:80 --name my-nginx nginx
    d2gtohwwxwszny9j4eflwnzbc
    overall progress: 1 out of 1 tasks
    1/1: running  
    verify: Service converged
    #查看服务副本 docker service ps 服务名字 或者: docker service ls 或者 inspect 服务名
    [root@Docker-01 ~]# docker service ps my-nginx
    ID                 NAME               IMAGE               NODE               DESIRED STATE       CURRENT STATE           ERROR               PORTS
    sv3vzpdg8ft3       my-nginx.1         nginx:latest       Docker-03           Running             Running 53 seconds ago  
    #发现启动的一个服务副本在03上,随机分配

    访问量大了-扩展副本,以及服务副本缩容。

    #扩展3个副本
    [root@Docker-01 ~]# docker service update --replicas 3 my-nginx
    my-nginx
    overall progress: 3 out of 3 tasks
    1/3: running  
    2/3: running  
    3/3: running  
    verify: Service converged
    #发现访问任意一个节点 都能访问! 若不行 就重启该节点服务 restart docker

    #服务副本缩容
    [root@Docker-01 ~]# docker service update --replicas 1 my-nginx
    my-nginx
    overall progress: 1 out of 1 tasks
    1/1: running   [==================================================>]
    verify: Service converged
    #发现所有节点只剩一个副本。ps -a 也没有。棒a! 依旧所有节点可以访问!

    {docker service scale my-nginx=5} 等于 {docker service update --replicas 5 my-nginx}

    删除服务:docker service rm my-nginx (移除)

    服务,集群中的任意节点都可以访问。服务可以有多个服务副本,随时动态扩缩容。

    弹性、扩缩容!!服务的高可用!

    docker swarm 掌握:搭建集群、启动服务、动态管理容器服务就OK!

  • 相关阅读:
    JDBC(三)、基础代码及优化
    JDBC(二)、注册驱动三种实现原理
    JDBC(一)、数据库存取的三种
    Java学习笔记(四) 运算符
    Java学习笔记(三) 基础语法
    Java学习笔记(二) 第一个程序
    Java学习笔记(一) Java 概述
    JqGrid自定义获取编辑中单元格的值
    移动前端开发之viewport的深入理解
    CSS学习笔记--提示工具(Tooltip)
  • 原文地址:https://www.cnblogs.com/james-23/p/13674542.html
Copyright © 2011-2022 走看看