Как часть исследования использования ElasticSearch в качестве надежного хранилища документов, из приложения Java я запускаю базовый тест HA следующим образом:
Я установил минимальный кластер, используя легкодоступное изображение Docker для ElasticSearch 1.6 (https://registry.hub.docker.com/_/elasticsearch):
- 2 узла мастера/данных
- 1 клиент node (как всегда с кем-либо подключиться)
Затем я запускаю небольшое приложение-загрузчик, которое вставляет 500 000 документов по 1 КБ каждый.
Это занимает около 1 минуты с половиной на моей машине. За это время я перезапускаю текущий мастер node (перезагрузка докера).
В конце прогона Java API ответил OK на 100% моих запросов, но когда я проверяю количество документов с запросом на завивки, осталось несколько документов (где-то между 2 и 10 в зависимости от пробегов я сделал)
Даже с явным запросом "_refresh" в индексе, мой счетчик документов тот же.
Моя основная забота, конечно, заключается не в том, что некоторые документы не могут быть сохранены во время сбоя, а скорее в положительном результате, возвращаемом API (тем более, что я тестирую с помощью WriteConsistencyLevel.ALL).
Я знаю этот билет, но не уверен, применим ли он к моему основному сценарию
Мои вставки выполняются следующим образом:
client.prepareUpdate("test", "test", id)
.setDoc(doc).setUpsert(doc)
.setConsistencyLevel(WriteConsistencyLevel.ALL)
.execute.get.isCreated == true
Остальную часть кода можно найти здесь: https://github.com/joune/nosql/blob/master/src/main/scala/ap.test.nosql/Loader.scala
Пожалуйста, сообщите, если вы думаете, что я делаю что-то явно неправильно.
(Я знаю, что некоторые ответят, что использование ElasticSearch в качестве надежного хранилища документов просто неверно, но цель исследования, а не тот ответ, который я ожидаю)
Обновить Дополнительные журналы по просьбе Андрея Стефана
> grep discovery.zen.minimum_master_nodes elasticsearch.yml
discovery.zen.minimum_master_nodes: 2
> curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{"transient":{"logger._root":"DEBUG"}}'
{"acknowledged":true,"persistent":{},"transient":{"logger":{"_root":"DEBUG"}}}%
> curl -XPUT 'http://localhost:9200/_cluster/settings' -d '{"transient": {"logger.index.translog":"TRACE"}}'
{"acknowledged":true,"persistent":{},"transient":{"logger":{"index":{"translog":"TRACE"}}}}%
Запустите тест с 200 000 записей:
0 KO | 200000 OK
> curl -XGET 'localhost:9200/test/test/_count?preference=_primary'
{"count":199991,"_shards":{"total":5,"successful":5,"failed":0}}%
Я разместил журналы здесь: https://gist.github.com/ab1ed844f2038c30e63b