В свое время читал статью Why does one NGINX worker take all the load? от Cloudflare, где обсуждалась проблема неравномерной балансировки трафика по воркерам nginx.
Типичная картина может выглядеть так:
Как решение предлагалось использовать опцию TCP сокета SO_REUSEPORT, что позволяет выровнять нагрузку путем совместного шаринга одного порта несколькими воркерами.
В nginx директива зовется
А вот в Nginx Ingress Controller или в Haproxy наоборот - опция идет "из коробки".
В последнем даже есть интереcный комментарий:
Вот на такую штуку мы и наткнулись - старый Haproxy по ошибке не был выведен из строя, рядом подняли новый и в моменте два независимых вебсервера параллельно обрабатывали запросы с одного порта. А мы гадали какого черта ответы от одной и той же машины такие разные.
Надо быть аккуратнее ;)
P.S. кстати отключить в Haproxy эту дивную оптимизацию можно через noreuseport.
tags: #haproxy #troubleshooting #кейс
Типичная картина может выглядеть так:
# ps -eo comm,%cpu --sort=-%cpu | grep nginx
nginx 54.8
nginx 40.6
nginx 24.6
nginx 10.7
nginx 2.9
nginx 0.4
nginx 0.0
Как решение предлагалось использовать опцию TCP сокета SO_REUSEPORT, что позволяет выровнять нагрузку путем совместного шаринга одного порта несколькими воркерами.
В nginx директива зовется
reuseport (см. документацию), выключенная по умолчанию. А вот в Nginx Ingress Controller или в Haproxy наоборот - опция идет "из коробки".
В последнем даже есть интереcный комментарий:
Since HAProxy uses SO_REUSEPORT and supports having multiple independent
processes bound to the same IP:port, during troubleshooting it can happen that
an old process was not stopped before a new one was started. This provides
absurd test results which tend to indicate that any change to the configuration
is ignored. The reason is that in fact even the new process is restarted with a
new configuration, the old one also gets some incoming connections and
processes them, returning unexpected results...
Вот на такую штуку мы и наткнулись - старый Haproxy по ошибке не был выведен из строя, рядом подняли новый и в моменте два независимых вебсервера параллельно обрабатывали запросы с одного порта. А мы гадали какого черта ответы от одной и той же машины такие разные.
Надо быть аккуратнее ;)
P.S. кстати отключить в Haproxy эту дивную оптимизацию можно через noreuseport.
tags: #haproxy #troubleshooting #кейс
👍8✍2😁1