• Docker Swarm高可用性


    一、前言

      在Docker Swarm集群中,Swarm manager负责管理整个集群,如果管理节点manager出现故障,虽然不会影响现有的服务和工作节点,但是我们不能继续管理我们的docker swarm集群。所以可以增加多个管理节点,这将使集群具备高可用性且节点故障容错能力。

      管理节点作用:

    • 维护集群状态
    • 调度服务
    • 提供swarm模式的HTTP API

    二、集群高可用

      2.1 扩展集群

      Docker UCP(Docker的集群管理工具) 设计为可以随应用大小和使用率的增长而水平扩展。可以在 UCP 集群中添加或删除节点来扩展集群以满足需求。由于 UCP 利用 Docker 引擎提供的集群功能,因此您可以使用 docker swarm join 命令向集群中添加更多节点。在加入新节点时,UCP 服务将在此节点中自动开始运行。  

    # 在将节点加入Swarm集群中时,可以选择加入的是工作节点还是管理节点
    
    # 加入工作节点
    [root@manager ~]# docker swarm join-token worker
    To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-0mocmawzvm3xge6s37n5a48fw 172.16.60.95:2377
    
    # 加入管理节点
    [root@manager ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-3fzyz5knfbhw9iqlzxhb6dmzdtr0izno9nr7iqc5wid09uglh8-ayq7p26q6cwpxomwflo7vx3fu 172.16.60.95:2377
    

      2.2 更改节点角色

      可以通过docker node promote/demote来节点改变成管理或工作节点  

    root@manager ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    kfi2r4dw6895z5yvhlbyzfck6 *   manager             Ready               Drain               Leader              18.03.0-ce
    41hev84z7mliyhyhkthrcf4iv     node-01             Ready               Active                                  18.03.0-ce
    j1bmj304wnbz23ng1w88wvkge     node-02             Ready               Active                                  18.03.0-ce
    gsya6g8dsnjrr3cxm0cyonm4b     node-03             Ready               Active                                  18.03.0-ce
    
    # 目前只有一个管理节点manager,
    
    #现在讲node-01提升为管理节点
    
    [root@manager ~]# docker node promote node-01 manager
    Node node-01 promoted to a manager in the swarm.
    Node kfi2r4dw6895z5yvhlbyzfck6 is already a manager.
    
    [root@manager ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    kfi2r4dw6895z5yvhlbyzfck6 *   manager             Ready               Drain               Leader              18.03.0-ce
    41hev84z7mliyhyhkthrcf4iv     node-01             Ready               Active              Reachable           18.03.0-ce
    j1bmj304wnbz23ng1w88wvkge     node-02             Ready               Active                                  18.03.0-ce
    gsya6g8dsnjrr3cxm0cyonm4b     node-03             Ready               Active                                  18.03.0-ce
    
    #可以看到node-01的 MANAGER STATUS 已经是Reachable
    

      通过node-01管理Swarm集群

    # 可以执行docker manager的命令
    
    [root@node-01 ~]# docker service ls
    ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
    n85ykahh7vfs        my-centos           replicated          1/1                 centos:latest       
    qwuil9kydeya        my-web              replicated          5/5                 nginx:latest        *:80->80/tcp
    c7gmtmfacqt5        web-test            replicated          5/5                 nginx:latest
    

      2.3 高可用性的要求

      为了充分利用swarm的容错特性,docker建议管理节点的数量为奇数。Swarm的manager节点之间是基于raft一致性算法来处理关系,那么manager节点中就会有三种不同的角色:指挥者、跟随者和选举者。Docker官方建议Swarm中管理节点最好不要超过7个,通常情况下5个就够了。

      

    Swarm SizeMajorityFault Tolerance
    1 1 0
    2 2 0
    3 2 1
    4 3 1
    5 3 2
    6 4 2
    7 4 3
    8 5 3
    9 5 4

       

      所以这边swarm集群中有4台主机,需要有3个管理节点

    [root@manager ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    kfi2r4dw6895z5yvhlbyzfck6 *   manager             Ready               Drain               Leader              18.03.0-ce
    41hev84z7mliyhyhkthrcf4iv     node-01             Ready               Active              Reachable           18.03.0-ce
    j1bmj304wnbz23ng1w88wvkge     node-02             Ready               Active              Reachable           18.03.0-ce
    gsya6g8dsnjrr3cxm0cyonm4b     node-03             Ready               Active                                  18.03.0-ce

      2.4 验证高可用性

      停止manager管理节点的docker服务

    #  manager节点
    [root@manager ~]# systemctl stop docker
    
    # 查看节点信息
    [root@node-01 ~]# docker node ls
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
    kfi2r4dw6895z5yvhlbyzfck6     manager             Down                Drain               Unreachable         18.03.0-ce
    41hev84z7mliyhyhkthrcf4iv *   node-01             Ready               Active              Leader              18.03.0-ce
    j1bmj304wnbz23ng1w88wvkge     node-02             Ready               Active              Reachable           18.03.0-ce
    gsya6g8dsnjrr3cxm0cyonm4b     node-03             Ready               Active                                  18.03.0-ce
    

      可以看到现在node-01现在是leader了

      查看节点状态:

    # 管理节点的状态
    docker node inspect manager --format "{{ .ManagerStatus.Reachability }}"
    reachable
    

     

  • 相关阅读:
    Kubernetes实战模拟三(wordpress健康检查和服务质量QoS)
    Kubernetes实战模拟二(wordpress高可用)
    Kubernetes实战模拟一(wordpress基础版)
    Rook部署测试Ceph和wordpress实战应用
    kettle作业转换的执行
    BUU BURP COURSE 1
    BUU SQL COURSE 1
    BUU CODE REVIEW 1
    查看FGC
    Pod大量为Evicted被驱逐状态
  • 原文地址:https://www.cnblogs.com/bigberg/p/8808318.html
Copyright © 2020-2023  润新知