复制beanstalkd的高可用性

标题说明了一切。

有谁知道一种方法来复制beanstalkd,如果一个豆茎服务器发生故障,其他奴隶可以接pipe?

下面是我想到的一种方法:我可以让beanstalk将它的binlog(带-b)写到一个共享位置,然后在主服务器出现故障时以某种方式启动beanstalkd。

必须有更好的方法。

由于它是通过binlog写入磁盘的,所以我认为你可以做类似MySQLpipe理员通常做的事情: heartbeat w / DRBD (这里是例子 )。

上一次我尝试使用心跳,但是它不支持节点之间的非多播检查,这意味着在云/ VPS基础设施(AWS,Linode,Slicehost等)上运行或多或less是不可能的。 实际上,大多数集群服务使用多播。 这可能不再是这种情况,但这是要注意的事情。 您可以使用keepalived来提供基于ip的故障转移,这也只支持多播,但有一个补丁可以通过Willy Tarreau( HAProxy的作者) 添加单播支持 。 我已经在一对Linode VPS服务器上亲自testing过,并且在主服务器发生故障的情况下,keepalived能够对共享IP地址进行故障切换。

你可以做的一件事情可能不那么理想,就是把作业写到一些beanstalkd服务器上(又称分区)。 如果其中一个发生故障,请让您的应用程序检测到此信息,然后写入其他实例。 您的工作人员将不得不智能地轮询每个beanstalkd实例,并能够忽略死实例。 由于您正在binlogging,因此重新启动一个实例应该就像重新启动它一样简单,应用程序/工作人员将检测到并继续照常(并开始处理新启动的实例中的作业)。 我显然简化了这个过程,但这是另一个处理它的方法。