Isso acontece quando o Elasticsearch pensa que o disco está ficando sem espaço, então ele se coloca no modo somente leitura.
Por padrão, a decisão do Elasticsearch é baseada na porcentagem de espaço livre em disco, portanto, em discos grandes, isso pode acontecer mesmo se você tiver muitos gigabytes de espaço livre.
A marca d'água do estágio de inundação é de 95% por padrão, então em uma unidade de 1 TB você precisa de pelo menos 50 GB de espaço livre ou o Elasticsearch se colocará no modo somente leitura.
Para documentos sobre a marca d'água do estágio de inundação, consulte https://www.elastic.co/guide/en/elasticsearch/reference/6.2/disk-allocator.html .
A solução certa depende do contexto - por exemplo, um ambiente de produção versus um ambiente de desenvolvimento.
Solução 1: libere espaço em disco
Liberar espaço em disco suficiente para que mais de 5% do disco fique livre resolverá esse problema. O Elasticsearch não sairá automaticamente do modo somente leitura quando houver disco suficiente livre, porém, você terá que fazer algo assim para desbloquear os índices:
$ curl -XPUT -H "Content-Type: application/json" https://[YOUR_ELASTICSEARCH_ENDPOINT]:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
Solução 2: alterar a configuração da marca d'água do estágio de inundação
Altere a "cluster.routing.allocation.disk.watermark.flood_stage"
configuração para outra coisa. Ele pode ser definido para uma porcentagem inferior ou para um valor absoluto. Aqui está um exemplo de como alterar a configuração dos documentos :
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"
}
}
Novamente, depois de fazer isso, você terá que usar o comando curl acima para desbloquear os índices, mas depois disso eles não devem entrar no modo somente leitura novamente.