【发布时间】:2017-02-26 12:55:22
【问题描述】:
我是 docker 新手,当涉及到 docker 时,我在设计简单的实时升级解决方案时遇到了一些问题。目前我正在使用基于fork()/exec() 的模式进行应用程序实时升级:
- 旧服务器
fork()请求时为子服务器。 - 子服务器
exec()新的可执行文件,加载新的数据/配置。 - 旧服务器将必要的信息(套接字、内存数据等)传递给子服务器,以便它可以接管服务。
- 在孩子准备好后,旧服务器停止处理新请求(旧服务器不会
exit()ATM)。 - 如果升级成功,手动停止旧服务器(这可以延迟到下一次实时升级前不久),否则停止子服务器并通知旧服务器重新开始处理请求。
如您所见,无论升级是否失败,这种实时升级策略通常不会导致停机。
我们的大部分服务都是无状态的,或者状态非常简单,所以上面的模式很容易实现,而且非常可靠。
我的问题是如何在 docker 中实现上述模式(或类似的东西)?也许我走错了方向,我全神贯注。
【问题讨论】:
-
为什么不简单地在服务器前使用负载平衡器?
-
@hek2mgl 我们有,如果涉及负载均衡器,升级过程会更长。由于该系统的即时回滚功能,我们可以(几乎)自动升级整个系统。如果自动升级过程中出现任何问题,我们可以立即关闭所有新服务器并重新启动旧服务器。
标签: linux docker fork high-availability