Elasticsearch:如何减少主分片的数量?

Elasticsearch: How can I reduce the number of primary shards?

我在使用 Elasticsearch 时遇到了一些困难。顺便说一下,我 运行 将 Elasticsearch 作为 Windows 服务。

注意事项:

  1. 我无法通过 Cerebro.
  2. 连接到我的 Elasticsearch 集群(1 个节点)
  3. Elasticsearch 请求超时。起初,Kibana noticed the timeouts,然后我开始进一步调查。
  4. 当我重启Elasticsearch服务时,需要很长时间才能启动。值得注意的是,当我 运行 _cat/indices 时,索引需要很长时间才能从黄色变为红色。

我 运行 _cluster/stats?human&pretty 我注意到以下几点:

  "indices": {
    "count": 159,
    "shards": {
      "total": 793,
      "primaries": 793,
      "replication": 0.0,
      "index": {
        "shards": {
          "min": 3,
          "max": 5,
          "avg": 4.987421383647798
        },
        "primaries": {
          "min": 3,
          "max": 5,
          "avg": 4.987421383647798
        },
        "replication": {
          "min": 0.0,
          "max": 0.0,
          "avg": 0.0
        }
      }
    },
    "docs": {
      "count": 664553,
      "deleted": 0
    },
    "store": {
      "size": "525.8mb",
      "size_in_bytes": 551382263
    },
    "fielddata": {
      "memory_size": "0b",
      "memory_size_in_bytes": 0,
      "evictions": 0
    },

我的问题:


更新:我相信我分配了太多碎片。

所以我修改后的问题是:

如果您在一台机器上 运行 elasticsearch,我会说是的,这是一个非常大的危险信号。你应该能够用 1 个碎片做你想做的事。 在那里查看更多详细信息: Multiple shards on single machine performance

在 elasticsearch 的仅 1 个节点上拥有 793 个主分片是一个很大的 NO。 Elasticsearch 的规模来自于它的分布式特性。另外,我注意到你没有任何副本,所以它也不可靠,如果一些主分片损坏,那么在这种情况下它们没有任何恢复机制。

关于您的问题,我应该缩小到多少个分片?
如果你有大数据(超过 100 GB),这完全取决于你的要求,你应该分成多个主分片,它们应该存在于多个节点上以提高性能(从小分片大小和另一个硬件中获得)并且它提供水平可扩展性(HS)。

但是如果您的数据很小,即总索引大小只有几 GB,那么拥有多个分片也会影响性能,因为您的分片将只有少量数据,将所有数据存储在一个分片中将提高性能在这种情况下很多。

有关分片策略的更多信息,请参阅 this 指南。

您可以使用提供的 link https://www.elastic.co/guide/en/elasticsearch/reference/current/indices-shrink-index.html 用户 The_Pingu 减少分片数量,但这也取决于您使用的 ES 版本。我建议,在走这条路之前,您应该考虑以下架构方面的问题。

  1. ES集群应该多少个节点,一个节点的ES集群在生产环境中是绝对不推荐的,因为生产环境中即使数据量很小也会失去高可用
  2. 您需要多少个分片。
  3. 您需要多少个副本。 (尽管这可以在运行时轻松更改而无需太多开销)。