更新一个Docker Service是否对线上的活跃用户产生影响?

2019-01-03 02:09发布

当执行docker service update操作时是否对线上的活跃用户产生影响呢?自己的想法也不知道对不对。我的想法1:有一个docker service ,运行了4个副本,分别是r1,r2, r3, r4 

service:r1 听令,我要更新你,从现在开始Request请求不会打到你那儿去了,你那边要是还有未返回的Response请抓紧时间返回。

r1:收到。所有的Request请求都已经正确返回了。请更新我吧。

service:为停止的r1执行更新操作。r1更新完成。继续加入队伍。分担请求。

依次执行r2, r3, r4

如果我的我的想法成立的话,那就可以说更新一个Docker Service对线上的活跃用户并不会产生影响。那么问题来了,当我的service只有一个副本的时候呢?我又产生了一个想法。

我的想法2:

service:哦 当前只有一个副本,在更新之前,我先另启动一个副本

那么这个时候就有两个副本了,按照想法1依次更新r1, r2

 

经验丰富的Docker使用者,请告诉我的想法是否正确。非常感谢!

1条回答
三岁会撩人
2楼-- · 2019-01-03 02:39

解决这个疑惑需要了解 docker swarm 的 2 个原理:

我简单解释一下:

  • 用户的请求会转发到 docker swarm 内置负载均衡(VIP),由负载均衡转发对应的容器,停止容器时会把容器从负载均衡的转发列表中移除。
  • 更新容器时,docker swarm 的默认机制是 stop-first ,依次先停止旧容器,然后启动新容器,如果一个 Service 中有 2 个容器就不会影响正常运行,如果只有 1 个容器就会带来影响。如果把设置改为 start-first ,即使只有 1 个容器,更新时也不会影响正常运行。
查看更多
登录 后发表回答