11

我有一小群服务器需要保持同步。我最初的想法是让一台服务器成为“主服务器”并使用 redis 的 pub/sub 功能发布更新(因为我们已经使用 redis 进行存储)并让集群中的其他服务器(从属服务器)轮询更新一项长期运行的任务。这似乎是一种让一切保持同步的简单方法,但随后我想到了一个明显的问题:如果我的“主人”宕机了怎么办?那是我开始研究技术以确保总有一位大师的地方,这使我阅读了诸如领导选举之类的想法。最后,我偶然发现了Apache Zookeeper(通过 python 绑定,“ pettingzoo"),它显然为您处理了很多容错逻辑。我也许可以编写自己的领导者选择代码,但我认为它不会像已经证明和测试过的东西那么好,如动物园管理员。

我使用 zookeeper 的主要问题是它只是另一个组件,当我可以使用更简单的东西时,我可能会不必要地添加到我的设置中。有没有人以这种方式使用过redis?或者有没有其他简单的方法可以用来获得我想要实现的功能类型?

有关 pettingzoo 的更多信息 ( slideshare )

4

1 回答 1

18

恐怕没有简单的方法来实现高可用。这通常很难设置并且很难测试。实现HA的方式有很多种,可以分为两类:物理集群和逻辑集群。

物理集群是关于使用硬件、网络和操作系统级别的机制来实现 HA。在 Linux 上,您可以查看Pacemaker,它是一个成熟的开源解决方案,随所有企业发行版一起提供。如果您想直接在应用程序中嵌入集群功能(在 C 中),您可能需要检查Corosync 集群引擎(也由 Pacemaker 使用)。如果您计划使用商业软件,Veritas Cluster Server是一个成熟(但价格昂贵)的跨平台 HA 解决方案。

逻辑集群是关于使用花哨的分布式算法(如领导者选举、PAXOS 等)来实现 HA,而不依赖于特定的低级机制。这就是 Zookeeper 提供的东西。

Zookeeper 是建立在 ZAB 协议之上的一致、有序、分层的存储(非常类似于 PAXOS)。它相当健壮,可以用来实现一些 HA 设施,但也不是微不足道的,需要在所有节点上安装 JVM。对于很好的例子,你可以看看一些食谱和来自 Netflix 的优秀Curator库。如今,Zookeeper 的使用远远超出了纯 Hadoop 上下文,而 IMO,这是构建 HA 逻辑基础架构的最佳解决方案。

Redis pub/sub 机制不够可靠,无法实现逻辑集群,因为未读消息会丢失(没有 pub/sub 项的排队)。要实现 Redis 实例集合的 HA,您可以尝试 Redis Sentinel,但它不会扩展到您自己的软件。

如果您准备使用 C 进行编程,那么一个经常被遗忘的 HA 框架(但在 IMO 中可能非常有用)就是BerkeleyDB附带的一个。它非常基础,但支持现成的领导人选举,并且可以集成到任何环境中。可以在此处此处找到文档。注意:您不必将数据存储到 BerkeleyDB 以从 HA 机制中受益(仅拓扑数据 - 您将放入 Zookeeper 中的相同)。

于 2013-03-22T10:08:41.167 回答