redis之zookeeper 与 redis 服务器同步
我有一小群服务器需要保持同步。我最初的想法是让一台服务器成为“主服务器”并使用 redis 的发布/订阅功能发布更新(因为我们已经在使用 redis 进行存储)并让集群中的其他服务器(从服务器)轮询更新一项长时间运行的任务。这似乎是一种保持一切同步的简单方法,但后来我想到了一个显而易见的问题:如果我的“主人”宕机了怎么办?这就是我开始研究确保始终有一个主人的技术的地方,这让我阅读了有关领导人选举等想法的文章。最后,我偶然发现了Apache Zookeeper (通过 python 绑定(bind),“pettingzoo”),它显然为您处理了很多容错逻辑。我也许可以编写自己的领导者选择代码,但我认为它不如经过验证和测试的代码好,例如 Zookeeper。
我使用 zookeeper 的主要问题是它只是另一个组件,当我可以使用更简单的东西时,我可能会不必要地添加到我的设置中。有没有人这样用过redis?或者有没有其他简单的方法可以用来获取我想要实现的功能类型?
有关 pettingzoo 的更多信息 ( slideshare )
请您参考如下方法:
恐怕没有简单的方法可以实现高可用性。这通常很难设置并且很难测试。实现HA的方式有很多种,归纳起来分为两类:物理集群和逻辑集群。
物理集群是关于使用硬件、网络和操作系统级别的机制来实现 HA。在 Linux 上,您可以查看 Pacemaker这是一个成熟的开源解决方案,随所有企业发行版一起提供。如果您想直接在您的应用程序中嵌入集群功能(在 C 中),您可能需要检查 Corosync cluster engine (也被 Pacemaker 使用)。如果您打算使用商业软件,Veritas Cluster Server是一个完善(但昂贵)的跨平台 HA 解决方案。
逻辑集群 是关于使用奇特的分布式算法(如领导者选举、PAXOS 等)来实现 HA,而不依赖于特定的低级机制。这就是 Zookeeper 之类的东西。
Zookeeper 是建立在 ZAB 协议(protocol)(与 PAXOS 非常相似)之上的一致的、有序的、分层的存储。它非常健壮,可用于实现一些 HA 设施,但它并不简单,您需要在所有节点上安装 JVM。对于很好的例子,你可以看看一些 recipes和优秀的Curator来自 Netflix 的图书馆。如今,Zookeeper 的使用远远超出了纯 Hadoop 上下文,IMO 认为,这是构建 HA 逻辑基础架构的最佳解决方案。
Redis pub/sub 机制不够可靠,无法实现逻辑集群,因为未读消息会丢失(没有 pub/sub 的项目排队)。实现Redis实例集合HA,可以试试Redis Sentinel ,但它不会扩展到您自己的软件。
如果您准备好使用 C 编程,一个经常被遗忘的 HA 框架(但在 IMO 中可能非常有用)是 BerkeleyDB 附带的框架。 .它非常基础,但支持现成的领导人选举,并且可以集成到任何环境中。可以找到文档 here和 here .注意:您不必将数据存储在 BerkeleyDB 中即可从 HA 机制中受益(仅拓扑数据 - 与您将放入 Zookeeper 中的相同)。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。