Π‘ΡΠΎΠ»ΠΊΠ½ΡΠ²ΡΠΈΡΡ Ρ Π²Π½Π΅Π·Π°ΠΏΠ½ΡΠΌ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΈΠ»ΠΈ ΠΏΠΎΠ»Π½ΡΠΌ ΠΎΡΠΊΠ°Π·ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ°, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ°ΡΡΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°ΡΡ Π² Π»ΠΎΠ³Π°Ρ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠ³Π°ΡΡΡΡ Π·Π°ΠΏΠΈΡΡ unhealthy upstream. ΠΠ° ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ ΠΏΠ»ΠΎΡΠ°Π΄ΠΊΠ°Ρ Π²ΡΠΎΠ΄Π΅ ΠΠ²ΠΈΡΠΎ, Π³Π΄Π΅ Π½Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Π°ΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ±ΠΎΠΉ Π² ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ Π½Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ "ΡΠ°ΠΉΡ Π»Π΅ΠΆΠΈΡ", ΡΡΠΎ ΡΠΈΠ³Π½Π°Π» ΠΎ ΡΠΎΠΌ, ΡΡΠΎ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΏΠΎΡΡΠΈΡΠ°Π»Π° Π±ΡΠΊΠ΅Π½Π΄-ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌ ΠΈΠ»ΠΈ Π½Π΅ΡΠΏΠΎΡΠΎΠ±Π½ΡΠΌ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΡΠ°ΡΠΈΠΊ Π² Π·Π°Π΄Π°Π½Π½ΡΠΉ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π».
ΠΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΡ Π² Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Nginx (ΠΈΠ»ΠΈ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ) ΠΈ upstream-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ². ΠΠΎΠ³Π΄Π° ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π²Π°Π»ΠΈΠ΄Π½ΡΠ΅ ΠΎΡΠ²Π΅ΡΡ ΠΎΡ ΠΏΡΠ»Π° ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², ΠΎΠ½ Π½Π°ΡΠΈΠ½Π°Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΠΈΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ»ΡΡΠ΅Π²ΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎ, ΡΡΠΎ unhealthy upstream β ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅, ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°, Π° Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΎΠ±ΡΡΠ² ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ. Π Π°Π·Π±ΠΎΡ ΠΏΡΠΈΡΠΈΠ½ ΠΈ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ°ΠΊΠΈΡ ΠΈΠ½ΡΠΈΠ΄Π΅Π½ΡΠΎΠ² ΡΡΠ΅Π±ΡΠ΅Ρ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΈ Π·Π½Π°Π½ΠΈΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ°.
ΠΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½Π°Ρ ΡΡΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΈ ΡΠΎΠ»Ρ Nginx
Π ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π»Π΅ΠΆΠΈΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ°Π±ΠΎΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠΊΡΠΈ. Π‘Π΅ΡΠ²Π΅Ρ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°Ρ Π·Π°ΠΏΡΠΎΡ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠ΅ΡΠ΅ΡΠ»Π°ΡΡ Π΅Π³ΠΎ Π½Π° ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π² Π³ΡΡΠΏΠΏΠ΅ upstream. ΠΡΠ»ΠΈ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ, Π·Π°Π²ΠΈΡΠ°Π΅Ρ ΠΈΠ»ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ, ΠΏΡΠΎΠΊΡΠΈ ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ Π΅Π³ΠΎ ΠΊΠ°ΠΊ unhealthy (Π½Π΅Π·Π΄ΠΎΡΠΎΠ²ΡΠΉ). Π ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ Π²ΡΡΠΎΠΊΠΎΠ½Π°Π³ΡΡΠΆΠ΅Π½Π½ΡΡ
ΡΠΈΡΡΠ΅ΠΌ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
ΠΠ²ΠΈΡΠΎ, Π³Π΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΡΡ
Π΅ΠΌΡ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡΡΠΎ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΠΈΡΡΡΡ Π½Π° Π²Π΅ΡΡ ΠΏΡΠ», Π΅ΡΠ»ΠΈ Π½Π΅ Π½Π°ΡΡΡΠΎΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ Π»ΠΈΠΌΠΈΡΡ ΠΈ ΡΠ°ΠΉΠΌΠ°ΡΡΡ.
Π§Π°ΡΡΠΎ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΈΠ·-Π·Π° ΠΈΡΡΠ΅ΡΠΏΠ°Π½ΠΈΡ ΡΠ΅ΡΡΡΡΠΎΠ². ΠΠΎΠ³Π΄Π° Π²ΡΠ΅ Π²ΠΎΡΠΊΠ΅ΡΡ Nginx Π·Π°Π½ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ Π±ΡΠΊΠ΅Π½Π΄Π°, Π½ΠΎΠ²ΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ. ΠΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΠΎΠΌΡ ΡΡΡΠ΅ΠΊΡΡ. ΠΠ°ΠΆΠ½ΠΎ ΡΠ°Π·Π»ΠΈΡΠ°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° ΡΠ΅ΡΠ²Π΅Ρ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ (network unreachable), ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΡΡΠΏΠ΅Π²Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ Π·Π° ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ (timeout). Π ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΠ°ΠΊΠ΅ΡΡ ΡΠ΅ΡΡΡΡΡΡ ΡΡΠ°Π·Ρ, Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ β ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π²ΠΈΡΠΈΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ ESTABLISHED Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° ΡΠ°Π·ΡΡΠ²Π°.
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ proxy_pass ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π³ΡΡΠΏΠΏΡ upstream ΠΈΠ³ΡΠ°ΡΡ ΡΠ΅ΡΠ°ΡΡΡΡ ΡΠΎΠ»Ρ. ΠΡΠ»ΠΈ Π² Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
ΡΠΊΠ°Π·Π°Π½ΠΎ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ
ΠΏΠΎΠΏΡΡΠΎΠΊ (proxy_next_upstream), ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ Π½Π΅ΡΠ°Π±ΠΎΡΠΈΠΉ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π±ΡΡΡΡΠΎ. Π Π½Π°ΠΎΠ±ΠΎΡΠΎΡ, ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄ΠΎΠ»Π³ΠΈΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΡ ΠΌΠΎΠ³ΡΡ "Π·Π°ΠΌΠΎΡΠΎΠ·ΠΈΡΡ" Π²Π΅ΡΡ ΠΏΠΎΡΠΎΠΊ Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ½ΠΊΠΎ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΡΠ±ΠΎΠΉ ΠΈ toleranΡΠ½ΠΎΡΡΡΡ ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ Π·Π°Π΄Π΅ΡΠΆΠΊΠ°ΠΌ ΡΠ΅ΡΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ proxy_next_upstream_tries Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΠΏΠΎΠΏΡΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ, ΡΡΠΎΠ±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈ ΠΌΠ°ΡΡΠΎΠ²ΡΡ ΡΠ±ΠΎΡΡ .
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠΈΡΠΈΠ½Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΡ ΡΡΠ°ΡΡΡΠΎΠ² 502 ΠΈ 504
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ΅Π΄ΠΊΠΎ Π²ΠΈΠ΄ΠΈΡ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ΅ΡΠΌΠΈΠ½ "unhealthy", Π΅ΠΌΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΊΠΎΠ΄Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP. Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎ 502 Bad Gateway ΠΈΠ»ΠΈ 504 Gateway Timeout. ΠΡΠΈ ΠΊΠΎΠ΄Ρ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ ΡΠ»ΡΠ· (Nginx) ΠΏΠΎΠ»ΡΡΠΈΠ» Π½Π΅Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΆΠ΄Π°Π»ΡΡ Π΅Π³ΠΎ ΠΎΡ Π²ΡΡΠ΅ΡΡΠΎΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΡΠΈΡΠΈΠ½Ρ ΠΌΠΎΠ³ΡΡ ΠΊΡΡΡΡΡΡ ΠΊΠ°ΠΊ Π² ΡΠ΅ΡΠ΅Π²ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°Ρ , ΡΠ°ΠΊ ΠΈ Π² Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΊΠ°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΡΡΡΡ
ΠΏΡΠΈΡΠΈΠ½ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΠ° ΠΏΡΠ»Π° ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΈΠ»ΠΈ Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ API. ΠΡΠ»ΠΈ Π±ΡΠΊΠ΅Π½Π΄-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π° Java ΠΈΠ»ΠΈ Go) ΠΆΠ΄Π΅Ρ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ ΠΠ, ΠΎΠ½ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠ²Π΅ΡΠΈΡΡ ΠΏΡΠΎΠΊΡΠΈ. Π Π»ΠΎΠ³Π°Ρ
ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ ΡΠ°ΠΉΠΌΠ°ΡΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΡΡΠΈΡΡΠ²Π°ΡΡ Π»ΠΈΠΌΠΈΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ: Π΅ΡΠ»ΠΈ ΠΈΡΡΠ΅ΡΠΏΠ°Π½ Π»ΠΈΠΌΠΈΡ ΡΠ°ΠΉΠ»ΠΎΠ²ΡΡ
Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² (ulimit), Π½ΠΎΠ²ΡΠΉ ΡΠΎΠΊΠ΅Ρ ΡΠΎΠ·Π΄Π°ΡΡ Π½Π΅ ΡΠ΄Π°ΡΡΡΡ, ΠΈ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ.
ΠΠ΅ ΡΡΠΎΠΈΡ ΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡ ΡΠΎ ΡΡΠ΅ΡΠΎΠ² ΠΈ ΡΠ΅Π»ΠΎΠ²Π΅ΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°ΠΊΡΠΎΡ ΠΈΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ Π΄Π΅ΠΏΠ»ΠΎΡ. ΠΡΠΊΠ°ΡΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ Π±Π°Π³Π°ΠΌΠΈ, Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΈΠ»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΡΠ°ΠΉΡΠ²ΠΎΠ»Π° ΠΌΠΎΠ³ΡΡ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎ ΠΏΡΠ΅Π²ΡΠ°ΡΠΈΡΡ Π·Π΄ΠΎΡΠΎΠ²ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π² unhealthy. Π ΡΠ°ΠΊΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ (Kubernetes, Docker Swarm) ΠΌΠΎΠ³ΡΡ Π½Π°ΡΠ°ΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΠΏΠΎΠ΄Ρ, ΡΡΡΠ³ΡΠ±Π»ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡ.
ΠΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ° ΡΠ΅ΡΠ΅Π· Π»ΠΎΠ³ΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ
ΠΠ΅ΡΠ²ΡΠΌ ΡΠ°Π³ΠΎΠΌ Π² ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΊΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠ°ΡΡ Π°Π½Π°Π»ΠΈΠ· Π»ΠΎΠ³ΠΎΠ². Π Π»ΠΎΠ³Π°Ρ
Nginx (error.log) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ ΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΡΠΈΠ½Ρ ΠΎΡΠΊΠ°Π·Π°. ΠΠ°ΠΏΠΈΡΠΈ Π²ΠΈΠ΄Π° upstream timed out ΠΈΠ»ΠΈ connect() failed Π΄Π°ΡΡ ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠ»Π°Π³Π°ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° Π»ΠΎΠ³ΠΈ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΠΌΠ΅ΡΡΠΈΠΊΠΈ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ: ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ CPU, ΠΏΠ°ΠΌΡΡΡ, ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π°ΠΊΡΠΈΠ²Π½ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° Π²ΡΠΎΠ΄Π΅ Prometheus ΠΈΠ»ΠΈ Grafana ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΠΊΠ°ΡΡΠΈΠ½Ρ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠ΅. Π Π΅Π·ΠΊΠΈΠΉ ΡΠΊΠ°ΡΠΎΠΊ latency (Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ) ΡΠ°ΡΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ 502. ΠΡΠ»ΠΈ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΡΠ²Π΅ΡΠ° Π±ΡΠΊΠ΅Π½Π΄Π° Π²ΡΡΠΎΡΠ»ΠΎ Ρ 50 ΠΌΡ Π΄ΠΎ 5 ΡΠ΅ΠΊΡΠ½Π΄, Π° Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ»ΠΈ ΠΎΡΠΊΠ°Π·Ρ, ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ²Π½ΠΎ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π΅Π³ΠΎ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ°ΠΆΠ½ΠΎ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ΅Π΄Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π½ΠΎ ΠΈ ΠΏΠ΅ΡΡΠ΅Π½ΡΠΈΠ»ΠΈ (p95, p99).
ΠΠ»Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠΉ Π΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠΈ ΡΠ΅ΡΠ΅Π²ΡΡ
ΠΏΡΠΎΠ±Π»Π΅ΠΌ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠΈΠ»ΠΈΡΡ tcpdump ΠΈΠ»ΠΈ wireshark. ΠΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠ²ΠΈΠ΄Π΅ΡΡ, Π΄ΠΎΡ
ΠΎΠ΄ΡΡ Π»ΠΈ ΠΏΠ°ΠΊΠ΅ΡΡ Π΄ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ»Π°Π³ΠΈ (RST, FIN) ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ Π² ΠΎΡΠ²Π΅Ρ. ΠΠ½ΠΎΠ³Π΄Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΡΠΎΠ΅ΡΡΡ Π² MTU ΠΈΠ»ΠΈ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌΠΈ ΠΏΠΈΠ½Π³Π°ΠΌΠΈ Π½Π΅ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ²Π°Π΅ΡΡΡ. Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Π² ΡΠ΄ΡΠ΅ Linux.
Π‘ΠΊΡΡΡΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠΈ Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π°
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ somaxconn Π² ΡΠ΄ΡΠ΅ Linux β ΠΎΠ½ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ, Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ
ΠΡΠ°ΠΌΠΎΡΠ½Π°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² β ΡΡΠΎ ΠΈΡΠΊΡΡΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΠ°. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ proxy_connect_timeout ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΆΠ΄Π°ΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ. ΠΡΠ»ΠΈ ΠΎΠ½ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π», ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ Π±ΡΠ΄ΡΡ ΠΎΡΠΊΠ»ΡΡΠ°ΡΡΡΡ. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ proxy_read_timeout ΡΠ΅Π³ΡΠ»ΠΈΡΡΠ΅Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ
ΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΠ°. ΠΠ³ΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠΏΠ°ΡΡΠΈ ΠΎΡ Π»ΠΎΠΆΠ½ΡΡ
ΡΠ±ΠΎΠ΅Π² ΠΏΡΠΈ Π΄ΠΎΠ»Π³ΠΈΡ
Π·Π°ΠΏΡΠΎΡΠ°Ρ
, Π½ΠΎ Π·Π°ΠΉΠΌΠ΅Ρ Π²ΠΎΡΠΊΠ΅ΡΡ.
ΠΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ proxy_next_upstream ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ. ΠΡΠ»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° Π²ΡΠ·Π²Π°Π½Π° Π½Π΅ ΡΠ±ΠΎΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π° ΠΎΠ±ΡΠ΅ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠΏΠ°Π»Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
), ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΡΠ²Π΅Ρ Π»ΠΈΡΡ ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΈ ΡΡΠΊΠΎΡΠΈΡ ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΡΠ°ΠΊΠΈΡ
ΡΠ»ΡΡΠ°ΡΡ
Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ proxy_next_upstream non_idempotent Ρ ΡΠΌΠΎΠΌ.
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ upstream ΡΠ°ΠΊΠΆΠ΅ Π²Π°ΠΆΠ½Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ max_fails ΠΈ fail_timeout. ΠΠ½ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π½Π΅ΡΠ΄Π°ΡΠ½ΡΡ
ΠΏΠΎΠΏΡΡΠΎΠΊ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΏΠΎΠΌΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΊΠ°ΠΊ unhealthy ΠΈ ΠΊΠ°ΠΊ Π΄ΠΎΠ»Π³ΠΎ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡΡΡ. ΠΠ»Ρ ΠΊΡΠΈΡΠΈΡΠ½ΡΡ
ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΡΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π±ΡΡΡΡΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΡΠ±ΠΎΠΉΠ½ΡΠΉ ΡΠ·Π΅Π» ΠΈΠ· ΡΠΎΡΠ°ΡΠΈΠΈ, Π½ΠΎ Π½Π΅ Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ°Π»ΡΠΌΠΈ, ΡΡΠΎΠ±Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π²ΡΠ΅ ΡΡΠΌΡ Π½Π΅ Π²ΡΠ±ΠΈΠ²Π°Π»ΠΈ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΈΠ· ΡΡΡΠΎΡ.
βοΈ ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ°ΠΉΠΌΠ°ΡΡΠΎΠ² Nginx
Π‘ΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° ΠΊΠΎΠ΄ΠΎΠ² ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΠΏΡΠΈΡΠΈΠ½
ΠΠ»Ρ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΎΡΠΈΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΡΠΈΠΏΠ°Ρ ΡΠ±ΠΎΠ΅Π² ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ²ΠΎΠ΄Π½ΡΡ ΡΠ°Π±Π»ΠΈΡΡ. ΠΠ½Π° ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π±ΡΡΡΡΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎ ΡΠΈΠΌΠΏΡΠΎΠΌΠ°ΠΌ, Π½Π°Π±Π»ΡΠ΄Π°Π΅ΠΌΡΠΌ Π² Π»ΠΎΠ³Π°Ρ ΠΈΠ»ΠΈ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π΅.
| ΠΠΎΠ΄/Π‘ΡΠ°ΡΡΡ | Π’ΠΈΠΏ ΠΎΡΠΈΠ±ΠΊΠΈ | ΠΠ΅ΡΠΎΡΡΠ½Π°Ρ ΠΏΡΠΈΡΠΈΠ½Π° | ΠΠ΄Π΅ ΠΈΡΠΊΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ |
|---|---|---|---|
| 502 Bad Gateway | ΠΠ΅Π²Π°Π»ΠΈΠ΄Π½ΡΠΉ ΠΎΡΠ²Π΅Ρ | Π‘Π΅ΡΠ²Π΅Ρ Π·Π°ΠΊΡΡΠ» ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ (RST) | ΠΠΎΠ³ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, Π»ΠΈΠΌΠΈΡΡ ΠΏΠ°ΠΌΡΡΠΈ |
| 504 Gateway Timeout | Π’Π°ΠΉΠΌΠ°ΡΡ | Π‘Π΅ΡΠ²Π΅Ρ Π½Π΅ ΠΎΡΠ²Π΅ΡΠΈΠ» Π·Π° ΠΎΡΠ²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ | ΠΠ΅Π΄Π»Π΅Π½Π½ΡΠ΅ SQL-Π·Π°ΠΏΡΠΎΡΡ, CPU |
| 503 Service Unavailable | Π‘Π΅ΡΠ²ΠΈΡ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ΅Π½ | ΠΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ° Π² upstream unhealthy | ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Nginx, Π·Π΄ΠΎΡΠΎΠ²ΡΠ΅ Π²ΡΠ΅Ρ ΡΠ·Π»ΠΎΠ² |
| Connection Refused | ΠΡΠΊΠ°Π· ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ | ΠΠΎΡΡ Π·Π°ΠΊΡΡΡ ΠΈΠ»ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠΏΠ°Π» | Π‘ΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠ°ΠΉΡΠ²ΠΎΠ» |
ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΡΡ ΡΠ°Π±Π»ΠΈΡΡ, ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ 502 ΠΈ 504 β ΡΡΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡΠ°ΡΡΡΠ΅ ΡΠΏΡΡΠ½ΠΈΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ unhealthy upstream. ΠΠ΄Π½Π°ΠΊΠΎ 503 ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° Π·Π΄ΠΎΡΠΎΠ²ΡΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π½Π΅ ΠΎΡΡΠ°Π»ΠΎΡΡ ΡΠΎΠ²ΡΠ΅ΠΌ. ΠΡΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²Π°, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΏΠ°ΡΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ°ΠΌΠΎΠ΄ΠΈΠ°Π³Π½ΠΎΡΡΠΈΠΊΠ°
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°Ρ ΡΡΡΠ½ΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΊΠΈΡ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΏΡΠΎΡΠ»ΠΎΠ΅. Π‘ΠΈΡΡΠ΅ΠΌΡ ΠΎΡΠΊΠ΅ΡΡΡΠ°ΡΠΈΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ Kubernetes, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ liveness ΠΈ readiness ΠΏΡΠΎΠ±. ΠΡΠ»ΠΈ ΠΏΠΎΠ΄ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ liveness, ΠΎΠ½ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ. ΠΡΠ»ΠΈ Π½Π΅ ΠΏΡΠΎΡ ΠΎΠ΄ΠΈΡ readiness β ΡΡΠ°ΡΠΈΠΊ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠ΄Π°Π΅ΡΡΡ. ΠΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡ unhealthy ΡΠ·Π»Ρ ΠΈΠ· Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠ° Π±Π΅Π· ΡΡΠ°ΡΡΠΈΡ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°.
ΠΠ΄Π½Π°ΠΊΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠΊΠ° Π½Π΅ Π²ΡΠ΅ΡΠΈΠ»ΡΠ½Π°. ΠΡΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π² Π»ΠΎΠ³ΠΈΠΊΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, deadlock Π² ΠΊΠΎΠ΄Π΅), ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ ΠΏΠΎΠΌΠΎΡΡ, Π° Π»ΠΈΡΡ ΡΡΠ°ΡΡΠΈΡΡ ΠΏΠ°Π΄Π΅Π½ΠΈΡ. ΠΠΎΡΡΠΎΠΌΡ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈ Π²Π°ΠΆΠ½ΠΎ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°ΡΡ "intelligent" ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΡΡΡ Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΠ°, Π° ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±ΠΈΠ·Π½Π΅Ρ-Π»ΠΎΠ³ΠΈΠΊΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π΅Π»Π°ΡΡ ΡΠ΅ΡΡΠΎΠ²ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ .
Π’Π°ΠΊΠΆΠ΅ ΡΡΠΎΠΈΡ Π²Π½Π΅Π΄ΡΡΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ Circuit Breaker (ΡΠ°Π·ΠΌΡΠΊΠ°ΡΠ΅Π»Ρ ΡΠ΅ΠΏΠΈ) Π½Π° ΡΡΠΎΠ²Π½Π΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ². ΠΡΠ»ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π½Π° ΠΠ²ΠΈΡΠΎ) Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΠΎΡΠ²Π΅ΡΠ°ΡΡ ΠΎΡΠΈΠ±ΠΊΠ°ΠΌΠΈ, Circuit Breaker ΡΠ°Π·ΠΌΡΠΊΠ°Π΅ΡΡΡ, ΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠ΅ΡΠ΅ΡΡΠ°ΡΡ ΠΈΠ΄ΡΠΈ ΡΡΠ΄Π° Π²ΠΎΠΎΠ±ΡΠ΅, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Ρ Π·Π°Π³Π»ΡΡΠΊΡ ΠΈΠ»ΠΈ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. ΠΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΠΊΠ°ΡΠΊΠ°Π΄Π½ΡΠΉ ΠΎΡΠΊΠ°Π· Π²ΡΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ ΠΏΡΠΎΠ± (probes); ΡΠ»Π΅ΠΏΡΠ΅ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΡΡΡΠ³ΡΠ±ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΡΠΈ Π½Π΅Ρ Π²Π°ΡΠΊΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ².
ΠΡΠΎΡΠΈΠ»Π°ΠΊΡΠΈΠΊΠ° ΠΈ Π»ΡΡΡΠΈΠ΅ ΠΏΡΠ°ΠΊΡΠΈΠΊΠΈ
Π§ΡΠΎΠ±Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠΊΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ unhealthy upstream, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ±Π»ΡΠ΄Π°ΡΡ ΡΡΠ΄ ΠΏΡΠ°ΠΊΡΠΈΠΊ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , Π²ΡΠ΅Π³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ ΠΏΡΠ»Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ Ρ ΡΠ°Π·ΡΠΌΠ½ΡΠΌΠΈ Π»ΠΈΠΌΠΈΡΠ°ΠΌΠΈ. ΠΠΎ-Π²ΡΠΎΡΡΡ , Π²Π½Π΅Π΄ΡΡΠΉΡΠ΅ graceful degradation: ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΌΠ΅ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² ΡΡΠ΅ΡΠ΅Π½Π½ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅, Π΅ΡΠ»ΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Ρ. Π-ΡΡΠ΅ΡΡΠΈΡ , ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅ Π½Π°Π³ΡΡΠ·ΠΎΡΠ½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΡΡΠΎΠ±Ρ Π·Π½Π°ΡΡ ΠΏΡΠ΅Π΄Π΅Π»Ρ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΠΉΡΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΡ Π½Π° Π±ΡΠΊΠ΅Π½Π΄Π΅ Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ ΡΠ°ΠΉΠΌΠ°ΡΡΡ Π½Π° ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ΅. ΠΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ ΠΊ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Nginx ΡΠΆΠ΅ ΠΎΡΠΊΠ»ΡΡΠΈΠ» ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΡΠΆΠ΅Π»ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, Π²ΠΏΡΡΡΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΡΡ ΡΠ΅ΡΡΡΡΡ.
Π Π΅Π³ΡΠ»ΡΡΠ½ΡΠΉ Π°ΡΠ΄ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»Π΅Π½. ΠΠΎΠ»Π³ΠΈΠ΅ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²Π½Π΅ΡΠ½ΠΈΡ API Π²Π½ΡΡΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ° β ΠΏΡΡΠΌΠΎΠΉ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠΌΠ°ΡΡΠ°ΠΌ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠ΅ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΈΠ»ΠΈ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π·Π°Π΄Π°Ρ Π΄Π»Ρ Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π½Π΅ Π·Π°Π±ΡΠ²Π°ΠΉΡΠ΅ ΠΏΡΠΎ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅. ΠΠΎΠ³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° (trace-id), ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ ΠΏΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° ΡΠ΅ΡΠ΅Π· Π²ΡΠ΅ ΡΠ΅ΡΠ²ΠΈΡΡ. ΠΠ΅Π· ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΡ Π»ΠΎΠ³ΠΎΠ² ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΈΡΠΈΠ½Ρ unhealthy upstream ΠΏΡΠ΅Π²ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π³Π°Π΄Π°Π½ΠΈΠ΅ Π½Π° ΠΊΠΎΡΠ΅ΠΉΠ½ΠΎΠΉ Π³ΡΡΠ΅.
β οΈ ΠΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΡΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ upstream ΠΈΠ·Π±Π΅Π³Π°ΠΉΡΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ verbose-Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΡΠΎΠ΄Π°ΠΊΡΠ΅Π½Π΅ Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠ΅ΡΠ΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π° ΠΈ ΠΏΠ°Π΄Π΅Π½ΠΈΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠΎ ΠΏΡΠΈΡΠΈΠ½Π΅ Π½Π΅Ρ Π²Π°ΡΠΊΠΈ ΠΌΠ΅ΡΡΠ° (No space left on device).
Π‘Π΅ΠΊΡΠ΅Ρ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΡΡΠΈ
ΠΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ Π°Π΄Π°ΠΏΡΠΈΠ²Π½ΡΠ΅ ΡΠ°ΠΉΠΌΠ°ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅Π½ΡΡΡΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ, Π²ΠΌΠ΅ΡΡΠΎ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°Π΄Π°Π½Π½ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ.
FAQ: Π§Π°ΡΡΠΎ Π·Π°Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ
ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΎΡΠΈΠ±ΠΊΠ° unhealthy upstream Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°?
ΠΠ΅Ρ, ΡΡΠ° ΠΎΡΠΈΠ±ΠΊΠ° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅ΡΠ΅ (ΠΏΡΠΎΠΊΡΠΈ) ΠΈ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² ΠΊΠΎΠΌΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΡ. ΠΠ»ΠΈΠ΅Π½Ρ Π»ΠΈΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠΉ ΠΎΡΠΈΠ±ΠΊΠΈ Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠ΄Π° 502 ΠΈΠ»ΠΈ 504.
ΠΠ°ΠΊ Π±ΡΡΡΡΠΎ Nginx ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ΅ΡΠ²Π΅Ρ ΠΊΠ°ΠΊ unhealthy ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ?
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π΅ΡΠ»ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ max_fails Π½Π΅ Π·Π°Π΄Π°Π½, ΡΠ΅ΡΠ²Π΅Ρ ΡΡΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΡΠ°Π±ΠΎΡΠΈΠΌ ΠΏΠΎΡΠ»Π΅ ΠΎΠ΄Π½ΠΎΠΉ Π½Π΅ΡΠ΄Π°ΡΠ½ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ, Π° Π²ΡΠ΅ΠΌΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ (fail_timeout) ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 10 ΡΠ΅ΠΊΡΠ½Π΄. ΠΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡ ΠΏΠΎΠ΄ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ.
ΠΠ»ΠΈΡΠ΅Ρ Π»ΠΈ ΡΠΈΠΏ Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΠΊΠΈ (round_robin, ip_hash) Π½Π° ΡΠ°ΡΡΠΎΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ?
ΠΠ°, ΠΊΠΎΡΠ²Π΅Π½Π½ΠΎ. ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ip_hash Π·Π°ΠΏΡΠΎΡΡ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° Π²ΡΠ΅Π³Π΄Π° ΠΈΠ΄ΡΡ Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ΅ΡΠ²Π΅Ρ. ΠΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ unhealthy, ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π΅ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΏΠΎΠΊΠ° ΡΠ΅ΡΠ²Π΅Ρ Π½Π΅ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ»ΠΈ Π½Π΅ ΠΈΡΡΠ΅ΡΠ΅Ρ ΡΠ°ΠΉΠΌΠ°ΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΌΠΎΠ³ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ.
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΡ Π² upstream ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Ρ ΠΊΠ°ΠΊ unhealthy?
Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Nginx ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ "unhealthy" ΠΈ ΠΏΠΎΠΏΡΡΠ°Π΅ΡΡΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ Π½Π° Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ (ΠΎΠ±ΡΡΠ½ΠΎ Π² round-robin ΠΏΠΎΡΡΠ΄ΠΊΠ΅), Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΠΊΠ°ΠΊ ΡΠ±ΠΎΠΉΠ½ΡΠΉ. ΠΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π½Π°Π΄Π΅ΠΆΠ΄Ρ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΠΆΠΈΡΡ Π² ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ.