【问题标题】:TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];')TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only/allow delete (api)];')
【发布时间】:2018-06-10 11:42:59
【问题描述】:

当我尝试在 elasticsearch 中存储任何内容时,出现错误提示:

TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];')

我已经在我的索引中插入了大约 2 亿个文档。但我不知道为什么会发生这个错误。 我试过了:

curl -u elastic:changeme -XPUT 'localhost:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{"persistent":{"cluster.blocks.read_only":false}}'

正如这里提到的: ElasticSearch entered "read only" mode, node cannot be altered

结果是:

{"acknowledged":true,"persistent":{"cluster":{"blocks":{"read_only":"false"}}},"transient":{}}

但没有任何改变。我该怎么办?

【问题讨论】:

标签: elasticsearch elasticsearch-5


【解决方案1】:

试试GET yourindex/_settings,这将显示您的索引设置。如果read_only_allow_deletetrue,那么试试:

PUT /<yourindex>/_settings
{
  "index.blocks.read_only_allow_delete": null
}

我的问题已解决。

请参考es config guide了解更多详情。

curl 命令是

curl -X PUT "localhost:9200/twitter/_settings?pretty" -H 'Content-Type: application/json' -d '
{
  "index.blocks.read_only_allow_delete": null
}'

【讨论】:

  • 我做到了,得到的回应是:{"acknowledged": true}。同样的结果:“'TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];')'”]['/home/ehsan/dev/ bigADEVS/scripts/pubmed_tokenizer.py', '43', "es.index(index='pubmed_tokens', doc_type='tokens', body=doc)", "'TransportError(403, u'cluster_block_exception', u'blocked by: [FORBIDDEN/12/index 只读/允许删除 (api)];')'"]
  • 请阅读链接中的 es 指南。索引变为只读,因为磁盘上没有更多空间。用 df -h 确认。如果您使用了 95% 的磁盘空间。es 服务器将每 30 秒将所有索引变为只读模式。如果没有剩余空间,则需要释放足够的空间或按照指南更改 es 配置。
  • 这是问题所在,但我将弹性文件夹移动到另一个分区(只需移动文件夹)。集群运行状况是黄色的,它是只读的。我该怎么办?
  • 在您的磁盘上获得超过 15% 的可用空间后,您应该手动取消设置只读模式。 PUT yourindex/_settings { "index.blocks.read_only_allow_delete": null }
【解决方案2】:

上个月我遇到了同样的问题,你可以在你的 Kibana 开发工具上试试这个代码

curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'

希望对你有帮助

【讨论】:

    【解决方案3】:

    当我的磁盘空间已满时,我遇到了同样的问题,

    请查看我执行的步骤

    1-增加磁盘空间

    2-更新索引只读模式,见以下curl请求

    curl -XPUT -H "内容类型:应用程序/json" http://localhost:9200/_all/_settings-d '{"index.blocks.read_only_allow_delete": null}'

    【讨论】:

    • 这救了我!更新置于只读模式的所有索引。检查是否有任何索引处于只读-模式:curl localhost:9200/_cat/_settings/index.blocks*
    【解决方案4】:

    这是因为 Elastic Search 的默认水印磁盘使用情况。通常是磁盘大小的 95%。

    当 Elasticsearch 认为磁盘空间不足时会发生这种情况,因此它将自己置于只读模式。

    默认情况下,Elasticsearch 的决定基于可用磁盘空间的百分比,因此在大磁盘上,即使您有许多 GB 的可用空间,也会发生这种情况。

    洪水阶段水印默认为 95%,因此在 1TB 驱动器上,您至少需要 50GB 可用空间,否则 Elasticsearch 会将自身置于只读模式。

    有关洪水阶段水印的文档,请参阅https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html

    引自this answer的一部分

    一种解决方案是完全禁用它(我发现它在我的本地和 CI 设置中很有用)。为此,请运行 2 个命令:

    curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_cluster/settings -d '{ "transient": { "cluster.routing.allocation.disk.threshold_enabled": false } }'
    curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
    

    【讨论】:

      【解决方案5】:

      稍后我自己也遇到了这个问题,所以我完成了以下步骤。 1) 删除旧索引以立即释放空间——这使我获得了大约 23% 的空闲空间。 2) 更新索引只读模式。

      我仍然有同样的问题。我检查了开发控制台以查看可能仍被锁定的内容,但没有。重新启动集群并遇到同样的问题。

      最后在索引管理下,我选择了存在 ILM 生命周期问题的索引并选择重新应用 ILM 步骤。不得不这样做几次才能将它们全部清除,但确实如此。

      【讨论】:

        【解决方案6】:

        问题可能是磁盘空间问题,尽管我清理了很多磁盘空间,但我还是遇到了这个问题,所以,最后我删除了数据文件夹并且它起作用了:sudo rm -rf /usr/share/elasticsearch/data/

        【讨论】:

          【解决方案7】:

          这解决了问题; PUT _settings { "index": { "blocks": { "read_only_allow_delete": "false" }
          }

          【讨论】:

            猜你喜欢
            • 2018-11-09
            • 1970-01-01
            • 1970-01-01
            • 2018-08-16
            • 2015-12-24
            • 2015-03-10
            • 2019-05-30
            • 2020-01-10
            • 2015-12-07
            相关资源
            最近更新 更多