DEBUG.WIKI
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS
IPPeak:从目标地区访问网页,住宅代理、SEO 监测、广告验证
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国

Elasticsearch 扩容后仍报 FORBIDDEN/12:先确认水位再处理写入封锁

Elasticsearch 磁盘扩容后仍无法写入时,先核对数据路径、有效 high 水位和索引写入封锁,再处理残留设置与业务积压。

Elasticsearch 日志出现 flood stage disk watermark,写入请求被 FORBIDDEN/12/index read-only / allow delete 拒绝。给服务器扩了磁盘,写入却没有恢复。先确认 Elasticsearch 使用的数据路径已经获得新增空间,再检查受影响节点是否低于实际 high 水位,以及索引上的写入封锁是否仍在。

这是磁盘保护场景。旧 6.x 的错误可能是 HTTP 403;当前版本也可能返回 HTTP 429,并包含 disk usage exceeded flood-stage watermark。状态码不同不能代替对日志、磁盘和索引设置的核对。也不能因为当前空间充足,就认定历史磁盘保护从未触发。

扩的是哪块盘,进程看到多少空间

检查日志中报水位的节点和数据路径,并对照当前分片位置。报错请求可能发给另一台节点,相关索引的分片仍在空间不足的节点上;只看接收请求那台机器不够。

以下为 Kibana Dev Tools 中的只读检查示例,需要读取集群信息的权限:

GET /_cat/allocation?v
GET /_cat/shards?v
GET /_cluster/settings?include_defaults=true&flat_settings=true
GET /logs-app-000001/_settings?flat_settings=true

索引名需替换。比较节点实际可用空间、目标索引分片所在节点、有效水位设置,以及 index.blocks.read_only_allow_delete。不要只比较一份本地配置文件,也不要公开输出账户信息。

底层卷容量增加后,分区、文件系统或容器挂载仍可能保持旧状态。应沿实际部署核对到底哪一步尚未完成:云盘变大不等于数据目录可用空间变大,另一个挂载点有空闲空间也不代表 path.data 得到了扩容。

恢复标准是低于 high,而不是刚离开 flood stage

当前 Elasticsearch 默认 low、high、flood stage 分别为已用空间的 85%、90%、95%,但不能直接把默认值当成当前集群配置。百分比或比率表示已用空间;字节值表示需要保留的空闲空间,含义相反。

大磁盘还需要核对 max_headroom。它会限制百分比水位要求的最大空闲空间,而且显式设置相应水位后,默认 headroom 不一定继续适用。不要仅按 95% 算一个数字,就报告空间已经满足条件。

当前版本会在相关节点低于 high 水位后自动移除这种写入封锁。因此从 96% 降到 93%,虽已离开默认 flood stage,却仍不足以达到默认 high 的恢复条件。需要留出持续写入、迁移及后台任务所需空间。

有条件时,通过受维护的扩容或分片迁移降低压力,检查迁移是否确实发生。迁移受分片分配规则、数据层和其他节点空间约束,不能认为新增一台机器就会立即完成。

空间已恢复,再处理仍残留的指定索引封锁

旧版本可能需要显式清除磁盘保护留下的设置。当前版本若仍有封锁,也要先核对实际水位、节点空间及其他阻止自动恢复的条件。确认磁盘已经恢复并且目标封锁确属这个保护项后,可由有权限的管理员针对明确的索引处理。

下面是更改单个索引设置的示例,不能在节点仍接近耗尽时执行:

PUT /logs-app-000001/_settings
{
  "index.blocks.read_only_allow_delete": null
}

null 在此删除这项显式设置。它不修复磁盘,不会取消权限限制、其他只读设置或生命周期策略造成的约束,也不是重新初始化索引。

保存原索引设置和集群水位配置,只处理确认过的业务索引。不要用覆盖所有索引的通配符一并清除系统索引保护,也不要长期关闭磁盘阈值检测。封锁刚清掉就再次出现,说明空间或有效配置仍未满足持续运行条件,应停止循环解锁。

需要释放数据空间时,不能直接删除 data 目录里的分片文件。使用 Elasticsearch 支持的数据管理方式,按保留策略与可验证快照决定是否删除索引。read_only_allow_delete 名称里的 allow delete 不意味着可以靠大量删除单条文档即时释放空间;删除文档本身需要额外处理空间。

写入恢复后检查积压和重试

复查目标索引设置、节点水位日志和分片迁移,使用业务批准的写入检查确认数据能够落到预期索引。集群 green 主要说明分片可用性,不能独自证明所有索引都可写。

采集器可能积压了失败请求。恢复后核对重试队列、文档数量和业务的幂等规则,防止直接重放造成重复数据;解除封锁不会自动找回已丢弃的事件。

若此前临时改过水位,应根据保存的有效配置恢复,而不是把全部设置清空为默认值。出现新的空间压力时暂停非必要摄入并协调容量处理,保留诊断信息;回退配置也不会撤销已经删除的索引或恢复未保留的数据。