Elasticsearch:如何减少主分片的数量?
Elasticsearch: How can I reduce the number of primary shards?
我在使用 Elasticsearch 时遇到了一些困难。顺便说一下,我 运行 将 Elasticsearch 作为 Windows 服务。
注意事项:
- 我无法通过 Cerebro.
连接到我的 Elasticsearch 集群(1 个节点)
- Elasticsearch 请求超时。起初,Kibana noticed the timeouts,然后我开始进一步调查。
- 当我重启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
},
我的问题:
- 793碎片是危险信号吗?我应该调整这个吗?
更新:我相信我分配了太多碎片。
所以我修改后的问题是:
- 如何解决分配了太多分片的情况?
- 具体来说,我应该缩小到多少个分片?
- 我应该发出哪些命令来减少碎片的数量?
- 特别是考虑到我的 Elasticsearch 集群(即 1 个节点)需要很长时间才能重新启动。
如果您在一台机器上 运行 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 版本。我建议,在走这条路之前,您应该考虑以下架构方面的问题。
- ES集群应该多少个节点,一个节点的ES集群在生产环境中是绝对不推荐的,因为生产环境中即使数据量很小也会失去高可用
- 您需要多少个分片。
- 您需要多少个副本。 (尽管这可以在运行时轻松更改而无需太多开销)。
我在使用 Elasticsearch 时遇到了一些困难。顺便说一下,我 运行 将 Elasticsearch 作为 Windows 服务。
注意事项:
- 我无法通过 Cerebro. 连接到我的 Elasticsearch 集群(1 个节点)
- Elasticsearch 请求超时。起初,Kibana noticed the timeouts,然后我开始进一步调查。
- 当我重启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
},
我的问题:
- 793碎片是危险信号吗?我应该调整这个吗?
更新:我相信我分配了太多碎片。
所以我修改后的问题是:
- 如何解决分配了太多分片的情况?
- 具体来说,我应该缩小到多少个分片?
- 我应该发出哪些命令来减少碎片的数量?
- 特别是考虑到我的 Elasticsearch 集群(即 1 个节点)需要很长时间才能重新启动。
如果您在一台机器上 运行 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 版本。我建议,在走这条路之前,您应该考虑以下架构方面的问题。
- ES集群应该多少个节点,一个节点的ES集群在生产环境中是绝对不推荐的,因为生产环境中即使数据量很小也会失去高可用
- 您需要多少个分片。
- 您需要多少个副本。 (尽管这可以在运行时轻松更改而无需太多开销)。