elasticsearch - Elasticsearch 中的一致性和分区容错性
问题描述
由于我是使用 [elasticsearch 7.4 版] 的弹性搜索的新手,并且经过大量研究,到目前为止还不清楚在特定索引中首选多少分片/节点。到目前为止,我已经配置了 3 个分片和 2 个副本和 3 个节点(每个节点有 8GB RAM,500GB HDD)。并在一个索引中拥有 55GB 的数据。所以我需要你在以下几点上的意见/建议。
- 上面给出没有分片、节点、副本就足够了。
- 对于 CAP 定理,我更喜欢 CP,即:3 节点集群中的一致性和分区容错性
- 对于一致性配置 write_consistency=all
- 对于 Partition-tolerance 将 master-eligible node 设置为 (N/2) + 1 在我的例子中是 3。
解决方案
希望我能在运行 Elasticsearch 集群时给你一些有用的建议 :)
1)
分片:有关更多信息,请参阅此博客文章,但您的平均分片将55gb/3 = 18gb
是一个很好的分片大小(根据我的经验,最好将分片保持在 之间5gb-25gb
,ES 文档也建议这样做)。
副本:2 个副本是我在容错和性能之间取得良好平衡的首选,所以这很好。
节点:这 3 个节点应该足够了,你不需要那么多磁盘。使用 2 个副本,您将在硬盘驱动器上大致55gb * 3 = 165gb
存储数据(可能更多取决于您的映射) ,因此也许您可以通过使用带有磁盘的节点来节省一些钱。1500gb
100gb
2)
对于分区容差,我可能建议设置write_consistency=quorum
. 这样,即使您丢失了一个节点并因此丢失了 1 个副本分片,您仍然可以在剩下 1 个主分片和 1 个副本的情况下进行写入。否则,您需要重新启动/重新创建该节点才能再次开始写入。有关更多详细信息,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/2.4/docs-index_.html#index-consistency。
Master-eligible:是的,我建议至少有 3 个主节点,因此您需要将所有 3 个节点设置为主节点和数据节点。
推荐阅读
- azure-logic-apps - 在“运行查询和可视化结果”操作(来自 Azure Monitor 日志连接器)中,无论如何要操纵输出的结果?
- bash - Bash:遍历显示变量名称和值的变量
- linux - Centos 查找命令之谜
- c# - C# 的快速方式与同一主机中具有大字符串数据的 python 3 模块通信
- java - 展开没有按钮的底部工作表
- python - 如何使用 matplotlib 从轴刻度中获取标签的文本?
- python - 通过python生成具有幂律度分布的无标度网络
- python - Jupyter 笔记本中是否有设置可以使 Tkinter GUI 工作?
- python - 连接两个列表而不重复元素
- java - Junit测试和调试