当前位置: 首页 > news >正文

Docker Swarm 的负载均衡和平滑切换原理

Docker Swarm 的负载均衡和平滑切换原理

  • 核心原理概述
  • 核心组件与机制
    • 路由网格
    • 服务发现与 IPVS
  • “平滑切换”的具体流程
    • 场景一:应用更新(滚动更新)
    • 场景二:节点或容器故障
  • 总结

核心原理概述

Docker Swarm 的负载均衡和平滑切换主要依赖于其内置的 “路由网格” 和 “服务发现” 机制。它通过在集群的所有节点上部署一个智能的负载均衡器(默认是 IPVS),并结合健康检查,来实现流量的动态、平滑分发与故障转移。

核心组件与机制

路由网格

这是 Docker Swarm 负载均衡的基石。

  • 什么是路由网格?
    当你创建一个服务(例如一个 Web 应用)并发布一个端口(如 -p 8080:80)时,Swarm 并不会将端口固定绑定在某一个运行该服务的节点上。相反,它在 Swarm 集群的每一个节点上都开启了一个监听端口(8080)。

  • 如何工作?

    1. 任何请求,无论它到达集群中的哪个节点(即使是那些没有运行该服务副本的节点)的 8080 端口,都会被该节点上的 Swarm 负载均衡器拦截。

    2. 负载均衡器根据内置的服务发现机制,获取当前所有健康的服务副本(容器)的 IP 地址列表。

    3. 然后,负载均衡器使用负载均衡算法(默认是轮询)将请求转发到其中一个健康的服务副本上。

简单比喻: 就像一个大公司的总机。你打任何一个分机号(节点IP:端口),总机接线员(路由网格)都会帮你转接到一个空闲的客服(服务副本)那里,而不管这个客服实际坐在哪栋办公楼里。

服务发现与 IPVS

  • 服务发现: Docker Swarm 内置了一个分布式存储系统来维护所有服务和任务(容器)的状态。当一个服务副本被创建、销毁或迁移时,这个信息会立即更新到整个集群。
  • IPVS: 这是 Linux 内核级别的负载均衡技术,性能极高。Swarm 的负载均衡器就是使用 IPVS 来管理后端服务副本的列表。当服务发现信息更新后,IPVS 的规则也会被实时更新,确保流量只被转发到健康的副本。
  1. 健康检查
    这是实现“平滑切换”和“自愈”的关键。
  • Docker Engine 会定期对每个服务副本执行健康检查(你可以在 Dockerfile 或 docker-compose.yml 中定义 HEALTHCHECK)。
  • 如果一个副本被标记为不健康(unhealthy),Swarm 的服务发现机制会立即将其从负载均衡器的后端列表中移除。
  • 同时,Swarm 的编排器会尝试终止这个不健康的容器,并在一个健康的节点上启动一个新的副本来满足你设定的副本数量(replicas)。

“平滑切换”的具体流程

现在我们结合以上机制,来看两种典型的平滑切换场景:

场景一:应用更新(滚动更新)

当你运行 docker service update 来更新镜像或配置时:

  1. 分批更新: Swarm 不会一次性停止所有旧副本。它会按照你定义的更新策略(如 update-config 中的 parallelism: 2, delay: 10s)进行操作。

  2. 先启动,后终止:

  • Swarm 会在某个节点上启动一个新的服务副本(使用新镜像)。
  • 等待这个新副本通过健康检查,状态变为 healthy。
  • 一旦健康,负载均衡器(IPVS)会立即将新副本加入到后端可用列表,开始向其分流流量。
  • 然后,Swarm 会停止一个旧的服务副本,并将其从负载均衡器中移除。
  1. 循环往复: 重复步骤 2,直到所有旧副本都被新副本替换完毕。

在这个过程中:

  • 始终有足够数量的健康副本在处理请求。
  • 服务的总可用性没有中断。
  • 客户端几乎感知不到后端正在发生更新,实现了“平滑发布”或“热部署”。

场景二:节点或容器故障

当某个节点宕机或某个容器意外崩溃时:

  1. 检测故障: Swarm 管理器通过心跳机制检测到节点失联,或者 Docker Engine 检测到容器退出。
  2. 立即剔除: 服务发现机制会立刻将这些故障的副本标记为失效,并从所有节点的负载均衡器(IPVS)规则中清除。从此,不会有新的流量被发送到这些故障副本上。
  3. 自愈恢复: Swarm 编排器发现当前运行的副本数少于期望值(例如,你设置了 replicas: 3,但现在只剩 2 个)。它会在其他健康的节点上启动新的副本,直到满足 replicas: 3 的要求。
  4. 新副本上线: 新启动的副本通过健康检查后,会自动加入到负载均衡器的后端列表,重新开始接收流量。

在这个过程中:

  • 从故障发生到负载均衡器剔除故障实例,有一个极短的时间窗口,期间发送到该故障实例的请求会失败。但得益于负载均衡,其他健康实例仍然可用,整体服务影响被降到最低。
  • 系统自动恢复了期望状态,无需人工干预。

总结

Docker Swarm 实现负载均衡和平滑切换的原理可以概括为:

机制作用实现平滑切换的关键
路由网格在集群所有节点上提供统一的入口点,隐藏后端复杂性。流量入口统一,客户端无需关心后端实例的位置。
服务发现与IPVS动态维护健康后端实例列表,并高性能地转发请求。实时更新,确保流量只发给健康的实例。
健康检查准确判断服务实例的健康状态。是触发服务发现更新和编排器自愈动作的“开关”。
滚动更新策略控制应用更新的节奏(分批、间隔)。实现“先启动新,再终止旧”,保证服务持续可用。
编排与自愈维持服务的期望状态(如副本数)。故障后自动重建,使系统回归正常状态。

通过这几大机制的紧密协作,Docker Swarm 提供了一个强大、高可用且能实现无缝应用更新的容器编排平台。对于用户和开发者而言,他们只需要声明“我想要什么状态”(例如 docker service create --replicas 3 my-app),Swarm 就会自动确保实际状态始终与期望状态一致,并智能地处理流量路由。

http://www.dtcms.com/a/524103.html

相关文章:

  • RabbitMQ 发送方确认机制详解
  • Keepalived 多节点负载均衡配置
  • Windows下载安装配置rabbitmq
  • 了解前端连接 RabbitMQ 的方式
  • 【ROS2】ROS2+Qt6在编译时报错:target_link_libraries
  • 从0到1理解智能体模式
  • 怎么做家具定制网站qq自动发货平台网站怎么做
  • 微网站开发合同网站建设项目付款方式
  • HarmonyOS ArkUI框架中AceContainer类的成员变量定义
  • 数据结构——希尔排序
  • 分组卷积(Grouped Convolution)原理与应用详解
  • 【信道利用率】为什么卫星链路用 SW 协议效率低?ARQ 信道利用率公式 + 计算题全解!
  • 三极管MOS管
  • PHP拆分重组pdf,php拆分pdf指定页数,并合并成新pdf
  • 详解C语言数组
  • 鹤山做网站公司建设网站宣传
  • 微信网站开发视频教程开发一个小软件多少钱
  • 释放内存与加速推理:PyTorch的torch.no_grad()与torch.inference_mode()
  • 论文笔记(九十六)VGGT: Visual Geometry Grounded Transformer
  • 城市基础设施安全运行监管平台
  • 网络 UDP 和 TCP / IP详细介绍
  • 数据结构(8)
  • [cpprestsdk] ~异步流处理(eg`basic_istream`、`basic_ostream`、`streambuf`) 底层
  • Linux 查找符合条件的文档
  • ​九小场所 / 乡镇监督防火 ——1 个平台管水源 / 隐患,整改率提 80%
  • 郑州做网站找绝唯科技地方类门户网站
  • 哪里可以做免费的物流网站国外室内设计案例网站
  • 【Linux系统】从零掌握make与Makefile:高效自动化构建项目的工具
  • ML:Supervised/Unsupervised
  • 开发网站多少钱北京 工业网站建设公司排名