当前位置: 首页 > 知识库问答 >
问题:

如何选择碎片和副本的数量Elasticsearch

佴德曜
2023-03-14

有人能告诉我如何选择弹性搜索索引的碎片和副本数吗?

我已将索引的大小配置为20GB,但不知道如何选择编号或碎片和副本

注意:我有5个节点,3个主节点(用于热数据),2个数据节点(一个用于热数据,第二个用于冷数据)

谢谢你的帮助

共有2个答案

申博厚
2023-03-14

这里有几个关于如何设置碎片和副本数量的选项。

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.更新单个索引设置:

更新索引设置Api

PUT /my-index/_settings
{
  "index": {
        "number_of_shards": "2",
        "number_of_replicas": "1"
      }
}

另外,看看这篇文章,我的Elasticsearch集群中应该有多少碎片?

谭梓
2023-03-14

Elasticsearch使用碎片的概念将索引细分为多个碎片,并允许我们制作索引碎片的一个或多个副本,称为副本。请参考这个SO答案来详细了解碎片和副本。

将碎片数和副本数设置为索引的属性:

PUT /indexName

{
  "settings": {
    "index": {
      "number_of_shards": 6,
      "number_of_replicas": 2
    }
  }
}

如果你有一个有3个碎片的索引,并且每个碎片都有2个副本,那么这意味着总共有9个碎片,但当时只有3个碎片在活动使用中。如果碎片分配没有以正确的方式进行,那么它可能会在集群中导致性能问题。

选择碎片和副本数量的一些重要提示:

>

  • 创建索引后不能更改碎片数。如果您以后发现有必要更改碎片的数量,那么您将不得不重新索引所有文档。

    要决定没有碎片,您必须选择一个起点,然后尝试通过测试数据和查询来找到最佳大小。

    副本往往会提高搜索性能(并不总是如此)。但是,建议至少有一个副本(以便在硬件故障时保留数据)

    参考这篇medium文章,它指出节点数和碎片数(主碎片+副本)应该成比例。这对于Elasticsearch确保适当的负载平衡很重要。

    如本文所述,建议将每个节点配置的碎片数保持在每GB堆20个以下。

    根据这篇博客,在规划容量时,尝试以最初配置数据集时节点数的150%到300%(或大约两倍)的速度分配碎片

  •  类似资料:
    • 选择恰当的分片数量和分片副本数量 最开始使用ElasticSearch时,一般都是创建一个索引,导入数据,然后发送查询命令检索数据。我们确信系统运行庚子,至少在最开始,数据量不大而且QPS(Query Per Second)也不高的时候运行良好。在幕后,ElasticSearch创建了一些分片来存储数据,也可能还会创建分片副本(例如,如果用默认配置),而且用户在配置方面也不用过多地操心。 当应用程

    • 我试图理解什么是碎片和副本在Elasticsearch中,但我没有设法理解它。如果我下载Elasticsearch并运行脚本,那么根据我所知,我已经启动了一个具有单个节点的集群。现在这个节点(我的PC)有5个碎片(?)还有一些复制品(?)。 它们是什么,我有5个重复的索引吗?如果是,为什么?我需要一些解释。

    • 假设在创建索引时,我没有为此设置任何副本,如果我使用update settings API进行更新,并且将副本状态更改为1。如果我有2个节点,那么应该在第二个节点上创建副本,因为在主节点侧,由于集群状态显示黄色,碎片没有分配给node2,所以不会创建副本,即使我们将副本启用为1。 请分享为什么副本碎片没有分配到Node2? 但在集群启动时,节点显示它们检测到并相互连接。

    • 我正在尝试在我的本地机器上安装弹性搜索环境的单集群-多节点环境。我混淆了碎片和复制品的概念 情况1)在下面的pic中:emp索引碎片数=1和副本数=1,这似乎很好,因为主节点不包含副本,碎片数应该是1,所以分配另一个节点中的一个成为它的碎片和副本 情况2)在情况2中,员工索引-i增加了碎片数=2和副本数=2-> 下面那个头部插件在暗示什么 1)我们设置的碎片数量是否存在于每个节点中-例如,在emp

    • 我有一个html选择选项 当我加载这个HTML时,我需要选择选项(基于从DB给出的数据)。 那么如何根据将分配给呢? 运行示例:http://jsfidle.net/o850tw9l/

    • 我正在运行一个2节点的elasticsearch集群,并将我的所有索引配置为2个主碎片和1个副本。起初,我认为每个节点将存储1个主碎片和1个副本,尽管这不是正在发生的事情。 如上所示,每个碎片都由单个节点托管,没有分配副本。 我做错了什么?