【问题标题】:How to undo setting Elasticsearch Index to readonly?如何撤消将 Elasticsearch 索引设置为只读?
【发布时间】:2016-04-26 22:57:11
【问题描述】:

所以我只是将我的一个索引设置为只读,现在想删除它。

将其设置为只读:

PUT my_index/_settings
{ "index": { "index.blocks.read_only" : true } }

当我试图删除它时,我收到了这样的回复:

ClusterBlockException[blocked by: [FORBIDDEN/5/index read-only (api)];]

然后我尝试将索引设置为只读false:

PUT my_index/_settings
{ "index": { "index.blocks.read_only" : false } }

但这给出了与上面相同的错误消息。那么如何将 readonly 设置回 false 呢?

【问题讨论】:

    标签: elasticsearch


    【解决方案1】:

    答案真的很老,所以我也会添加一个 elastic-6+ 答案:

    PUT /[_all|<index-name>]/_settings
    {
      "index.blocks.read_only_allow_delete": null
    }
    

    https://www.elastic.co/guide/en/elasticsearch/reference/6.x/disk-allocator.html

    仅供参考(用于上下文):由于磁盘用完,我遇到了只读索引并从 logstash 收到错误消息:

    ...retrying failed action with response code: 403 ({"type"=>"cluster_block_exception", "reason"=>"blocked"
    

    elasticsearch:
    ClusterBlockException[blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];]

    【讨论】:

    • 对 6.4 更正,本地主机上的 curl 命令类似于:curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only_allow_delete" : false } }'
    • 文档仍然说您应该将其设置为 null:elastic.co/guide/en/elasticsearch/reference/6.4/…
    • 要将其应用于所有索引,只需省略“index-name/”前缀并将 PUT 直接发送到“_settings”
    • 用@Rich 的_all 建议更新了答案
    【解决方案2】:

    es index设为只读的正确方法是

    PUT your_index/_settings
    {
      "index": {
        "blocks.read_only": true
      }
    }
    

    true 更改为 false 以撤消它。

    你设置了非动态设置

       {
          "index": {
            "index.blocks.read_only": false
          }
        }
    

    我认为这不是你的本意。此外,我认为您应该在第一次操作期间看到错误,因为非动态设置只能在 close indices 上更新。

    运行

    POST your_index/_close
    

    然后尝试更改它。

    【讨论】:

    • 谢谢,我的问题是我使用的是index.blocks.read_only 而不是blocks.read_only
    • @Kristofer 的答案在当前的 ES 6 中是最新的
    • 作为本地的一个班轮:curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only_allow_delete" : null } }'
    【解决方案3】:
    curl -X PUT "localhost:9200/_all/_settings" -H 'Content-Type: application/json' -d'{ "index.blocks.read_only" : false } }'
    

    【讨论】:

      【解决方案4】:

      在 ElasticSearch (ES) 的 2.x 版本中,您必须执行以下操作

      PUT your_index/_settings
      
      {
        "index": {
          "blocks": {
            "write": "false",
            "read_only": "false"
          }
        }
      }
      

      虽然在内部将索引设置为 read_only 为 true,但 ES 也将 write 更改为 true,并且仅将 read_only 恢复为 false 仍然不允许您更新索引,因此您必须更新 write 设置明确的。

      【讨论】:

        【解决方案5】:

        如果您安装了 Kibana,您可以转到您的 kibana 网址:

        Management (Left pane) -> Elasticseach Index Management -> Select your Index -> Edit Settings
        

        然后更新:

        "index.blocks.read_only_allow_delete": "false"
        

        此外,要在 kibana 上全局设置它,您可以转到开发工具(左窗格)并提出以下请求:

        PUT _settings
        {
          "index": {
            "blocks": {
              "read_only_allow_delete": "false"
            }
          }
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-16
          • 1970-01-01
          • 2012-05-17
          • 2018-09-13
          • 2017-07-04
          • 1970-01-01
          相关资源
          最近更新 更多