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

Mat*_*att 2 solr apache-zookeeper

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

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

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

谢谢!

Joh*_*one 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开始.

  • 如果我只有2台服务器并且我需要设置生产Solr Cloud环境,那么我将使用3个ZK进程,2个运行在1个服务器上.这样,如果您遇到软件问题并且ZK进程失败(而不是硬件故障),您仍然会有法定人数.如果只有1个ZK进程的服务器出现故障,我仍然有一个法定数量和一半的Solr Cloud集群可以从中恢复.但我会对此不满意. (2认同)