【发布时间】:2020-09-21 08:51:28
【问题描述】:
谁能告诉我如何为 Elasticsearch 索引选择分片和副本的数量?
我已将索引的大小配置为 20GB,但不知道如何选择数量或分片和副本
注意:我有 5 个节点、3 个主节点(用于 热 数据)和 2 个数据节点(一个用于暖数据,第二个用于冷数据)
感谢您的帮助
【问题讨论】:
标签: elasticsearch
谁能告诉我如何为 Elasticsearch 索引选择分片和副本的数量?
我已将索引的大小配置为 20GB,但不知道如何选择数量或分片和副本
注意:我有 5 个节点、3 个主节点(用于 热 数据)和 2 个数据节点(一个用于暖数据,第二个用于冷数据)
感谢您的帮助
【问题讨论】:
标签: elasticsearch
Elasticsearch 使用分片的概念将索引细分为多个片段,并允许我们制作一个或多个索引分片的副本,称为副本。请参考此SO answer 详细了解分片和副本。
将分片和副本的数量设置为索引的属性:
PUT /indexName
{
"settings": {
"index": {
"number_of_shards": 6,
"number_of_replicas": 2
}
}
}
如果你有一个包含 3 个分片的索引,每个分片有 2 个副本,那么这意味着总共有 9 个分片,但当时只有 3 个分片处于活动状态。 如果分片分配没有以正确的方式完成,那么它可能会导致集群中的性能问题。
选择分片和副本数量的一些重要提示:
创建索引后不能更改分片数。如果您以后发现有必要更改分片的数量,那么您将不得不再次重新索引所有文档。
要确定没有分片,您必须选择一个起点,然后通过测试您的数据和查询来尝试找到最佳大小。
副本往往会提高搜索性能(并非总是如此)。但是,建议至少有 1 个副本(以便在硬件故障时保留数据)
参考这个medium article,它指出节点数和分片数(主分片+副本)应该彼此成比例。这对于 Elasticsearch 确保适当的负载平衡很重要。
正如article 中所述,建议将每个节点的分片数量保持在其配置的每 GB 堆的 20 以下。
根据blog,当您规划容量时,尝试以最初配置数据集时节点数量的 150% 到 300%(或大约两倍)分配分片
【讨论】:
这里有几个关于如何设置分片和副本数量的选项。
1.使用模板(如果你想为多个索引设置相同的设置):
PUT _template/my_template
{
"order": 0,
"index_patterns": [
"<your-index1>","<your-index2>"
],
"settings": {
"index": {
"number_of_shards": "2",
"number_of_replicas": "1"
}
},
"mappings": {},
"aliases": {}
}
2.更新单个索引设置:
PUT /my-index/_settings
{
"index": {
"number_of_shards": "2",
"number_of_replicas": "1"
}
}
另外,看看this article 和How many shards should I have in my Elasticsearch cluster?
【讨论】: