在一台服务器上 运行 多个 SolrCloud 节点有意义吗?
Does it make sense to run several SolrCloud nodes on one single server?
我只能使用一台服务器来 运行 我的应用程序和我的 Solr 服务器。我想知道在性能和可用性方面是否有意义在这台机器上部署 SolrCloud 和 zookeeper 的多个节点(例如使用 VM 或 docker)。因为我很容易受到硬件故障的影响,所以我主要关心的是防止软件故障和性能。
因此,添加几个节点(也许是 3 个?)是否有助于拥有更高可用性或更好性能的 Solr 服务器?还是会起到反作用?
在一个硬件上使用多个 JVM 通常不会有太大帮助。
正如您所提到的,在一台机器上使用多个 JVM 并不能降低您对硬件故障的脆弱性,而且它增加了一系列认知复杂性,因为现在您必须记住,仅仅因为您拥有三个副本,它并不意味着两个可能会失败,除非您在放置三个中的每一个时都格外小心。
对于大多数用途,仅在单个 JVM/Solr 实例中使用额外的分片更简单,并且可以实现相同的性能目标,将每个核心的索引大小保持在可管理的水平。这是 SolrCloud 的核心功能。
我知道的唯一例外是,如果您正在处理需要非常大的 JVM 堆的索引或使用模式。非常大的 JVM 堆会导致最大 GC 暂停时间过长,而 GC 调优的作用有限。在这种情况下,使用多个 JVM,每个 JVM 有一个 replica/shard,可以将最坏情况下的 GC 暂停限制为单个副本所需的暂停。
您还提到了 Zookeeper,因此值得注意的是 ZK 是一种有点不同的野兽。您可能应该单独托管 ZK,您应该始终使用奇数个 ZK 节点,并且每个物理主机永远不要超过一个。
我只能使用一台服务器来 运行 我的应用程序和我的 Solr 服务器。我想知道在性能和可用性方面是否有意义在这台机器上部署 SolrCloud 和 zookeeper 的多个节点(例如使用 VM 或 docker)。因为我很容易受到硬件故障的影响,所以我主要关心的是防止软件故障和性能。
因此,添加几个节点(也许是 3 个?)是否有助于拥有更高可用性或更好性能的 Solr 服务器?还是会起到反作用?
在一个硬件上使用多个 JVM 通常不会有太大帮助。
正如您所提到的,在一台机器上使用多个 JVM 并不能降低您对硬件故障的脆弱性,而且它增加了一系列认知复杂性,因为现在您必须记住,仅仅因为您拥有三个副本,它并不意味着两个可能会失败,除非您在放置三个中的每一个时都格外小心。
对于大多数用途,仅在单个 JVM/Solr 实例中使用额外的分片更简单,并且可以实现相同的性能目标,将每个核心的索引大小保持在可管理的水平。这是 SolrCloud 的核心功能。
我知道的唯一例外是,如果您正在处理需要非常大的 JVM 堆的索引或使用模式。非常大的 JVM 堆会导致最大 GC 暂停时间过长,而 GC 调优的作用有限。在这种情况下,使用多个 JVM,每个 JVM 有一个 replica/shard,可以将最坏情况下的 GC 暂停限制为单个副本所需的暂停。
您还提到了 Zookeeper,因此值得注意的是 ZK 是一种有点不同的野兽。您可能应该单独托管 ZK,您应该始终使用奇数个 ZK 节点,并且每个物理主机永远不要超过一个。