首页 新闻 会员 周边

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

0
[已解决问题] 解决于 2018-04-18 22:40

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

< >
分享
最佳答案
0

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

我简单解释一下:

  • 用户的请求会转发到 docker swarm 内置负载均衡(VIP),由负载均衡转发对应的容器,停止容器时会把容器从负载均衡的转发列表中移除。
  • 更新容器时,docker swarm 的默认机制是 stop-first ,依次先停止旧容器,然后启动新容器,如果一个 Service 中有 2 个容器就不会影响正常运行,如果只有 1 个容器就会带来影响。如果把设置改为 start-first ,即使只有 1 个容器,更新时也不会影响正常运行。
奖励园豆:5
dudu | 高人七级 |园豆:30994 | 2018-04-18 22:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册