ES日志报错赏析-index cannot exceed 2147483519

2023-07-19 16:00:49 浏览数 (2)

报错现象

代码语言:javascript复制
number of documents in the index cannot exceed  2147483519

报错解析

ES单个分片最大的文档数是21个亿。如果写入的doc总量超过这个值,就会写入拒绝!!

为防止因分片满导致写入拒绝,一定要提前做好监控告警,分片文档数大于19亿及时告警。平时控制分片大小在30-50G健康水位,防止单个分片过大。防止倾斜数据产生。

解决方案

方案1:

新建新索引写入,并且规划好分片大小。

方案2:

reindex索引,新索引做好分片规划

首先关闭索引自动创建,防止旧索引删除后,自动创建同名索引。

代码语言:javascript复制
PUT _cluster/settings
{
  "persistent": {
    "action.auto_create_index": false
  }
}

其次:先去掉副本,索引设置只读,禁写。

代码语言:javascript复制
PUT indexname/_settings
{
  "blocks.write": true
}

第三步,创建目标索引,包括settingsmappings(此处省略创建步骤)

执行拷贝

代码语言:javascript复制
POST _reindex?wait_for_completion=false&slices=auto&refresh
{
  "source": {
    "index": "indexname"
  },
  "dest": {
    "index": "indexname_new"
  }
}

第四步:查看进度 自定义拷贝

代码语言:javascript复制
获取reindex任务列表
GET _tasks?detailed=true&actions=*reindex

根据任务ID查看任务
GET /_tasks/r1A2WoRbTwKZ516z6NEs5A:36619

若想取消任务
POST _tasks/r1A2WoRbTwKZ516z6NEs5A:36619/_cancel

第五步:删除旧索引delete source index

第六步:添加别名

代码语言:javascript复制
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "indexname_new",
        "alias": "indexname"  //这里可以用老索引名字,就不需要业务侧修改写入索引名了
      }
    }
  ]
}

0 人点赞