复制 beanstalkd 以获得高可用性

Jos*_*kin 15 high-availability

标题说明了一切。

有谁知道复制 beanstalkd 的方法,这样如果 beanstalk 服务器出现故障,其他奴隶可以接管吗?

这是我想到的一种方法:我可以让 beanstalk 将其二进制日志(使用 -b)写入共享位置,然后如果主服务器失败,则以某种方式让辅助/备份服务器启动 beanstalkd。

不过一定有更好的方法。

and*_*rew 5

由于它通过 binlog 写入磁盘,我认为您可以执行类似于 MySQL 管理员通常所做的事情:heartbeat w/ DRBD示例here)。

上次我尝试使用 heartbeat 时,它不支持节点之间的非多播检查,这意味着它或多或少不可能在云/VPS 基础设施(AWS、Linode、Slicehost 等)上运行。事实上,大多数集群服务都使用多播。这可能不再是这种情况,但这是需要注意的事情。您可以使用keepalived来提供基于 ip 的故障转移,它也仅支持多播,但通过 Willy Tarreau(HAProxy 的作者)提供了一个补丁来添加单播支持。我已经在一对 Linode VPS 服务器上亲自测试过,如果主服务器出现故障,keepalived 能够故障转移共享 IP 地址。

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