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

当执行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使用者,请告诉我的想法是否正确。非常感谢!


哔哔one
浏览 356回答 1
1回答

慕的地6264312

解决这个疑惑需要了解 docker swarm 的 2 个原理:Load Balancing (推荐阅读:How does it work? Docker! Part 3: Load balancing, service discovery and security!)Rolling Updates (推荐阅读:Rolling updates with Docker Swarm)我简单解释一下:用户的请求会转发到 docker swarm 内置负载均衡(VIP),由负载均衡转发对应的容器,停止容器时会把容器从负载均衡的转发列表中移除。更新容器时,docker swarm 的默认机制是 stop-first ,依次先停止旧容器,然后启动新容器,如果一个 Service 中有 2 个容器就不会影响正常运行,如果只有 1 个容器就会带来影响。如果把设置改为 start-first ,即使只有 1 个容器,更新时也不会影响正常运行。
打开App,查看更多内容
随时随地看视频慕课网APP