关闭一半服务器与滚动重启的想法?

关闭一半服务器与滚动重启的想法?

我们正在设置 HAProxy 来平衡我们的应用程序(在 IIS 上运行的 ASP.NET MVC 3)。我们希望我们的流程无需定期维护即可部署。我正在尝试找出正确的方法来采用“跷跷板”方法,只为一个版本的应用程序提供服务新请求一次完成。以下是我目前想到的:

  1. 去除上半场通过重新加载配置从 HAProxy 中获取服务器信息:

    $ sed -i 's/web01.*/& disabled/' /etc/haproxy/haproxy.cfg
    $ sed -i 's/web02.*/& disabled/' /etc/haproxy/haproxy.cfg
    $ /etc/init.d/haproxy reload
    
  2. 在每个宕机实例上更新应用程序并用手指戳它们以curl使其变暖。

  3. 带回上半场并删除下半场

    $ sed -i 's/\(web01.*\) disabled$/\1/' /etc/haproxy/haproxy.cfg
    $ sed -i 's/\(web02.*\) disabled$/\1/' /etc/haproxy/haproxy.cfg
    $ sed -i 's/web03.*/& disabled/' /etc/haproxy/haproxy.cfg
    $ sed -i 's/web04.*/& disabled/' /etc/haproxy/haproxy.cfg
    $ /etc/init.d/haproxy reload
    
  4. 对后半部分重复步骤2。

  5. 带回下半场

    $ sed -i 's/\(web03.*\) disabled$/\1/' /etc/haproxy/haproxy.cfg
    $ sed -i 's/\(web04.*\) disabled$/\1/' /etc/haproxy/haproxy.cfg
    $ /etc/init.d/haproxy reload
    

使用上述方法,现有请求将继续使用应用程序的 V1,然后对任何后续请求使用 V2。我同意这样做,因为它会大大降低提供两个不同版本的机会。

但是,使用sed替换配置似乎就像黑客一样。以下是我考虑过使用的其他替代方案:

  1. 使用 UNIX 套接字执行相同的“跷跷板”方法。但是,由于 UNIX 套接字一次只能与一台服务器配合使用,并且每台服务器的部署可能需要几秒钟,因此可能会导致 V2 使用 HTML,而 V1 使用 JavaScript。如果说有什么不同的话,那就是编写向后兼容的代码比向前兼容的代码要容易得多。因此使用这种方法似乎行不通。

  2. 使用 UNIX 套接字或健康检查在服务器上进行滚动部署。在我的研究中,我发现这种方法最受欢迎。然而,这会导致与 UNIX 套接字相同的问题 - 必须编写向前兼容代码。

也许我把这件事过于复杂化了,或者忽略了一些显而易见的东西……

答案1

因此,您担心某些资产在版本方面不一致。这实际上不是负载平衡器问题,而是代码问题。一种常见的做法是使用参数对资产进行“版本控制”。例如,my.html 可能包含:

<link rel="stylesheet" href="http://foo.com/css/blah.css?v123">

您应该在代码中的某个位置设置全局设置,并在发布时增加该设置。无论如何,您都需要强制重新加载客户端资产,因为它们将被缓存在那里。

相关内容