# Одна нода использует больше места на ssd, чем вторая в ES 2.0

**URL:** <https://discuss.elastic.co/t/ssd-es-2-0/32082>\
**Category:** Вопросы на русском языке\
**Created:** [October 13, 2015, 12:33pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082 "2015-10-13T12:33:15Z")\
**Posts on this page:** 18\
**Page:** 1

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 13, 2015, 12:33pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/1 "2015-10-13T12:33:16Z")

</div>

Здравствуйте.  
Из-за нехватки места на SSD под индекс решил попробовать версию 2.0, в которой появился deflate. Удалось снизить используемое место почти в два раза, но возникла такая проблема - периодически одна из нод начинает вырываться вперед по используемому месту. Если дать команду optimize, то место высвобождается. На графике это выглядит это так:  
 ![](https://us1.discourse-cdn.com/elastic/original/2X/3/300720eb832b2b34b9be2efee6c9e565463c8f0e.png)  
Индексы с TTL 24 часа, четыре с фиксированными именами, и четыре с датой в конце.  
В 1.7 место использовалось равномерно обеими нодами. Может, в 2.0 появилась какая-то волшебная настройка, которую я пропустил в документации?  
Спасибо

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 13, 2015, 1:28pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/2 "2015-10-13T13:28:58Z")

</div>

Есть несколько вопросов/уточнений.

1. TTL у вас как реализован? Через параметр ttl или вы весь индекс удаляете каждый день?
2. Я не очень понял график. Во сколько вы optimize на этом графике запустили?
3. Вы настройки merge throttling в 1.7 меняли?

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 13, 2015, 2:19pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/3 "2015-10-13T14:19:28Z")

</div>

1. Через параметр ttl
2. В 10:40, в 14:30. Потом поставил в крон каждый час
3. Я пробовал их менять, когда пытался часть данных оставить на ssd, а часть на sas. Производительность не устроила и я вернул все по умолчанию. Сейчас конфиг такой:  
cluster.routing.allocation.node\_initial\_primaries\_recoveries: 140 (осталось с эксперимента с почасовыми индексами)  
cluster.routing.allocation.node\_concurrent\_recoveries: 400  
indices.recovery.max\_bytes\_per\_sec: 100mb  
bootstrap.mlockall: true  
indices.memory.index\_buffer\_size: 35%  
index.translog.flush\_threshold\_ops: 100000  
threadpool.search.type: fixed  
threadpool.search.size: 25  
threadpool.search.queue\_size: 3000  
threadpool.index.type: fixed  
threadpool.index.size: 16  
threadpool.index.queue\_size: 200  
threadpool.bulk.type: fixed  
threadpool.bulk.size: 16  
threadpool.bulk.queue\_size: 500  
index.refresh\_interval: "1m"  
index.compound\_on\_flush: false  
index.compount\_format: false  
index.warmer.enabled: false

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 13, 2015, 3:14pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/4 "2015-10-13T15:14:09Z")

</div>

Что-то я не пойму 10:40 это когда optimize завершился или когда он начался? По графику, такое впечатление что optimize начался около 7-ми.

Запуск optimize раз в час - это не ответ. Хотелось бы понять, что там происходит. А вы не могли бы выключить optimize на время, запустить curl "localhost:9200/\_nodes/stats" в нормальной состоянии системы, потом дождаться пока одна из нод не начнет расти и запустить эту команду еще пару раз?

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 14, 2015, 11:58am UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/5 "2015-10-14T11:58:00Z")

</div>

Как только я запускал curl -XPOST '[http://localhost:9200/my\_index\*/\_optimize](http://localhost:9200/my_index*/_optimize)' в ответ через несколько секунд прилетало acknowledge:true, а место сразу же высвобождалось. Это было в 10:40, в 14:30, когда резко упало занятое место сначала на одной ноде, потом на второй.  
Свой "костыль" с optimize я вчера вечером выключил, но ночью ноды почему-то передрались из-за того, кто из них мастер, вылечилось рестартом и удалением одного из индексов.  
Сейчас показания между нодами почти не расходятся, вывод nodes/stats сохранил сюда [http://pastebin.com/cwVFjZNq](http://pastebin.com/cwVFjZNq), иначе ругается на размер сообщения

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 14, 2015, 4:07pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/6 "2015-10-14T16:07:39Z")

</div>

Если проблема повторится, запустите пожалуйста `_nodes/stats` и `my_index*/_stats`, сохраните результат и потом запустите `my_index*/_flush` вместо `_optimize` и повторите `_nodes/stats` и `my_index*/_stats`.

Сложно сказать, что там происходит. Есть теория, что по какой-то причине translog застрял и optimize его подтолкнул, но почему он застрял - совсем не понятно.

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 15, 2015, 8:26pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/7 "2015-10-15T20:26:27Z")

</div>

Повторилось, flush помог:

 ![](https://us1.discourse-cdn.com/elastic/original/2X/8/8fe5cf5393f33153d9eae95f0580e5c950a59cf9.png)  
node stats до  
[http://pastebin.com/8NY0st0e](http://pastebin.com/8NY0st0e)  
После  
[http://pastebin.com/UPQVDkTh](http://pastebin.com/UPQVDkTh)

По index stats случайно затер что было до, осталось только то что было после:  
[http://pastebin.com/9fkf52aV](http://pastebin.com/9fkf52aV)

Как воспроизведется в следующий раз, сделаю my\_index\*/\_stats до команды flush

Утром сегодня внес изменения в конфигурацию, добавил  
threadpool.bulk.queue\_size: 10000  
indices.store.throttle.max\_bytes\_per\_sec: 150mb  
indices.memory.index\_buffer\_size: 40%

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 16, 2015, 12:11am UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/8 "2015-10-16T00:11:14Z")

</div>

Интересно. А не могло так получиться, что вы перед установкой 2.0 выключили flush и потом забыли его включить? У вас нигде `index.translog.disable_flush` в установках индексов не появляется?

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 16, 2015, 7:34am UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/9 "2015-10-16T07:34:42Z")

</div>

Нет, темплейты у всех индексов одинаковые, за исключением полей:  
{  
"template\_per\_index": {  
"order": 0,  
"template": "my\_index\*",  
"settings": {  
"index": {  
"codec": "best\_compression",  
"cache": {  
"field": {  
"type": "soft"  
}  
},  
"refresh\_interval": "1m",  
"store": {  
"compress": {  
"stored": "true"  
}  
}  
}  
},  
"mappings": {  
"my\_index": {  
"\_ttl": {  
"default": "24h",  
"enabled": true  
},  
"\_all": {  
"enabled": false  
},  
}  
},  
"aliases": {}  
}  
}

У всех текстовых полей стоит  
"index": "not\_analyzed",  
"type": "string",  
"doc\_values": false

В elasticsearch.yml у меня flush фигурирует только в настройках  
index.translog.flush\_threshold\_ops: 100000  
index.compound\_on\_flush

Сейчас пока место не разъезжается - подожду вечера, видимо, это начинает проявляться под нагрузкой

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 16, 2015, 1:41pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/10 "2015-10-16T13:41:57Z")

</div>

А что elasticsearch выдает если запустить `curl localhost:9200/_settings`?

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 18, 2015, 10:21am UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/11 "2015-10-18T10:21:51Z")

</div>

Вот index stats до flush:  
[http://pastebin.com/5jNb5etD](http://pastebin.com/5jNb5etD)  
\_settings выдает настройки всех индексов, они одинаковые: [http://pastebin.com/qq8wPdeL](http://pastebin.com/qq8wPdeL)

Еще подметил - расползаться место начинает после рестарта одной из нод - сегодня утром одна из них склеилась от нехватки памяти, ее перезапустили, после этого место на ноде, которую рестартовали рвануло вверх.

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 18, 2015, 10:25am UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/12 "2015-10-18T10:25:14Z")

</div>

Попутно еще заметил одну странность - не удалились данные по ttl, сделал запрос к старому индексу, а там ttl отрицательный:  
"hits": {  
"total": 52846179,  
"max\_score": 1,  
"hits": [  
{  
"\_index": "myindex-2015.10.16",  
"\_type": "myindex",  
"\_id": "AVBwavtwvcZGdpan36L7",  
"\_score": 1,  
"\_ttl": -82358358,  
"\_source": {  
"@timestamp": "2015-10-16T11:31:09.102Z",  
"info": {  
"PID": "8F23E3FC-72C0-EF84-09A1-A947DE8AC920",  
"CID": "0E881553-589D-42D7-8DE6-7C21D5300F5B",  
"N": 9,  
"IP": "88.200.214.13",  
"ADID": {  
"msg": "null",  
"num": "0"  
}  
},  
"error": {}  
}  
},

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 18, 2015, 4:33pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/13 "2015-10-18T16:33:27Z")

</div>

Это всегда происходить при перезагрузки ноды? Если да, то это нормально - это связано с тем что файлы между нодами синхронизируются и в связи с тем, что у вас очень не оптимальное использование ttl файлы на разных нодах у вас становятся разными очень быстро - в результате при перезагрузке по сути создается полная копия каждой шарды и перед тем как старая копия удаляется. Однако, в этой ситуации flush не должен помогать.

Я пытаюсь воспроизвести эту проблему на моей машине и чтобы лучше понять что там происходит, у меня еще пара вопросов:

1. а наблюдали ли вы эту проблему когда-нибудь без перезагрузки второй ноды
2. вы не могли бы поставить логер index.translog в TRACE и прислать мне логи (можно по email)
3. когда это еще раз произойдет, вместе со stats вы не могли бы запустить ls -lR в директории, где elasticsearch хранит данные
4. вы не могли бы более подробно описать, как часто у вас индексируются записи и в каком количестве

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 19, 2015, 2:35pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/14 "2015-10-19T14:35:55Z")

</div>

1. Нет, только после перезагрузки. При чем, если перезапустить их обе одновременно, то и место начинает расти на обоих. Но, расти оно начинает только после того, как кластер становится зеленым и при команде flush )место высвобождается. При рестарте ноды место тоже освобождается.
2. [https://yadi.sk/i/VPQ13C4gjqjhT](https://yadi.sk/i/VPQ13C4gjqjhT)
3. ls - [https://yadi.sk/d/GEpZn6NGjqkGV](https://yadi.sk/d/GEpZn6NGjqkGV)  
index stats [https://yadi.sk/i/bCdftveOjqjvG](https://yadi.sk/i/bCdftveOjqjvG)  
node stats [https://yadi.sk/i/vskZegh4jqkNf](https://yadi.sk/i/vskZegh4jqkNf)  
Увы, пропустили момент когда утекло место и все упало, так что вывод всех команд уже после рестарта. Попробую подловить по-раньше, до того, как место закончится.
4. Записи индексируются непрерывно. Если верить кибане, в пике примерно 10 000 событий в секунду, ночью в районе 1000. Парсер самописный, отправляет bulk каждые 30 секунд

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 19, 2015, 11:49pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/15 "2015-10-19T23:49:53Z")

</div>

Очень бы хотелось увидеть вывод ls -lR когда диск не свободен, и выводы `/_segments` в дополнение к index и node stats. И еще пара вопросов.

1. после того, как вы flush запускаете проблема полностью исчезает до следующей перезагрузки?
2. Зачем вам TTL, если вы все-равно новый индекс каждый день создаете?

---

<div class="post-metadata">

**Author:** ![11116](https://avatars.discourse-cdn.com/v4/letter/1/6bbea6/32.png) [@11116](https://discuss.elastic.co/u/11116)\
**Post date:** [October 21, 2015, 5:13pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/16 "2015-10-21T17:13:52Z")

</div>

Все сделал: [https://yadi.sk/d/RJ-CM\_AVjuJHw](https://yadi.sk/d/RJ-CM_AVjuJHw)  
Для теста полностью удалил все индексы, сутки все было в порядке. Сегодня днем рестартанул одну ноду, к вечеру она отъела на 100GB больше, чем та, которую я не трогал.

1. Нет, после flush место опять начинает расти. Нормально фунциклирует только новый индекс, старый растет по мере наполнения и потом не удаляет данные по ttl, который становится отрицательным. Удаляю вручную.
2. Нужны данные за последние 24 часа, а 48 часов на одном ssd не умещаются. Единственное, можно попробовать почасовые индексы сделать. Новый индекс каждый день создаем для того, чтобы к новому индексу применялся новый маппинг - формат меняется достаточно динамично.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [October 21, 2015, 7:11pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/17 "2015-10-21T19:11:45Z")

</div>

Спасибо за данные. Будем изучать.

Я думаю, что переход на почасовой индекс - это правильно решение. Ttl у вас всю производительность убивает.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:50pm UTC](https://discuss.elastic.co/t/ssd-es-2-0/32082/18 "2017-07-06T13:50:53Z")

</div>


