如何滚动重启mongrels集群
任何人都知道一种以"滚动"方式通过capistrano重新启动杂种群集的好方法,例如一次杂种。每个位置都有一些等待时间,让杂种也将Rails应用程序加载起来,那将是很棒的选择。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
我已经进行了一些搜索,但没有找到太多,因此在我自己深入研究mongrel_cluster gem之前,请寻求帮助。
谢谢!
解决方案
跷跷板是在Rails Oceania Rubyforge项目中发现的一颗宝石,它为杂种集群提供这种功能。但是,该项目可能会遇到一些麻烦,自2007年以来没有发布过。
#!/bin/bash for PIDFILE in /tmp/mongrel.*; do PID=$(cat ${PIDFILE}) kill ${PID} ${RUN_MONGREL_CMD} ${PID} sleep 2 done
我同意跷跷板方法,而不是我们正在寻求的滚动方法。问题是我们最终会遇到在迁移过程中负载平衡会在应用程序的不同版本之间来回吸引用户的情况。
我们想出的解决方案(在找到SeeSaw之前,我们不使用它)是从负载均衡器中脱颖而出。关掉他们。更新它们。启动它们。将这些杂种重新放在负载平衡器中,然后取下另一半。关闭下半场。更新后半部分。启动它们。这极大地减少了同时运行两个不同版本的应用程序的时间。
我写了一个Windows bat文件来做到这一点。 (不建议在Windows上进行部署,顺便说一句)
非常重要的一点是,进行数据库迁移会使整个方法变得有些危险。如果只有添加迁移,则可以在部署之前随时运行它们。如果要删除列,则需要在部署后执行。如果要重命名列,最好将其拆分为一个新列,然后将数据复制到该列中以进行迁移,以在部署前运行,并在部署后使用单独的脚本删除旧列。实际上,如果我们不付出特定的精力来组织生产,那么通常在生产数据库上使用常规迁移可能会很危险。所有这些都表明交付频率更高,因此每次更新的风险都较低,复杂度也较低,但这是另一个应对措施。