Настройте политики управления потоком для вашего кластера Elasticsearch как во входящих, так и в исходящих направлениях, обеспечивая стабильность кластера за счет защиты от аномального трафика.
Кластер Elasticsearch может быть перегружен из‑за всплесков трафика, вредоносных запросов и внутренней конкуренции за ресурсы, что может даже привести к отказам узлов. С помощью политик, таких как дросселирование клиентских запросов, обратное давление записи и анализ шаблонов трафика, управление потоком обеспечивает правильное распределение ресурсов, тем самым защищая кластеры от перегрузки. Он охватывает следующие сценарии:
Политика | Как это работает | Подробности |
|---|---|---|
HTTP/HTTPS управление потоком |
| |
Управление потоком памяти | Управление потоком памяти ограничивает запись трафика на основе кучи памяти узла. Оно использует механизм обратного давления, чтобы попросить клиента замедлить или прекратить отправку запросов. В то же время он инициирует сборку мусора для освобождения ресурсов и продолжает обрабатывать запросы в соответствии с доступной памятью кучи. | |
Сэмплирование запросов | Сэмплирование запросов может фиксировать доступ клиентских IP‑адресов и тип запросов от клиента. На основе такой статистики вы можете определить трафик доступа конкретных клиентских IP‑адресов и проанализировать трафик записи и запросов от них. | |
Блокировка трафика в один клик | Блокировка трафика в один клик блокирует все клиентские соединения с узлом. При этом соединения для доступа к Kibana, CSS O&M или мониторинговых API не включаются. Цель — защитить узлы кластера при всплесках трафика или быстро восстановить кластеры. | |
Управление потоком | Управление потоком предоставляет независимый API для проверки статистики трафика, включая количество существующих клиентских соединений, а также клиентских соединений, к которым применено обратное давление. Вы можете оценить порог управления потоком и проанализировать нагрузку кластера на основе этой статистики. | |
Логирование доступа | Логи доступа фиксируют URL‑адреса и тела HTTP/HTTPS запросов, полученных узлами за определённый период времени. Вы можете проанализировать текущую нагрузку трафика на основе логов доступа. | |
Ведение логов доступа в файлах | Любой доступ к кластеру записывается в {Имя кластера_access_log.log} файл. Вы можете использовать функцию резервного копирования логов для просмотра детальных логов доступа в OBS. |
Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В этом разделе Kibana используется в качестве примера для описания процедур операции.
Левая часть консоли — это поле ввода команды, а треугольный значок в её правом верхнем углу служит кнопкой выполнения. Правая часть отображает результат выполнения.
PUT /_cluster/settings{"persistent": {"flowcontrol.http.enabled": true,"flowcontrol.http.allow": ["192.168.0.1/24", "192.168.2.1/24"],"flowcontrol.http.deny": "192.168.1.1/24","flowcontrol.http.concurrent": 1000,"flowcontrol.http.newconnect": 1000,"flowcontrol.http.warmup_period": 0}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.http.enabled | Boolean | Определяет, включено ли управление потоком HTTP/HTTPS. По умолчанию управление потоком HTTP/HTTPS отключено. Включение может повлиять на производительность доступа к узлам. Значение: true или false Значение по умолчанию: false |
flowcontrol.http.allow | List<String> | Белый список IP-адресов. Он может содержать несколько IP-адресов и масок подсети, либо списки IP-адресов. Используйте запятые (,) для разделения разных элементов. Пример: xx.xx.xx.xx/24,xx.xx.xx.xx/24, или xx.xx.xx.xx,xx.xx.xx.xx. Значение по умолчанию равно null. |
flowcontrol.http.deny | List<String> | Черный список IP-адресов. Он может содержать несколько IP-адресов и масок подсети, либо списки IP-адресов. Используйте запятые (,) для разделения разных элементов. Значение по умолчанию равно null. |
flowcontrol.http.concurrent | Целое число | Максимальное количество одновременных соединений HTTP/HTTPS. Значение по умолчанию: количество доступных ядер на узле × 600. |
flowcontrol.http.newconnect | Целое число | Максимальное количество новых соединений, которые могут быть созданы для запросов HTTP/HTTPS в секунду. Значение по умолчанию: количество доступных ядер на узле × 200. |
flowcontrol.http.warmup_period | Целое число | Время, необходимое для того, чтобы скорость установки соединения HTTP/HTTPS достигла максимума. Если flowcontrol.http.newconnect установлен на 100 и flowcontrol.http.warmup_period установлен на 5000ms, это указывает на то, что система может создавать до 100 соединений в секунду через 5 секунд. Диапазон значений: 0–10000 Единица измерения: ms Значение по умолчанию: 0 |
Если все параметры установлены в null, они будут восстановлены до значений по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.http.enabled": false}}
PUT /_cluster/settings{"persistent": {"flowcontrol.memory.enabled": true,"flowcontrol.memory.heap_limit": "80%"}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.memory.enabled | Boolean | Указывает, включить ли управление потоками памяти. После включения этой функции использование памяти постоянно мониторится. Значение:
|
flowcontrol.memory.heap_limit | String | Максимальное использование heap memory узла, которое используется в качестве порога для запуска backpressure для flow control. Диапазон значений: 10%–100% Значение по умолчанию: 90% NOTE:
|
flowcontrol.holding.in_flight_factor | Float | Коэффициент освобождения обратного давления, который работает аналогично параметру автоматического выключателя network.breaker.inflight_requests.overhead. При превышении использования памяти лимита более высокий показатель этого параметра указывает на более сильное обратное давление, в этом случае запись будет ограничена. Диапазон значений: ≥ 0.5 Значение по умолчанию: 1.0 |
flowcontrol.holding.max | TimeValue | Максимальная задержка каждого запроса. Если задержка превышает значение этого параметра, обратное давление может быть прекращено или соединение запроса может быть разорвано. Подробности см. в настройке flowcontrol.holding.max_strategy. Диапазон значений: ≥ 15s Значение по умолчанию: 60s |
flowcontrol.holding.max_strategy | String | Политика, применяемая после превышения максимального времени задержки. Значение может быть:
|
flowcontrol.memory.once_free_max | String | Максимальный объём памяти, который может быть предоставлен одновременно для приостановленной очереди запросов. Этот параметр помогает предотвратить полную недоступность кластера из‑за низкой доступности памяти при высоком давлении. Диапазон значений: 1%–50% Значение по умолчанию: 5% |
flowcontrol.memory.nudges_gc | Boolean | Нужно ли инициировать сборку мусора, чтобы обеспечить стабильность записи при слишком высоком давлении записи. (Пул соединений обратного давления проверяется каждую секунду. Давление записи считается высоким, если все существующие соединения заблокированы и новые запросы записи не могут быть приняты.) Значение может быть:
|
Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.memory.enabled": false}}
PUT _cluster/settings{"transient": {"flowcontrol.log.access.enabled": true}}
Элемент конфигурации | Тип | Описание |
|---|---|---|
flowcontrol.log.access.enabled | Boolean | Собирать статистику по IP‑адресам клиентов, которые недавно обращались к кластеру, и количеству запросов от них, включая количество bulk write, search и msearch запросов. Значение может быть:
|
flowcontrol.log.access.count | Integer | Количество IP‑адресов клиентов, которые недавно обращались к кластеру. Переключатели статистики IP‑адресов управляют сбором статистики типов запросов и включением журналирования. Диапазон значений: 0–100 Значение по умолчанию: 10 |
При включении вы можете проверять соответствующую статистику через Просмотр информации о контроле потока.
Если все параметры установлены в null, они будут восстановлены к их значениям по умолчанию.
PUT /_cluster/settings{"persistent": {"flowcontrol.log.access.enabled": false}}
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": true}}
PUT /_cluster/settings{"persistent": {"flowcontrol.break.enabled": false}}
GET /_nodes/stats/filter/v2
GET /_nodes/stats/filter/v2?detail
GET /_nodes/{nodeId}/stats/filter/v2
{nodeId} указывает ID узла, который вы хотите проверить.
Пример ответа:
{"_nodes" : {"total" : 1,"successful" : 1,"failed" : 0},"cluster_name" : "css-xxxx","nodes" : {"d3qnVIpPTtSoadkV0LQEkA" : {"name" : "css-xxxx-ess-esn-1-1","host" : "192.168.x.x","timestamp" : 1672236425112,"flow_control" : {"http" : {"current_connect" : 52,"rejected_concurrent" : 0,"rejected_rate" : 0,"rejected_black" : 0,"rejected_breaker" : 0},"access_items" : [{"remote_address" : "10.0.0.x","search_count" : 0,"bulk_count" : 0,"other_count" : 4}],"holding_requests" : 0}}}}
Параметр | Описание |
|---|---|
current_connect | Количество HTTP‑соединений узла, которое фиксируется независимо от того, включено ли управление потоком. Это значение эквивалентно current_open значение GET /_nodes/stats/http API. Он показывает текущие клиентские соединения каждого узла. |
rejected_concurrent | Количество одновременных соединений, отклонённых во время управления потоком. Этот параметр учитывается только когда flowcontrol.http.enabled установлен в true. Этот счёт не будет очищен, когда управление потоком отключено. |
rejected_rate | Количество новых соединений, отклонённых во время управления потоком. Этот параметр считается только когда flowcontrol.http.enabled установлен в true. Этот счёт не будет очищен, когда управление потоком отключено. |
rejected_black | Количество новых соединений, отклонённых предустановленным чёрным списком во время управления потоком. Этот параметр считается только когда flowcontrol.http.enabled установлен в true. Этот счёт не будет очищен, когда управление потоком отключено. |
rejected_breaker | Количество новых соединений, отклонённых во время блокировки трафика одним щелчком. Этот параметр учитывается только когда flowcontrol.break.enabled установлен в true. Этот счётчик не будет сбрасываться, когда отключена блокировка трафика в один клик. |
access_items | IP‑адреса клиентов, которые недавно обращались к кластеру. Значение определяется flowcontrol.log.access.count. |
remote_address | IP‑адреса удалённого доступа и количество запросов от них. |
search_count | Количество раз, когда клиент обратился к базе данных, используя _search и _msearch. |
bulk_count | Количество раз, когда клиент обращался к базе данных, используя _bulk. |
other_count | Количество раз, когда клиент обращался к базе данных, используя другие методы запросов. |
holding_requests | Количество соединений с текущим узлом, где записи останавливаются из‑за управления потоком. |
PUT /_access_log?duration_limit=30s&capacity_limit=1mb
PUT /_access_log/{nodeId}?duration_limit=30s&capacity_limit=1mb
{nodeId} указывает ID узла.
Элемент конфигурации | Тип | Описание |
|---|---|---|
duration_limit | String | Максимальная длительность записей журнала доступа. Когда эта длительность достигается, запись останавливается. Диапазон значений: 10 до 120 Единица: s Значение по умолчанию: 30 |
capacity_limit | String | Максимальный размер памяти для записи журналов доступа. Когда размер журнала доступа достигает этого значения, запись доступа прекращается. Диапазон значений: 1 до 5 Единица: MB Значение по умолчанию: 1 |
GET /_access_log
GET /_access_log/{nodeId}
{nodeId} указывает ID узла.
Пример ответа:
{"_nodes" : {"total" : 1,"successful" : 1,"failed" : 0},"cluster_name" : "css-flowcontroller","nodes" : {"8x-ZHu-wTemBQwpcGivFKg" : {"name" : "css-flowcontroller-ess-esn-1-1","host" : "10.0.0.98","count" : 2,"access" : [{"time" : "2021-02-23 02:09:50","remote_address" : "/10.0.0.98:28191","url" : "/_access/security/log?pretty","method" : "GET","content" : ""},{"time" : "2021-02-23 02:09:52","remote_address" : "/10.0.0.98:28193","url" : "/_access/security/log?pretty","method" : "GET","content" : ""}]}}}
Параметр | Описание |
|---|---|
Имя | Имя узла |
Хост | IP-адрес узла |
Количество | Количество запросов доступа к узлу за статистический период |
Доступ | Подробные сведения о запросах доступа к узлам за статистический период Для получения деталей см Таблица 8. |
Параметр | Описание |
|---|---|
время | Время запроса |
remote_address | IP-адрес источника и номер порта в запросе |
url | Исходный URL запроса |
метод | Метод, соответствующий пути запроса |
содержание | Содержание запроса |
API для удаления журналов доступа всех узлов:
DELETE /_access_log
Обычно вы записываете журналы доступа в файлы для обнаружения сбоев. После устранения сбоев вы должны отключить его.
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": true}}
Параметр | Тип | Описание |
|---|---|---|
flowcontrol.log.file.enabled | Boolean | Записывать ли детали каждого запроса в файл журнала доступа. Имя файла журнала Cluster name_access_log.log. Вы можете проверить этот файл только через функцию резервного копирования журналов. Значение:
|
PUT /_cluster/settings{"persistent": {"flowcontrol.log.file.enabled": false}}