我需要一小组服务器来保持同步。我最初的想法是让一台服务器成为“主”并使用redis的pub / sub功能发布更新(因为我们已经使用redis进行存储)并让集群中的其他服务器(从属服务器)轮询更新一项长期任务。这似乎是让一切保持同步的简单方法,但后来我想到了一个明显的问题:如果我的“主人”失败怎么办?这就是我开始研究技术以确保总有一个大师的地方,这让我开始阅读领导者选举等想法。最后,我偶然发现Apache Zookeeper(通过python绑定,“pettingzoo”),它显然为你处理了很多容错逻辑。我或许可以编写自己的领导者选择代码,但我认为它不会像已经过验证和测试过的那样好,比如Zookeeper。
使用zookeeper的主要问题是,当我可以使用更简单的东西时,它可能是我可能不必要地添加到我的设置中的另一个组件。有没有人用这种方式使用redis?或者是否有任何其他简单的方法可以用来获得我想要实现的功能类型?
有关pettingzoo(slideshare)
的更多信息答案 0 :(得分:14)
我担心没有简单的方法来实现高可用性。这通常很难设置并且难以测试。有多种方法可以实现HA,分为两类:物理群集和逻辑群集。
物理群集是关于使用硬件,网络和操作系统级别机制来实现HA。在Linux上,您可以查看Pacemaker,这是一个成熟的开源解决方案,随所有企业发行版一起提供。如果要在应用程序中直接嵌入群集功能(在C中),您可能需要检查Corosync cluster engine(也由Pacemaker使用)。如果您打算使用商业软件,Veritas Cluster Server是一个成熟(但价格昂贵)的跨平台HA解决方案。
逻辑群集是关于使用花哨的分布式算法(如领导者选举,PAXOS等......)来实现HA,而不依赖于特定的低级别机制。这就像Zookeeper提供的那样。
Zookeeper是一个基于ZAB协议构建的一致的,有序的分层存储(非常类似于PAXOS)。它非常强大,可用于实现某些HA工具,但这并非易事,您需要在所有节点上安装JVM。有关示例,您可以查看Netflix中的一些recipes和优秀的Curator库。目前,Zookeeper的使用远远超出了纯Hadoop环境,而IMO,这是构建HA逻辑基础架构的最佳解决方案。
Redis pub / sub机制不够可靠,无法实现逻辑集群,因为未读消息将丢失(没有使用pub / sub排队项目)。要实现Redis实例集合的HA,您可以尝试Redis Sentinel,但它不会扩展到您自己的软件。
如果您已准备好使用C编程,那么经常被遗忘的HA框架(但可能非常有用IMO)就是BerkeleyDB。这是非常基本的,但支持现成的领导者选举,并且可以集成到任何环境中。可以找到文档here和here。注意:您不必使用BerkeleyDB存储数据以从HA机制中受益(仅限拓扑数据 - 与您在Zookeeper中放置的数据相同)。