Не удается поменять параметры disk watermark


(PaWeLL) #1

Добрый день.
Пытаюсь изменить настройки действий по исчерпанию дисового пространства через API, но мне возращается ошибка:

[admin@client1 ~]$ curl -X PUT "10.xxx.xxx.xxx:9200/_cluster/settings?flat_settings=true" -H 'Content- 
Type: application/json' -d'
{
"transient" : {
    "cluster.routing.allocation.disk.watermark.low" : "93%"
}, "persistent" : {
    "cluster.routing.allocation.disk.watermark.low" : "93%"
}
}
'
{"error":{"root_cause":[{"type":"remote_transport_exception","reason":"[Master1][10.xxx.xxx.xxx:9300][cluster:admin/settings/update]"}],"type":"illegal_argument_exception","reason":"low disk watermark [93%] more than high disk watermark [90%]"},"status":400}

В действительности high disk watermark установлен на 95% во всех возможных местах: в файле на хостах, в постоянных и временных настройках.
То же самое происходит, когда я пытаюсь поменять high watermark. Тогда он ругается, что flood установлен на 95, хотя я везде проставил его на 98.

Откуда берутся эти настройки?


(Igor Motov) #2

Лучше всего менять сразу обе настройки, чтобы в целом они были

PUT /_cluster/settings?flat_settings=true
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "93%",
    "cluster.routing.allocation.disk.watermark.high": "95%"
  }
}

То же самое происходит, когда я пытаюсь поменять high watermark. Тогда он ругается, что flood установлен на 95, хотя я везде проставил его на 98.

Скорее всего, они не подцепились. Вы ноду после изменения в файле перегружали? У вас в /_cluster/settings другое значение не стоит? По приоритетам, настройки берутся из файла, с командной строки, постоянные, временные.


(PaWeLL) #3

/_cluster/settings возвращает только значение flood_stage - 98%

Не так давно перезагружал все ноды для добавления новой. В конфиг файле disk.watermark.high стоит 95%.


(Igor Motov) #4

Как я уже написал ранее одну и ту же установку можно задать в нескольких местах. Для того, чтобы посмотреть, какое значение в данный момент используется кластером, можно запустить:

GET _cluster/settings?include_defaults=true

или

GET _cluster/settings?include_defaults=true&flat_settings

(PaWeLL) #5

Добрый день.

Понятнее не стало. В выдаче команды фигурируют именно те цифры, которые и есть на самом деле: low-90, high - 95 , flood - 98.


(Vladimir Dolzhenko) #6

Можно вас попросить написать вывод команды целиком здесь, а так же elasticsearch.yml со всех нод ( и если есть какие-то значения переменных окружения не по-умолчанию, то и их тоже) ?


(PaWeLL) #7

Привет. Прошу прощения за долгое ожидание.
Вот вывод команды: https://pastebin.com/a14MPxRi
В файлах elasticsearch.yml лимиты заданы явно.


(Igor Motov) #8

Попытался воспроизвести вашу проблему следующим образом:

  1. Запустил 1 ноду v6.4.1 с установками:
cluster.routing.allocation.disk.threshold_enabled: true
cluster.routing.allocation.disk.watermark.low: "90%"
cluster.routing.allocation.disk.watermark.high: "95%"
  1. Запустил команду:
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.flood_stage": "98%"
  },
  "persistent": {
    "cluster.routing.allocation.disk.watermark.flood_stage": "98%"
  }
}

Тут надо отметить что устанавливать одно и то же значение и в transient и в persistent не имеет никого смысла. Если надо, что бы установки выжили перезагрузку кластера - то используйте persistent, если нет - то transient. И то и другое - только усложняет ситуацию.

  1. Когда запускаю следующую команду, то получаю, ошибку, как у вас
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "93%"
  }
}
  1. Однако, эта команда прекрасно работает, как и ожидалось
PUT _cluster/settings
{
  "transient": {
    "cluster.routing.allocation.disk.watermark.low": "93%",
    "cluster.routing.allocation.disk.watermark.high": "95%"
  }
}

Так что я не очень понимаю, в чем проблема.


(PaWeLL) #9

Хм, в Вашем варианте и правда сработало. Спасибо.

И раз уж зашла речь, правильно ли я понимаю, что persistent settings будут действовать, пока жива хотя бы одна нода кластера?
В случае включения кластера с нуля будут использоваться настройки из elasticsearch.yml?


(Igor Motov) #10

И раз уж зашла речь, правильно ли я понимаю, что persistent settings будут действовать, пока жива хотя бы одна нода кластера?

Если вы спрашиваете про transient и под нодой, вы имеете в виду ноду, которая может быть мастером - то да. persistent переживают перезагрузку всего кластера, они только исчезнут, если вы все ноды остановите, и удалите на них фолдер с данными.


(system) #11

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.