将Zookeeper与Solr一起使用,但只有2台服务器

时间:2014-07-11 09:21:11

标签: solr apache-zookeeper

我是Solr的新手,正在尝试使用SolrCloud - 似乎ZooKeeper是管理高可用性的最佳方式。

然而,在我们的生产环境中,我们只有两台服务器(主动 - 主动),我担心Zookeeper在两台服务器上并不理想,因为如果它们中的任何一台发生故障,整个机构就会停止工作。到目前为止,解决方法是在server1上运行两个ZK,在server2上运行一个ZK,因此至少如果server2发生故障,我们仍然有法定数量(但如果server1发生故障,游戏结束)。

在这种情况下,Solr的最佳实践/建议解决方案是什么?是否可以在不使用zookeeper的情况下在2台服务器之间使用SolrCloud自动复制/故障转移?或者有没有办法使用Zookeeper(或其他工具?),以便它在2台服务器上运行良好?或者我是否必须返回使用传统模式复制?

谢谢!

1 个答案:

答案 0 :(得分:7)

您将需要2台以上的服务器。生产Zookeeper集合需要至少3个实例,并且应始终为奇数:

  

三个ZooKeeper服务器是建议的最小尺寸   合奏,我们也建议他们在不同的机器上运行。

     

对于可靠的ZooKeeper服务,您应该在一个部署ZooKeeper   集群称为集合。只要大多数合奏   到了,服务将可用。因为Zookeeper需要一个   大多数情况下,最好使用奇数机器。例如,   有了四台机器,ZooKeeper只能处理单个故障   机;如果两台机器发生故障,其余两台机器则不会   构成多数。但是,ZooKeeper可以使用五台机器   处理两台机器的故障。

http://zookeeper.apache.org/doc/r3.1.2/zookeeperAdmin.html

在1台服务器上运行2个实例并没有真正削减它,因为丢失该服务器会终止集群。 Solr Cloud需要Zookeeper - 你无法解决它。

  

设置外部ZooKeeper集合

     

虽然Solr与Apache ZooKeeper捆绑在一起,但您应该考虑   你不鼓励在生产中使用这个内部的ZooKeeper,   因为关闭冗余的Solr实例也会关闭   它的ZooKeeper服务器,可能不是那么多余。因为一个   ZooKeeper合奏必须具有超过其服务器一半的法定人数   在任何给定的时间运行,这可能是一个问题。

     

此问题的解决方案是设置外部ZooKeeper   合奏。

https://cwiki.apache.org/confluence/display/solr/Setting+Up+an+External+ZooKeeper+Ensemble

一般来说,尝试使用少于3台服务器运行真正分布式的大规模处理是一个坏主意 - Zookeeper并不是唯一的,它要求至少3台服务器在服务器出现故障时支持可靠的操作。通常,您需要一定数量的幸存服务器(N / 2 + 1)才能运行,因此您需要至少从3开始。