当 Elasticsearch 认为磁盘空间不足时会发生这种情况,因此它将自己置于只读模式。
默认情况下,Elasticsearch 的决定基于可用磁盘空间的百分比,因此在大磁盘上,即使您有许多 GB 的可用空间,也会发生这种情况。
洪水阶段水印默认为 95%,因此在 1TB 驱动器上,您至少需要 50GB 可用空间,否则 Elasticsearch 会将自身置于只读模式。
有关洪水阶段水印的文档,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html。
正确的解决方案取决于上下文 - 例如生产环境与开发环境。
解决方案 1:释放磁盘空间
释放足够的磁盘空间以便超过 5% 的磁盘可用将解决此问题。但是,一旦有足够的磁盘空闲,Elasticsearch 就不会自动退出只读模式,您必须执行以下操作来解锁索引:
$ curl -XPUT -H "Content-Type: application/json" https://[YOUR_ELASTICSEARCH_ENDPOINT]:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
解决方案 2:更改洪水阶段水印设置
将"cluster.routing.allocation.disk.watermark.flood_stage" 设置更改为其他设置。它可以设置为较低的百分比或绝对值。以下是如何从the docs 更改设置的示例:
PUT _cluster/settings
{
"transient": {
"cluster.routing.allocation.disk.watermark.low": "100gb",
"cluster.routing.allocation.disk.watermark.high": "50gb",
"cluster.routing.allocation.disk.watermark.flood_stage": "10gb",
"cluster.info.update.interval": "1m"
}
}
同样,在这样做之后,您必须使用上面的 curl 命令来解锁索引,但之后它们不应再次进入只读模式。