我应该在elasticsearch中使用单个机器上的分片/复制吗?



我在elasticsearch的索引中有一个大数据集。我只有一台物理机器,这一点在不久的将来也不会改变。

如果我不能有更多的节点来运行elasticsearch,那么使用分片和/或复制是否有任何意义?还能提高性能吗还是我应该坚持只有一个碎片?

在一台机器上。复制没有意义,因为它主要用于高可用性(如果持有另一个副本的机器出现故障),您仍然可以从托管副本的机器提供请求,并提供更好的搜索性能,因为您可以从任何副本中进行搜索,但在单个机器中这两种用例都是无效的,因此即使您尝试,ES也不会在同一节点上分配相同分片的副本。

对于多个主分片来说,它更复杂,因为它取决于各种因素,如果你有良好的磁盘和RAM可用,并且有大量的数据比单一主分片意味着大的段大小,段大小超过5gb是大的,不符合段合并和难以缓存,另一方面太多的小段也严重影响搜索性能。您应该知道ES为每个分片创建一个线程,并且单个索引有更多的分片,这意味着在搜索数据时涉及来自同一台机器的更多线程。所以最好是基于你的数据,在你做一些基准测试和选择什么是最适合你的用例。

补充Opster的话

因此,即使您尝试了,ES集群状态也会变为黄色,因为副本碎片不能分配给主碎片所在的同一台机器。因此,即使您尝试了,您的所有副本分片也会增加unassignd_shards计数器

检查集群的状态curl -XGET "http://localhost:9200/_cluster/health?pretty">

{
"cluster_name" : "es-test",
"status" : "yellow",
"timed_out" : false,
"number_of_nodes" : 7,
"number_of_data_nodes" : 7,
"discovered_master" : true,
"active_primary_shards" : 8617,
"active_shards" : 11975,
"relocating_shards" : 8,
"initializing_shards" : 0,
"unassigned_shards" : 46,
}

"提示:您可以在节点上保留的分片数量将为与可用堆的数量成正比,但是没有固定限制由Elasticsearch强制。一个好的经验法则是确保将每个节点的分片数量保持在每GB堆20以下配置。因此,具有30GB堆的节点应该具有最多600个碎片,但低于这个限制的部分可以保留这样更好。这通常会帮助集群保持良好状态健康!">

https://www.elastic.co/blog/how-many-shards-should-i-have-in-my-elasticsearch-cluster

适用于主分片和复制分片:当你有太多的索引,因此有很多分片,你开始达到每个节点允许的分片的极限。如果您想为新索引修改主分片,也要考虑到这一点。或者如果你想重新索引,以修改现有索引的主分片设置。

  • "Elasticsearch 7。X和更高版本的每个节点限制为1,000个分片,可以使用集群进行调整。max_shards_per_node设定!"https://docs.aws.amazon.com/elasticsearch-service/latest/developerguide/sizing-domains.html
  • AWS ElasticSearch支持服务最佳实践建议:每个节点800个分片

相关内容

  • 没有找到相关文章

最新更新