es 基于磁盘的shard分配参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es 基于磁盘的shard分配参数相关的知识,希望对你有一定的参考价值。
参考技术A Elasticsearch不会将分片分配给使用磁盘超过85%的节点。它也可以设置为绝对字节值(如500mb),以防止Elasticsearch在小于指定的可用空间量时分配分片。此设置不会影响新创建的索引的主分片,或者特别是之前任何从未分配过的分片。Elasticsearch将尝试从磁盘使用率超过90%的节点重新分配分片。它也可以设置为绝对字节值,以便在节点小于指定的可用空间量时将其从节点重新分配。此设置会影响所有分片的分配,无论先前是否分配。
Elasticsearch对每个索引强制执行只读索引块(index.blocks.read_only_allow_delete)。这是防止节点耗尽磁盘空间的最后手段。一旦有足够的可用磁盘空间允许索引操作继续,就必须手动释放索引块。
示例:
Elasticsearch应该多久检查一次群集中每个节点的磁盘使用情况。 默认为30秒。
ES实战分片无法分配
分片无法分配的问题思路
一、寻找到无法分配的索引分片
GET /_cat/shards?v&s=states:desc
结果
索引名称 分片编号 主副分片 分片状态 文档数量 分片存储大小 分配所在IP 分配所在node名称
index shard prirep state docs store ip node
state为unassigned代表未分配的分片。
二、查询分片未分配的理由
可以指定某个分片查询未分配的理由
GET _cluster/allocation/explain
"index": "nbilling_rebate_sit_topic_index",
"shard": 0,
"primary": true
index:索引名称
shard:分片编号
primary:是否是主分片
也可以直接使用命令
GET /_cluster/allocation/explain
这个命令只会展示出一条无法分配索引的分片的信息,包括无法分配的理由。
三、根据分片未分配的理由可以进行一些处理
- 简单重试
POST /_cluster/reroute?retry_failed=true
- 尝试定向分配主分片 可能丢数据
POST /_cluster/reroute
"commands" : [
"allocate_stale_primary" :
"index" : "indexName",
"shard" : 1,
"node" : "es-prd-node1",
"accept_data_loss": true
]
- 尝试初始化主分片,必然失去数据
POST /_cluster/reroute
"commands" : [
"allocate_empty_primary" :
"index" : "indexName",
"shard" : 1,
"node" : "es-prd-node1",
"accept_data_loss": true
]
- 对于一些副本分片无法重新分配的情况,可以讲副本数修改为比较少的数 比如1,在修改为原来的数量。千万不要讲副本分片数轻易设为0。
PUT myIndex-20210921/_settings
"number_of_replicas": 1
- 一些可以丢数据的场景,直接删除索引重建,也可以快速恢复集群。比如由于副本分片数为0,代表可以丢失数据,在主分片无法恢复的情况下,直接重建此索引。
GET indexName
PUT indexName
....
由于集群active Master节点压力过大,或者通信延迟较高,导致元数据信息更新与实际分片信息出现误差时,也会出现分片无法分配的情况,一般表现为节点路径下找不到该索引的相关文件,如果该索引存在副本分片,可以遍历所有ESNode实例的存储路径,应该是可以找到相关文件的,直接拷贝到元数据中指定的Node实例的对应劜,是可以恢复数据的。
以上是关于es 基于磁盘的shard分配参数的主要内容,如果未能解决你的问题,请参考以下文章
es 2个node环境下replica shard是如何分配的