Нагрузочное тестирование нашего эластичного кластера - PullRequest
0 голосов
/ 24 августа 2018

В настоящее время мы пытаемся выполнить нагрузочное тестирование нашего приложения, которое требует много регистрации в нашем эластичном кластере. На большой нагрузке я начинаю видеть ошибку ниже от ES

Error: No Living connections
    at sendReqWithConnection (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:225:15)
    at next (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\connection_pool.js:213:7)
    at _combinedTickCallback (internal/process/next_tick.js:131:7)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

и до этого мы видим еще кучу ошибок

Error: Request Timeout after 30000ms
    at D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:354:15
    at Timeout.<anonymous> (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:383:7)
    at ontimeout (timers.js:482:11)
    at tryOnTimeout (timers.js:317:5)
    at Timer.listOnTimeout (timers.js:277:5)

и

Error: [es_rejected_execution_exception] rejected execution of org.elasticsearch.transport.TransportService$7@4d532edc on EsThreadPoolExecutor[bulk, queue capacity = 200, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@6c5897a1[Running, pool size = 1, active threads = 1, queued tasks = 200, completed tasks = 122300]]
    at respond (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:307:15)
    at checkRespForFailure (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\transport.js:266:7)
    at HttpConnector.<anonymous> (D:\home\site\wwwroot\node_modules\elasticsearch\src\lib\connectors\http.js:159:7)
    at IncomingMessage.bound (D:\home\site\wwwroot\node_modules\elasticsearch\node_modules\lodash\dist\lodash.js:729:21)
    at emitNone (events.js:111:20)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)
    at _combinedTickCallback (internal/process/next_tick.js:138:11)
    at process._tickDomainCallback (internal/process/next_tick.js:218:9)

Это только из-за большой нагрузки? Мне интересно, как я могу исправить узкое место. В настоящее время у нас есть 3 узла данных и 3 главных узла, работающих на отдельных серверах Linux.

  1. Должен ли я ввести что-то вроде logstash? сколько серверов мне нужно?
  2. Должен ли я внести в очередь, чтобы отложить задачи ES на потом

РЕДАКТИРОВАТЬ: немного больше информации -

  1. Мы выполняем одну вставку для каждого запроса (всего мы отправляем около 100 параллельных запросов до 2000)

  2. Производительность процессора не очень высокая <10% </p>

  3. Мы размещаем машины на лазурном. Все приложения (узлы и узлы) находятся в одном регионе

1 Ответ

0 голосов
/ 24 августа 2018

Я думаю, проблема в том, что ваша очередь превышена.Он сказал, что ваш лимит составляет 200. Вы не указали лимит памяти на вашем сервере ES.Но давайте попробуем увеличить лимит и контролировать вашу память.

edit elasticsearch.yaml:

threadpool.bulk.queue_size: 500

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

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

Вы можете прочитатьбольше по этой теме для получения дополнительной информации об этом: https://discuss.elastic.co/t/any-idea-what-these-errors-mean-version-2-4-2/70690/4

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