代码之家  ›  专栏  ›  技术社区  ›  namokarm tiktok

Docker服务路由网络在任务实际启动之前-零停机时间

  •  0
  • namokarm tiktok  · 技术社区  · 8 年前

    我现在正在跑步 Docker版本18.03.1-CE,版本9EE9F40 在多个节点上。我的设置是NGIX服务和多个Java REST API服务,它们运行在一个WiF飞集群中。 对于我的API服务,我配置了一个简单的健康检查来确定我的API任务是否实际启动:

    HEALTHCHECK --interval=5m --timeout=3s \
      --retries=2 --start-period=1m  \
      CMD curl -f http://localhost:8080/api/healthcheck || exit 1
    

    但即使使用 HealthCheck 我的nginx有时会出错——这是由于API还没有完全启动——无法满足REST请求。

    唯一的解决方案,我到目前为止设法得到工作是增加 --开始时间段 手上的时间要长得多。

    码头服务怎么样 load balancer 决定何时开始将请求路由到新服务?

    正在用设置更高的时间 --开始时间段 当前阻止负载均衡器将流量重定向到未准备好进行流量的任务的唯一方法,还是我丢失了什么?

    我看过“蓝绿色”部署的答案,比如 this 在这里,您可以管理零停机时间,但我仍然希望这可以通过使用Docker服务来完成。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Bret Fisher    8 年前

    路由网格将在“第一次成功运行状况检查”时开始路由流量,即使将来的流量失败。

    无论您在healthcheck命令中放入什么,它只需要在事情真正准备好时开始返回“exit 0”。如果返回的结果太早,那么这不是一个好的healthcheck命令。

    这个 --start-period 只告诉Swarm,如果任务在那时还没有收到一个成功的健康检查,什么时候终止它,但它不会导致绿色健康检查在开始阶段被忽略。

    推荐文章