![如何在不切断用户的情况下进行更新?](https://linux22.com/image/613983/%E5%A6%82%E4%BD%95%E5%9C%A8%E4%B8%8D%E5%88%87%E6%96%AD%E7%94%A8%E6%88%B7%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E8%BF%9B%E8%A1%8C%E6%9B%B4%E6%96%B0%EF%BC%9F.png)
我四处搜索,却惊讶地发现我找不到这个问题的答案。我的假设是你有多个服务器。通常它们都会执行各自的特定任务(对于其余部分,我将假设是一个简单的网站)。现在假设服务器 A 和 B 需要更新。您是否在服务器 B 继续推出网页的同时更新服务器 A,然后当服务器 A 正常时再更新服务器 B?这似乎在小规模下可行,但在大规模下似乎很糟糕,因为你需要两倍于通常拥有的能力。当处理大量服务器时,您是否一次更新一小部分?我认为这个问题是如果服务器 A 不能再与服务器 BCDE 或 F 一起工作,那就没那么糟糕了。但是当你开始更新时,你会慢慢失去这个小百分比。
处理此类更新的正确方法是什么?
答案1
执行更新的“正确”方法是将服务器从运行池中取出,进行更新,然后在维护期后将其放回。这听起来很简单,而且您通常可以找到工具来为您执行此操作。例如,在网站的用例中,通常您会有一个集群位于负载平衡器(如 haproxy,甚至是设备)后面,只需将服务器脱机就足以重新平衡负载。
集群的意义在于有增长空间。也就是说,您需要足够的备用容量来处理突然从池中掉出的服务器(无论是计划内还是计划外的)。也就是说,您也希望在非高峰时段执行此操作,以减少过载的可能性。
最后,如果其他方法都失败了,请安排停机时间,并在必要时通过 CDN 提供静态页面。对于 *nix 主机,除了受影响的守护进程外,99% 的更新甚至不需要重新启动,所以这也是一个问题。