我们有4个应用服务器和一个运行Python应用程序的负载平衡。每个应用服务器都有32个超线程核心,因此旋风部署指南建议我们在每个服务器上运行64个线程。我们还使用supervisord来管理所有线程。这很好,我们遇到的问题是当我们必须部署更新时,当前部署新应用程序的过程是一个shell脚本,它执行以下操作:
这是非常低效率的,总共需要20秒左右。重新启动单独的龙卷风线程大约需要一秒钟,但问题是,如果我们做了任何重大更改,负载均衡器将在旧的应用程序和新的应用程序之间切换,这取决于它所选择的线程的重新引导阶段(负载平衡器总共可以连接256个可能的实例),因此我们必须将站点关闭30秒,有时更长,才能获得正确的应用程序版本。
有什么更好的方法吗?我听说过织物和其他一些可以使用的工具,但它们是否比我们目前的做法更有效呢?理想情况下,我们需要在5秒内将所有线程重新引导到新版本,即使它涉及暂时删除站点。
信息(如果是有用的话);
所有服务器都是RHEL5.5,负载均衡器是梭鱼640。
发布于 2011-06-01 15:47:45
如果您可以在部署脚本中使用负载均衡器API,下面的序列应该可以执行您想做的事情:
这样,您在任何时候都只能使用一个版本的代码,并且在池更改生效时,停机时间应该限制在一两秒钟之内。
免责声明:这假设Barracuda负载均衡器有一个不错的API。我找不到一个快速的谷歌文档。这种模式应该行得通。我在一个类似的情况下做了思科负载平衡器。
发布于 2011-06-01 15:48:30
为什么不这么做..。
用2块完成部署。您可以连接到两个节点,从而关闭You服务器。负载均衡器将停止向那里发送流量。部署应用程序。打开网络服务器,同时关闭其他2台。部署应用..。启动服务器。
这种方法不是很好的推广。
备选方案2
你的LB会做粘性会话吗?如果是的话,在部署前一小时就把它们打开。每次打开一个服务器来执行部署。当它上升,某些用户将看到新的网站,而其他人将看到旧的网站。
所以你一次只做一个..。然后从LB中删除粘性会话。
https://serverfault.com/questions/274154
复制相似问题