• docker学习进阶之Swarm(三)


    1. docker swarm简介
    Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整
    体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类
    似,但是更加轻,具有的功能也较kubernetes更少一些。
    在这里插入图片描述
    管理节点
    管理节点处理集群管理任务:

    • 维护集群状态
    • 调度服务
    • 服务群模式HTTP API 端点

    使用 Raft 实现,管理器维护整个 swarm 及其上运行的所有服务的一致内部状态。出于测试目的,
    可以使用单个管理器运行 swarm。如果单管理器群中的管理器出现故障,您的服务会继续运行,但您需
    要创建一个新集群来恢复。
    为了利用 swarm 模式的容错特性,Docker 建议您根据组织的高可用性要求实现奇数个节点。当您有多
    个管理器时,您可以在不停机的情况下从管理器节点的故障中恢复。

    • 三个管理器的群体最多可以容忍一个管理器的损失。
    • 一个五管理器群可以容忍最大同时丢失两个管理器节点。
    • 一个 N 管理器集群最多可以容忍管理器的丢失 (N-1)/2 。
    • Docker 建议一个群最多有七个管理器节点。

    2. 工作节点
    工作节点也是 Docker 引擎的实例,其唯一目的是执行容器。Worker 节点不参与 Raft 分布式状
    态,不做出调度决策,也不为 swarm 模式 HTTP API 提供服务。
    您可以创建一个由一个管理器节点组成的群,但是如果没有至少一个管理器节点,您就不能拥有一个工
    作节点。默认情况下,所有经理也是工人。在单个管理器节点集群中,您可以运行类似命令 docker
    service create ,调度程序将所有任务放在本地引擎上。
    为防止调度程序将任务放置在多节点群中的管理器节点上,请将管理器节点的可用性设置为 Drain 。调
    度器在 Drain mode 中优雅地停止节点上的任务并调度 Active 节点上的任务 。调度程序不会将新任务
    分配给具有 Drain 可用性的节点。

    1. Swarm集群搭建
      环境准备
      在这里插入图片描述
      准备3个节点,通过vagrant新增加两个节点
      需要单独指定hostname
      config.vm.hostname=“work01-node”
      还有就是每个节点需要具备Docker环境

    2. 集群环境搭建
      (1)创建manager节点
      进入manager节点,manager node也可以作为worker node提供服务
      docker swarm init -advertise 192.168.56.10
      注意观察日志,拿到worker node加入manager node的信息

     docker swarm join --token SWMTKN-1-
     0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3
     192.168.56.10:2377
    
    • 1
    • 2
    • 3

    (2)进入两个Worker

    docker swarm join --token SWMTKN-1-
    0a5ph4nehwdm9wzcmlbj2ckqqso38pkd238rprzwcoawabxtdq-arcpra6yzltedpafk3qyvv0y3
    192.168.56.10:2377
    
    • 1
    • 2
    • 3

    (3)进入manager node 查看集群情况

    docker node ls
    
    • 1

    (4)node类型转换
    可以将worker提升成manager,从而保证manager的高可用
    docker node promote worker01-node
    docker node promote worker02-node
    #降级可以用demote
    docker node demote worker01-node

    5. Raft一致性协议
    Raft一致性协议:保证manager节点半数存活集群环境可用。
    一主两从
    还是参考上面的案例直接操作
    在这里插入图片描述
    我们停掉manager节点,那么整个集群环境是不可用的
    在这里插入图片描述
    我们将一个work节点提升等级
    在这里插入图片描述
    二主一从
    除了上面的 promote 提升到 主的案例意外,我们还可用从新来搭集群处理
    我们可以在init后直接在 manager节点执行如下命令
    docker swarm join-token manager

    三主0从在这里插入图片描述
    停止其中一个整个集群还是可用
    在这里插入图片描述
    在这里插入图片描述
    但是停止掉两个后就不可用使用了
    在这里插入图片描述
    在这里插入图片描述
    6. Service
    (1)创建一个tomcat的service
    docker service create --name my-tomcat tomcat
    (2)查看当前swarm的service
    docker service ls
    (3)查看service的启动日志
    docker service logs my-tomcat
    (4)查看service的详情
    docker service inspect my-tomcat
    (5)查看my-tomcat运行在哪个node上
    docker service ps my-tomcat
    (6)水平扩展service
    docker service scale my-tomcat=3
    docker service ls
    docker service ps my-tomcat
    可以发现,其他node上都运行了一个my-tomcat的service
    在这里插入图片描述
    此时到worker01-node上:docker ps,可以发现container的name和service名称不一样,这点要知道
    在这里插入图片描述
    (7)如果某个node上的my-tomcat挂掉了,这时候会自动扩展
    (8)删除service
    docker service rm my-tomcat

    1. overlay
      Overlay 在网络技术领域,指的是一种网络架构上叠加的虚拟化技术模式,其大体框架是对基础网
      络不进行大规模修改的条件下,实现应用在网络上的承载,并能与其它网络业务分离,并且以基于IP的
      基础网络技术为主
      VXLAN(Virtual eXtensible LAN)技术是当前最为主流的Overlay标准
      在这里插入图片描述
    2. WordPress实战
      (1)创建MySQL service
    docker service create --name mysql --mount
    type=volume,source=v1,destination=/var/lib/mysql --env
    MYSQL_ROOT_PASSWORD=examplepass --env MYSQL_DATABASE=db_wordpress --network myoverlay-net mysql:5.6
    
    • 1
    • 2
    • 3

    (2)创建WordPress的Service

    docker service create --name wordpress --env WORDPRESS_DB_USER=root --env
    WORDPRESS_DB_PASSWORD=examplepass --env WORDPRESS_DB_HOST=mysql:3306 --env
    WORDPRESS_DB_NAME=db_wordpress -p 8080:80 --network my-overlay-net wordpress
    
    • 1
    • 2
    • 3

    (3)访问测试
    在这里插入图片描述

    (4)查看my-overlay-net
    在这里插入图片描述

  • 相关阅读:
    【好书推荐】计算机网络:自顶向下方法(第七版)
    【云计算网络安全】DDoS 缓解解析:DDoS 攻击缓解策略、选择最佳提供商和关键考虑因素
    性能问题从发现到优化一般思路
    2022年C++面试题万余字汇总【面试官常问】
    文件上传下载
    可转债实战与案例分析——成功的和失败的可转债投资案例、教训与经验分享
    C++之std::lock_guard和std::unique_lock
    C#语法糖系列 —— 第二篇:聊聊 ref,in 修饰符底层玩法
    MySQL——数据的删除以及MySQL中的约束
    2024年计算机、信息工程与大数据应用国际会议(CIEBDA 2024)
  • 原文地址:https://blog.csdn.net/qq_38747892/article/details/125465204