Přeskočit obsah

Nouzová nastavení clusteru Elasticsearch

Když je Elasticsearch degradovaný, LogMan.io Depositor může pozastavit (throttle) příjem událostí, dokud se nezlepší stav clusteru. V nouzi můžete kontroly uvolnit, aby Depositor pokračoval v zápisu, pokud přeživší uzly stále přijímají data.

Používejte jen při dočasném výpadku. Po obnovení clusteru vraťte výchozí hodnoty.

Jak Depositor rozhoduje o throttlingu

Každou minutu Depositor čte stav clusteru Elasticsearch. Vždy pokračuje, když stav odpovídá cluster_status_unthrottle (výchozí green).

Jinak throttluje, pokud platí některá z podmínek:

  1. Stav clusteru odpovídá cluster_status_throttle (výchozí yellow).
  2. active_shards_percent_as_number je pod active_shards_percent_throttle (výchozí 50).
  3. Příliš mnoho shardů ve stavu jiném než STARTED na uzlech, jejichž název obsahuje hot_node_tag (výchozí hot), nad unassigned_shards_tolerance (výchozí 32). Kontrola se přeskočí, když je hot_node_tag none nebo prázdné.

Jeden nedostupný hot URL sám o sobě celý Depositor nezastaví: Depositor vyzkouší každý nakonfigurovaný endpoint url / url_hot, než cluster považuje za offline.

Kdy použít nouzová nastavení

Typické situace:

  • Cluster je yellow (chybí repliky, primární shardy běží) a chcete pokračovat v příjmu bez čekání na green.
  • Jeden site více-site clusteru Elasticsearch je down, celkový stav je red, ale přeživší hot uzly stále ukládají události.

Rizika při stavu clusteru red

Při red mohou chybět některé primární shardy. Zápisy do těch indexů selžou i bez throttlingu Depositoru. Používejte jen pokud přeživší site má zapisovatelné primární shardy pro streamy, které potřebujete. Co nejdříve opravte alokaci a obnovte výpadkový site.

Zápisy, když primární shard je na výpadkovém site

Elasticsearch potřebuje aktivní primární shard pro zápis. Pokud primár je jen na výpadkovém site (bez repliky na přeživším site), indexování do indexu selže i bez throttlingu Depositoru.

Typická odpověď Elasticsearch:

  • HTTP 503 (někdy 500) s unavailable_shards_exception / UnavailableShardsException
  • Nebo chyba bulk položky typu unavailable_shards_exception

Stav clusteru je red, protože alespoň jeden primár není dostupný. Chybí-li jen repliky, stav je yellow a zápisy na zdravé primární shardy mohou uspět (s wait_for_active_shards, výchozí 1).

Co dělá master dál:

  • Existuje replika na živém uzlu — master ji povýší na primár. Index směřuje k yellow a zápisy pokračují.
  • Replika neexistuje — index zůstane red, dokud nevrátí site nebo nezasáhne administrátor.

Depositor to považuje za opakovatelné

Tyto chyby nejdou do others. Depositor je opakuje ve stejné pipeline:

  • Po dokumentu: unavailable_shards_exception je ve výchozím retry_errors (s cluster_block_exception a node_not_connected_exception).
  • Celý bulk HTTP: výchozí retry_http_status zahrnuje 500, 502 a 503.

Ve výchozím nastavení plný bulk HTTP 503 také throttluje příjem (throttle_http_status=503). Pauza se zruší při další kontrole stavu clusteru (cca každých 60 s), když už neplatí podmínky throttlingu. Pro opakování 503 bez pauzy pipeline nastavte throttle_http_status na prázdnou hodnotu (viz nouzový příklad). Opakování stále používá retry_http_status.

Události zůstávají v Kafka / retry smyčce pipeline, dokud není primár znovu dostupný. Chyby mapování nebo payloadu jdou do others jako obvykle.

Viz také Depositor Configuration (retry_errors, retry_http_status, throttle_http_status) a Depositor Troubleshooting.

Automatické opakování alokace při red

Nezávisle na nouzovém throttlingu, při red s nepřiřazenými shardy Depositor periodicky volá POST /_cluster/reroute?retry_failed=true (výchozí každých 30 minut; cluster_reroute_retry_failed=yes). Vyčistí vyčerpané pokusy alokace. Vypněte cluster_reroute_retry_failed=no.

Pokračovat v zápisu při výpadku jednoho site (cluster red)

Výchozí Depositor zastaví příjem při yellow (a typicky i red přes procento aktivních shardů / hot tier). Po výpadku jednoho site je to běžný stav, i když druhý site má kapacitu.

Pro pokračování depositu vypněte throttling podle stavu (cluster_status_throttle: none), snižte práh procenta aktivních shardů a uvolněte kontrolu hot tier. Preferované: hot_node_tag: none. Nebo ponechte hot_node_tag: hot a zvyšte unassigned_shards_tolerance. Volitelně vyprázdněte throttle_http_status, aby bulk HTTP 503 opakoval bez pauzy pipeline.

Konfigurace v modelu

Upravte /Site/model.yaml v Library (viz Configure ASAB services from the model) a aplikujte model:

define:
  type: rc/model

services:
  lmio-depositor:
    instances:
      - lma1
      - lma2
    asab:
      config:
        "connection:ESConnection":
          cluster_status_throttle: none
          cluster_status_unthrottle: yellow
          active_shards_percent_throttle: 25
          hot_node_tag: none
          throttle_http_status: ""
          # Alternative to hot_node_tag: none (keep default hot_node_tag=hot):
          # unassigned_shards_tolerance: 100000

Nahraďte lma1 / lma2 uzly instancí Depositor. Po Apply Depositor načte vygenerovanou konfiguraci.

Ekvivalentní INI (reference)

Blok modelu výše odpovídá této INI sekci v konfiguraci Depositor:

[connection:ESConnection]
cluster_status_throttle=none
cluster_status_unthrottle=yellow
active_shards_percent_throttle=25
hot_node_tag=none
throttle_http_status=
; Alternative to hot_node_tag=none (keep default hot_node_tag=hot):
; unassigned_shards_tolerance=100000

Význam voleb v tomto scénáři

Option Suggested emergency value Why
cluster_status_throttle none Nepozastavovat jen kvůli celkovému stavu red.
cluster_status_unthrottle yellow yellow stačí pro zrušení throttlingu bez čekání na green.
active_shards_percent_throttle 25 (dle topologie) Výpadek site často sníží procento aktivních shardů pod výchozích 50.
hot_node_tag none Preferované: přeskočit kontrolu hot tier _cat/shards.
unassigned_shards_tolerance velké číslo (např. 100000) Alternativa při hot_node_tag: hot. Nepoužito při hot_node_tag: none.
throttle_http_status prázdné ("" / throttle_http_status=) Nepozastavovat pipeline na bulk HTTP 503. Opakování přes retry_http_status.

active_shards_percent_throttle laděte podle replik. Často začněte zhruba 100 / (počet replik + 1). Sledujte logy Depositoru Throttling event ingestion because Elasticsearch cluster health is degraded a pole reasons.

Mírnější případ: pokračovat na yellow

Pokud je cluster jen yellow a nechcete povolit zápisy při red, nastavte jen práh unthrottle:

services:
  lmio-depositor:
    instances:
      - lma1
    asab:
      config:
        "connection:ESConnection":
          cluster_status_unthrottle: yellow

Výchozí nastavení stále throttluje na red a obnoví příjem od yellow (místo čekání na green).

Reference parametrů

cluster_status_throttle

Stav clusteru, který způsobí pozastavení příjmu (pokud stav není cluster_status_unthrottle).

  • Výchozí: yellow
  • Možnosti: red, yellow, none

cluster_status_unthrottle

Pokud aktuální stav odpovídá této hodnotě, Depositor ne throttluje (ostatní kontroly se pro tento tick přeskočí).

  • Výchozí: green
  • Možnosti: red, yellow, green

active_shards_percent_throttle

Minimum active_shards_percent_as_number ze stavu clusteru. Pod touto hodnotou Depositor throttluje.

  • Výchozí: 50

hot_node_tag

Podřetězec v názvech uzlů v _cat/shards při počítání hot tier shardů ≠ STARTED.

  • Výchozí: hot
  • none nebo prázdné vypne kontrolu. Pak nemá efekt unassigned_shards_tolerance.

unassigned_shards_tolerance

Kolik shardů ≠ STARTED na uzlech s hot_node_tag je povoleno, než Depositor považuje hot tier za nepřipravený.

  • Výchozí: 32
  • Nepoužito při hot_node_tag none nebo prázdném.

throttle_http_status

HTTP kódy celého bulk selhání (oddělené ;), které pozastaví příjem do další kontroly stavu clusteru.

  • Výchozí: 503
  • Prázdné vypne pauzu na tyto kódy. Opakování stále podle retry_http_status (výchozí 500;502;503).

Po obnově clusteru (green) odstraňte nouzové přepsání z lmio-depositor.asab.config v modelu a znovu Apply — Depositor se vrátí k výchozím (cluster_status_throttle=yellow, cluster_status_unthrottle=green, active_shards_percent_throttle=50, hot_node_tag=hot, throttle_http_status=503).

Související dokumentace