Welcome! Log In Create A New Profile

Advanced

upstream c keepalive и периодически 502 ошибка

October 17, 2016 07:42PM
Доброго времени суток,

Для раздачи HLS настроена схема из двух серверов cache-origin, где ts-чанки отдаются cache, а все запросы на m3u8-плейлисты проксируются на origin. На cache настроено проксирование с keepalive. Для примера приведу соотвествующие куски конфига cache:

--------------------------------------------------------------------------------------------------

upstream hls01 {
server X.X.X.X:80 fail_timeout=10 max_fails=3;
keepalive 500;
}

proxy_cache_path /var/cache/nginx/edge_video levels=1:2 keys_zone=e_v:10m inactive=1m max_size=1g;

proxy_http_version 1.1;

location ~* \.m3u8$ {
include /etc/nginx/proxy/proxy_headers.conf;
proxy_set_header Host "hls01.XXXXXXX.ru";
proxy_set_header X-Cache-Host $host;
proxy_cache off;
expires -1;
proxy_pass http://hls01;
include /etc/nginx/cors.conf;
}

location ~* \.ts$ {
include /etc/nginx/proxy/proxy_headers.conf;
include /etc/nginx/cors.conf;
proxy_set_header Host "hls01.XXXXXXXX.ru";
proxy_buffer_size 16k;
proxy_buffers 32 16k;
proxy_ignore_headers "Cache-Control" "Expires";
proxy_cache e_v;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid any 1m;
proxy_cache_use_stale updating;
proxy_cache_lock on;

proxy_pass http://hls01;
add_header X-Proxy-Cache $upstream_cache_status;
}
...

proxy_headers.conf:

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

proxy_set_header Connection "";
...
--------------------------------------------------------------------------------------------------

Сам cache имеет 10G интерфейс, sysctl поднастроен. В пике исходящий трафик на cache достигает 2Gbps (~6K handled_requests/sec), но на origin по понятной причине входящий трафик падает в пике до 25Mbps (~2.7К handled_requests/sec).

В большинстве случаев все запросы к upstream обрабатываются быстро и без проблем, но в логах периодически появляется ошибка 502 "upstream prematurely closed connection while reading response header from upstream". Я включал логирование $upstream_status и видно, что в этот момент возвращается 502. Также снимал дамп трафика, в этот момент видно, что шлется RST-пакет. Эта проблема очень похожа на ту, которая описана тут: https://github.com/h2o/h2o/issues/281

В чем может быть причина, и можно ли как-то избавиться от 502 на cache?

Для примера я также включал логирование различных времен ответов на запросы к upstream (request_time, upstream_response_time и др.) и в периоды большой нагрузки на cache, периодически наблюдаются задержки с ответами, т.е. upstream_connect_time, upstream_header_time, например от 1 до 5 сек. Хотя на origin трафик и нагрузка небольшие (см. выше). Пинг между origin и cache ~8ms.

С уважением, Андрей.
Subject Author Posted

upstream c keepalive и периодически 502 ошибка

waster October 17, 2016 07:42PM

Re: upstream c keepalive и периодически 502 ошибка

Maxim Dounin October 17, 2016 09:38PM

Re: upstream c keepalive и периодически 502 ошибка

waster October 18, 2016 05:31AM

Re: upstream c keepalive и периодически 502 ошибка

Maxim Dounin October 18, 2016 09:18AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 308
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready