当执行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 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
解决这个疑惑需要了解 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 个容器,更新时也不会影响正常运行。
- 1 回答
- 0 关注
- 355 浏览
添加回答
举报
0/150
提交
取消