Hello! On Wed, Aug 24, 2016 at 02:39:45AM +0300, Иван wrote:
> Здравствуйте! > > У нас цепочка проксей для стриминга видео (плейлисты - m3u8+чанки - ts): эджи > от пользователей проксируют на ориджины,ориджины на источники видео (source). > > Почему-то при выпадании (connection timeout) одного из source взлетает rps и > cps на соотвествующие ориджины. При высокой нагрузке настолько, что все > вообще > встает колом. > > nginx 1.10.1 под debian 8 из репов на nginx.org. > > Конфигурация upstream на эджах: > upstream o-place { > server ip4_1:443 fail_timeout=60 max_fails=3 weight=3; > server ip6_1:443 fail_timeout=60 max_fails=3 weight=3; > server ip4_2:443 fail_timeout=60 max_fails=3 weight=1; > server ip6_2:443 fail_timeout=60 max_fails=3 weight=1; > server ip4_3:443 fail_timeout=60 max_fails=3 backup; > server ip6_3:443 fail_timeout=60 max_fails=3 backup; > keepalive 500; > } > Каждый ориджин тут задублирован по ИП4 и ИП6 (ip4_1 и ip6_1 - это один и тот > же сервер, так же как и ip?_2, так же как и ip?_3), так как иногда между > серверами отваливается по отдельности либо IP6, либо IP4. > > У ориджинов в апстримах по одному source: > upstream source_place { > server ip4:443; > keepalive 200; > } > > На эджах > proxy_next_upstream error timeout invalid_header http_500 http_502 http_504; А что конкретно вас удивляет? Ваша конфигурация именно это и предполгает, e.g.: - выпал source для ресурса, при обращении к соответствующему ресурсу origin не может достучаться до source-сервера и возвращает 502 (или 504, если случился таймаут); - edge-сервер видит 502 и идёт к следующему серверу в блоке upstream; - картина повторяется, пока не будут опрошены все сервера по списку, т.е. суммарное количество запросов к origin-серверам для конфигурации выше - вырастет в 4 раза. Если это не то, что хочется получить - пересмотрите конфигурацию. В частности, я бы рекомендовал: - Проредить proxy_next_upstream. Если сервера, фактически, одинаковые, то ходить на все при получении 502/504 - имеет очень мало смысла. - Посмотреть внимательно на proxy_next_upstream_tries (и proxy_next_upstream_timeout), http://nginx.org/r/proxy_next_upstream_tries/ru. По умолчанию nginx пытается обойти все доступные сервера, однако в сложных конфигурациях это редко является оптимальным поведением. Директива proxy_next_upstream_tries повзволяет сделать ограниченное количество попыток, не отключая proxy_next_upstream совсем. -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru