复制 beanstalkd 以实现高可用性

复制 beanstalkd 以实现高可用性

标题说明了一切。

是否有人知道如何复制 beanstalkd 以便如果 beanstalk 服务器瘫痪,其他从属服务器可以接管?

这是我想到的一种方法:我可以让 beanstalk 将其 binlog(使用 -b)写入共享位置,然后以某种方式让辅助/备份服务器在主服务器发生故障时启动 beanstalkd。

但一定有更好的方法。

答案1

因为它是通过 binlog 写入磁盘,所以我认为你可以做类似于 MySQL 管理员通常做的事情:心跳DRBD例子这里)。

不过,上次我尝试使用 heartbeat 时,它不支持节点之间的非多播检查,这意味着它几乎不可能在云/VPS 基础设施(AWS、Linode、Slicehost 等)上运行。事实上,大多数集群服务都使用多播。现在可能不再是这样了,但这是需要注意的。你也许可以使用保持活跃提供基于 IP 的故障转移,也只支持多播,但 Willy Tarreau(HAProxy) 到添加单播支持。我已经在一对 Linode VPS 服务器上亲自测试过这一点,如果主服务器出现故障,keepalived 能够对共享 IP 地址进行故障转移。

您可以做的一件事可能不是最理想的,那就是将作业写入多个 beanstalkd 服务器(也称为分区)。如果其中一个服务器出现故障,请让您的应用程序检测到此情况,并改为写入其他实例。您的工作人员必须智能地轮询每个 beanstalkd 实例,并能够忽略死实例。由于您正在进行 binlogging,因此恢复实例应该就像重新启动它一样简单,应用程序/工作人员将检测到此情况并照常继续(并开始处理新启动的实例中的作业)。我显然是在简化流程,但这是处理它的另一种方法。

相关内容