如何滚动重启杂种集群
Posted
技术标签:
【中文标题】如何滚动重启杂种集群【英文标题】:How to do a rolling restart of a cluster of mongrels 【发布时间】:2010-09-12 13:28:03 【问题描述】:任何人都知道一种通过 capistrano 以“滚动”方式重新启动 mongrel 集群的好方法,例如,一次一个 mongrel。如果每个人都有一点等待时间,让杂种也加载 rails 应用程序,那就太好了。
我进行了一些搜索,但没有找到太多,所以在我自己深入研究 mongrel_cluster gem 之前寻求帮助。
谢谢!
【问题讨论】:
【参考方案1】:Seesaw 是在 Rails Oceania Rubyforge Project 中发现的一个 gem,它为 mongrel 集群提供了这种功能。然而,该项目可能遭受了一些自 2007 年以来没有发布过的比特腐烂。即使只是为了扼杀想法,仍然值得一看 :)
【讨论】:
【参考方案2】:#!/bin/bash
for PIDFILE in /tmp/mongrel.*; do
PID=$(cat $PIDFILE)
kill $PID
$RUN_MONGREL_CMD $PID
sleep 2
done
【讨论】:
【参考方案3】:我更同意跷跷板式的方法,而不是您所寻求的滚动式方法。问题是您最终会遇到这样的情况:在您进行转换时,负载平衡会使用户在应用程序的不同版本之间来回切换。
我们提出的解决方案(在找到我们不使用的 SeeSaw 之前)是让一半的杂种从负载平衡器中脱机。关闭它们。更新它们。启动它们。将这些杂种在负载平衡器中重新联机,然后关闭另一半。关闭下半场。更新下半场。启动它们。这极大地减少了同时运行两个不同版本的应用程序的时间。 我写了一个 Windows bat 文件来做到这一点。 (不建议在 Windows 上部署,顺便说一句)
请务必注意,进行数据库迁移会使整个方法有点危险。如果您只有附加迁移,您可以在部署之前随时运行这些迁移。如果要删除列,则需要在部署后执行。如果要重命名列,最好将其拆分为创建一个新列并将数据复制到其中迁移以在部署前运行,以及一个单独的脚本以在部署后删除旧列。事实上,如果您没有特别努力地组织它们,通常在生产数据库上使用常规迁移可能很危险。所有这些都指向更频繁的交付,因此每次更新的风险和复杂性都更低,但这是另一个回应的主题。
【讨论】:
谢谢马特,是的,我不想提它,但为了安全起见,我肯定会犯错,对于几乎所有迁移,只需执行更完整的 shutdown-migrate-startup以上是关于如何滚动重启杂种集群的主要内容,如果未能解决你的问题,请参考以下文章