docker swarm架构更改
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

docker swarm架构更改

yuc
yuc
2024-01-03 / 最后修改: 2024-01-17 03:46 / 0 评论 / 5 阅读 / 正在检测是否收录...
当前架构

目前整个docker swarm架构是:

  1. 节点数量: 3管理节点,4工作节点
  2. keepalived 自动配置 VIP 到任意管理节点
  3. WEB 服务由 3副本 NGINX (HOST模式)代理其服务名
  4. 使用 VIP 对外提供服务, 只访问到此 NGINX
  5. 当 VIP 管理节点故障时候,由 keepalived 切换 VIP 到其他管理节点
问题现状

上面的架构实现了一部分的高可用、也存在一定的问题:

  1. docker swarm 高可用,挂1-2个管理、工作节点能够保证环境正常
  2. 比较依赖于VIP和管理节点的联动,VIP+keepalived+docker swarn全部集中在一起
  3. 存在一定的网络问题,比如bind服务容器化后,VIP所在的机器中的容器可能无法访问到VIP地址提供的bind解析,可见之前分析的dns问题

目前的问题在于各个部件耦合的太紧,当发生故障的时候,keepalived、nginx、VIP等都需要切换,还要考虑VIP切换到了哪个nginx节点,这样维护比较麻烦。所以希望解耦服务之间的关系,让每个服务只关心自己的部分,并且解决 dns 解析的 nat 问题

架构变更

架构的变更需要考虑服务解耦,并且每个部分实现一定的高可用:

  1. 分离出当前的7层nginx,变成4层代理,部署到2-3个节点到其他物理机上,VIP部署在此nginx,stream代理所有的docker节点,实现高可用
  2. nginx、bind等服务改成replicate模式,副本1,设置故障自动恢复
  3. (可选)nginx可以考虑替换为 treafik等微服务网关,可以实现7层会话保持以及自动发现、failover等
  4. tomcat镜像设置健康检查,使得多副本情况下,只是服务挂了也可以被docker正确的识别到,不再让ipvs转发到此节点
HEALTHCHECK --interval=5s --timeout=3s  --retries=3 \
CMD curl -fs http://localhost/ || exit 1

经过以上调整后多副本的服务高可用:

  1. 如果某个副本宕机,可以马上识别到并且移除,时间应该在几秒内
  2. 如果是副本内服务挂掉,健康检测可以在20秒内判断,并且不再转发
  3. 如果docker物理机宕机,重要容器failover,nginx不再转发到此节点
0

评论

博主关闭了当前页面的评论