Re: Nginx reload + Websockets
Hello! On Thu, Apr 08, 2021 at 03:28:25AM -0400, Vladislavik wrote: > Добрый день, есть 200k websocket соединений на проксируемый сервер, после > изменения в конфиге и попытке reload nginx появляются новые процессы nginx и > зависают прошлые в статусе "nginx shutting down", которые так и не > завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы можно > убить kill -9 pid каждый, но в этом случае nginx продолжает в /nginx_status > показывать счетчик коннектов с учетом старых соединений из убитых процессов > плюс заново переподключившиеся (количество коннектов после каждого reload > растет в геометрической прогрессии), хотя в работе после kill старых nginx > процессов остаются только новые процессы. Полностью сбросить счетчик > коннектов получается только через restart nginx, но в этом случае все > websocket клиенты одновременно начинают заново стучаться на сервер, чего > тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и > переподключать websocket соединения хотя бы пачками, а не все одним > моментом? Самое простое и наиболее правильное решение - периодически переоткрывать соединения со стороны клиента и/или закрывать их со стороны websocket-сервера. Такой подход, в частности, гарантирует отсутствие race'ов, если внутри websocket-соединений делается что-то неидемпотентное. Это, однако, требуется реализовывать на клиенте и/или на стороне websocket-сервера. Если этого не сделано, то существует ручка worker_shutdown_timeout, убивающая все оставшиеся соединения по истечении заданного таймаута. Если при этом нужно ещё и убивать соединения плавно - можно это делать руками, то есть смотреть на списки соединений конкретных старых процессов и использовать tcpdrop(8). Вроде бы даже на Линуксе сейчас доступен аналог. -- Maxim Dounin http://mdounin.ru/ ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
Привет, 4/8/21 12:41, Илья Шипицин wrote: сокеты штатно убиваются через worker_shutdown_timeout Добавить в worker_shutdown_timeout ещё random'ную часть и проблема одновременного выхода будет решена, что позволит растянуть вызванную релоадом нагрузку по времени. Например, измененная директива >worker_shutdown_timeout 600 300; выключает воркера в диапазоне от 600 до 900 секунд с начала релоада. -- Alex Vorona ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
Штормы цпу на релоаде это известная штука на самом деле. Будет круто, если на уровне nginx inc этим заинтересуются По количеству хендшейков и сьютам можно совместно поднять стенд и собрать цифры для разных процов Про то, что на ovh ещё антиддос срабатывает, это мило. Не сталкивался, но думаю, вопрос времени On Thu, Apr 8, 2021, 1:02 PM Andrei Belov wrote: > > > On 8 Apr 2021, at 12:49, Илья Шипицин wrote: > > > > ну попрут и попрут. а что делать ? > > > > > > насколько я понимаю, штатно предполагается в том или ином виде > abbrevated handshake (либо tls tickets, либо ssl sessions). > > но гибкости в управлении этой штукой нет. можно сконфигурировать > персистентный на диске, тогда переживете релоад, но сессии будут вечные. > > безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты > сбрасывались, но в этом случае вас 300к пользователей расстреляют на full > handshake. > > > > мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. > это если полные хендшейки. > > А какой конкретно xeon, не пропомните? > > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
Какой-то из ходовых. Отличаются размером кеша, который в данном случае никак не играет. Что играет роль, это шифрсьют. На современных pfs сьютах за счёт ecdhe все и проседает. ecdhe занимает 95% процессора и это сугубо вычислительная нагрузка Я делал таким образом, брал самые ходовые сьюты на tls1.2 и tls1.3, собирал стенд, на котором ограничивал число воркеров единицей. Оставлял ровно один сьют и стрелял полными хендшейками On Thu, Apr 8, 2021, 1:02 PM Andrei Belov wrote: > > > On 8 Apr 2021, at 12:49, Илья Шипицин wrote: > > > > ну попрут и попрут. а что делать ? > > > > > > насколько я понимаю, штатно предполагается в том или ином виде > abbrevated handshake (либо tls tickets, либо ssl sessions). > > но гибкости в управлении этой штукой нет. можно сконфигурировать > персистентный на диске, тогда переживете релоад, но сессии будут вечные. > > безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты > сбрасывались, но в этом случае вас 300к пользователей расстреляют на full > handshake. > > > > мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. > это если полные хендшейки. > > А какой конкретно xeon, не пропомните? > > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
Гипотетически, немного поможет, если тайм-аут сделать побольше. По крайней мере http ( не вебсокеты) успеют доработать и аккуратно завершиться (убийство воркеров их рвет). То, что на дистанции 30 мин какие-то вебсокеты умрут и переподключатся (к новым воркерам), я бы сказал, что в районе погрешности. Сокеты очень живучи On Thu, Apr 8, 2021, 12:56 PM Vl T wrote: > У ovh при реконекте 200к-300к websocket клиентов включается antiddos, и то > время, пока он включен к серверу не могут достучаться другие сервисы. (Пока > websocket клиенты мучают сервер подключениями - другие сервисы отваливаются > из за antiddos) Поэтому хотелось бы плавно эти websocket переподключать > как-то. > > Чт, 8 апр. 2021 г. в 12:50, Илья Шипицин : > >> ну попрут и попрут. а что делать ? >> >> >> насколько я понимаю, штатно предполагается в том или ином виде >> abbrevated handshake (либо tls tickets, либо ssl sessions). >> но гибкости в управлении этой штукой нет. можно сконфигурировать >> персистентный на диске, тогда переживете релоад, но сессии будут вечные. >> безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты >> сбрасывались, но в этом случае вас 300к пользователей расстреляют на full >> handshake. >> >> мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. >> это если полные хендшейки. >> >> >> кажется, было бы совсем по хорошему, чтобы сессии переживали релоад, но >> можно было бы указать время жизни сессии. и безопасники оргазмировали бы, и >> расстрелов на релоаде бы не было. >> >> если я что-то упустил, и так настроить можно, буду рад ошибиться >> >> >> чт, 8 апр. 2021 г. в 14:45, Vl T : >> >>> Nginx последний, 1.19.9, worker_shutdown_timeout не установлен, >>> установить его? В принципе если установить 5 минут - то через 5 минут все >>> 300к клиентов все равно попрут толпой на сервер? >>> >>> Чт, 8 апр. 2021 г. в 12:41, Илья Шипицин : >>> сокеты штатно убиваются через worker_shutdown_timeout второй вопрос - какая у вас версия nginx ? где-то в районе 3-4 летней давности был баг, который приводил к тому, что несмотря на указанный worker_shutdown_timeout, воркеры все равно не останавливались чт, 8 апр. 2021 г. в 12:28, Vladislavik : > Добрый день, есть 200k websocket соединений на проксируемый сервер, > после > изменения в конфиге и попытке reload nginx появляются новые процессы > nginx и > зависают прошлые в статусе "nginx shutting down", которые так и не > завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы > можно > убить kill -9 pid каждый, но в этом случае nginx продолжает в > /nginx_status > показывать счетчик коннектов с учетом старых соединений из убитых > процессов > плюс заново переподключившиеся (количество коннектов после каждого > reload > растет в геометрической прогрессии), хотя в работе после kill старых > nginx > процессов остаются только новые процессы. Полностью сбросить счетчик > коннектов получается только через restart nginx, но в этом случае все > websocket клиенты одновременно начинают заново стучаться на сервер, > чего > тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и > переподключать websocket соединения хотя бы пачками, а не все одним > моментом? > > Posted at Nginx Forum: > https://forum.nginx.org/read.php?21,291167,291167#msg-291167 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru >>> >>> -- >>> >>> С уважением Толмачев Владислав. >>> tolmachev.v...@gmail.com >>> skype: vladislaviki >>> ___ >>> nginx-ru mailing list >>> nginx-ru@nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > -- > > С уважением Толмачев Владислав. > tolmachev.v...@gmail.com > skype: vladislaviki > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
> On 8 Apr 2021, at 12:49, Илья Шипицин wrote: > > ну попрут и попрут. а что делать ? > > > насколько я понимаю, штатно предполагается в том или ином виде abbrevated > handshake (либо tls tickets, либо ssl sessions). > но гибкости в управлении этой штукой нет. можно сконфигурировать > персистентный на диске, тогда переживете релоад, но сессии будут вечные. > безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты > сбрасывались, но в этом случае вас 300к пользователей расстреляют на full > handshake. > > мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. это > если полные хендшейки. А какой конкретно xeon, не пропомните? ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
У ovh при реконекте 200к-300к websocket клиентов включается antiddos, и то время, пока он включен к серверу не могут достучаться другие сервисы. (Пока websocket клиенты мучают сервер подключениями - другие сервисы отваливаются из за antiddos) Поэтому хотелось бы плавно эти websocket переподключать как-то. Чт, 8 апр. 2021 г. в 12:50, Илья Шипицин : > ну попрут и попрут. а что делать ? > > > насколько я понимаю, штатно предполагается в том или ином виде > abbrevated handshake (либо tls tickets, либо ssl sessions). > но гибкости в управлении этой штукой нет. можно сконфигурировать > персистентный на диске, тогда переживете релоад, но сессии будут вечные. > безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты > сбрасывались, но в этом случае вас 300к пользователей расстреляют на full > handshake. > > мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. > это если полные хендшейки. > > > кажется, было бы совсем по хорошему, чтобы сессии переживали релоад, но > можно было бы указать время жизни сессии. и безопасники оргазмировали бы, и > расстрелов на релоаде бы не было. > > если я что-то упустил, и так настроить можно, буду рад ошибиться > > > чт, 8 апр. 2021 г. в 14:45, Vl T : > >> Nginx последний, 1.19.9, worker_shutdown_timeout не установлен, >> установить его? В принципе если установить 5 минут - то через 5 минут все >> 300к клиентов все равно попрут толпой на сервер? >> >> Чт, 8 апр. 2021 г. в 12:41, Илья Шипицин : >> >>> сокеты штатно убиваются через worker_shutdown_timeout >>> >>> второй вопрос - какая у вас версия nginx ? где-то в районе 3-4 летней >>> давности был баг, который приводил к тому, что несмотря на указанный >>> worker_shutdown_timeout, воркеры все равно не останавливались >>> >>> чт, 8 апр. 2021 г. в 12:28, Vladislavik : >>> Добрый день, есть 200k websocket соединений на проксируемый сервер, после изменения в конфиге и попытке reload nginx появляются новые процессы nginx и зависают прошлые в статусе "nginx shutting down", которые так и не завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы можно убить kill -9 pid каждый, но в этом случае nginx продолжает в /nginx_status показывать счетчик коннектов с учетом старых соединений из убитых процессов плюс заново переподключившиеся (количество коннектов после каждого reload растет в геометрической прогрессии), хотя в работе после kill старых nginx процессов остаются только новые процессы. Полностью сбросить счетчик коннектов получается только через restart nginx, но в этом случае все websocket клиенты одновременно начинают заново стучаться на сервер, чего тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и переподключать websocket соединения хотя бы пачками, а не все одним моментом? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,291167,291167#msg-291167 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru >>> >>> ___ >>> nginx-ru mailing list >>> nginx-ru@nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> >> -- >> >> С уважением Толмачев Владислав. >> tolmachev.v...@gmail.com >> skype: vladislaviki >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- С уважением Толмачев Владислав. tolmachev.v...@gmail.com skype: vladislaviki ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
ну попрут и попрут. а что делать ? насколько я понимаю, штатно предполагается в том или ином виде abbrevated handshake (либо tls tickets, либо ssl sessions). но гибкости в управлении этой штукой нет. можно сконфигурировать персистентный на диске, тогда переживете релоад, но сессии будут вечные. безопасники обычно говорят, что лучше, чтобы при релоаде сессии и тикеты сбрасывались, но в этом случае вас 300к пользователей расстреляют на full handshake. мы замеряли, Xeon держит в районе 700-1000 хендшейков в 1 сек на 1 ядро. это если полные хендшейки. кажется, было бы совсем по хорошему, чтобы сессии переживали релоад, но можно было бы указать время жизни сессии. и безопасники оргазмировали бы, и расстрелов на релоаде бы не было. если я что-то упустил, и так настроить можно, буду рад ошибиться чт, 8 апр. 2021 г. в 14:45, Vl T : > Nginx последний, 1.19.9, worker_shutdown_timeout не установлен, > установить его? В принципе если установить 5 минут - то через 5 минут все > 300к клиентов все равно попрут толпой на сервер? > > Чт, 8 апр. 2021 г. в 12:41, Илья Шипицин : > >> сокеты штатно убиваются через worker_shutdown_timeout >> >> второй вопрос - какая у вас версия nginx ? где-то в районе 3-4 летней >> давности был баг, который приводил к тому, что несмотря на указанный >> worker_shutdown_timeout, воркеры все равно не останавливались >> >> чт, 8 апр. 2021 г. в 12:28, Vladislavik : >> >>> Добрый день, есть 200k websocket соединений на проксируемый сервер, после >>> изменения в конфиге и попытке reload nginx появляются новые процессы >>> nginx и >>> зависают прошлые в статусе "nginx shutting down", которые так и не >>> завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы >>> можно >>> убить kill -9 pid каждый, но в этом случае nginx продолжает в >>> /nginx_status >>> показывать счетчик коннектов с учетом старых соединений из убитых >>> процессов >>> плюс заново переподключившиеся (количество коннектов после каждого reload >>> растет в геометрической прогрессии), хотя в работе после kill старых >>> nginx >>> процессов остаются только новые процессы. Полностью сбросить счетчик >>> коннектов получается только через restart nginx, но в этом случае все >>> websocket клиенты одновременно начинают заново стучаться на сервер, чего >>> тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и >>> переподключать websocket соединения хотя бы пачками, а не все одним >>> моментом? >>> >>> Posted at Nginx Forum: >>> https://forum.nginx.org/read.php?21,291167,291167#msg-291167 >>> >>> ___ >>> nginx-ru mailing list >>> nginx-ru@nginx.org >>> http://mailman.nginx.org/mailman/listinfo/nginx-ru >> >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > -- > > С уважением Толмачев Владислав. > tolmachev.v...@gmail.com > skype: vladislaviki > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
Nginx последний, 1.19.9, worker_shutdown_timeout не установлен, установить его? В принципе если установить 5 минут - то через 5 минут все 300к клиентов все равно попрут толпой на сервер? Чт, 8 апр. 2021 г. в 12:41, Илья Шипицин : > сокеты штатно убиваются через worker_shutdown_timeout > > второй вопрос - какая у вас версия nginx ? где-то в районе 3-4 летней > давности был баг, который приводил к тому, что несмотря на указанный > worker_shutdown_timeout, воркеры все равно не останавливались > > чт, 8 апр. 2021 г. в 12:28, Vladislavik : > >> Добрый день, есть 200k websocket соединений на проксируемый сервер, после >> изменения в конфиге и попытке reload nginx появляются новые процессы >> nginx и >> зависают прошлые в статусе "nginx shutting down", которые так и не >> завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы >> можно >> убить kill -9 pid каждый, но в этом случае nginx продолжает в >> /nginx_status >> показывать счетчик коннектов с учетом старых соединений из убитых >> процессов >> плюс заново переподключившиеся (количество коннектов после каждого reload >> растет в геометрической прогрессии), хотя в работе после kill старых nginx >> процессов остаются только новые процессы. Полностью сбросить счетчик >> коннектов получается только через restart nginx, но в этом случае все >> websocket клиенты одновременно начинают заново стучаться на сервер, чего >> тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и >> переподключать websocket соединения хотя бы пачками, а не все одним >> моментом? >> >> Posted at Nginx Forum: >> https://forum.nginx.org/read.php?21,291167,291167#msg-291167 >> >> ___ >> nginx-ru mailing list >> nginx-ru@nginx.org >> http://mailman.nginx.org/mailman/listinfo/nginx-ru > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru -- С уважением Толмачев Владислав. tolmachev.v...@gmail.com skype: vladislaviki ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Re: Nginx reload + Websockets
сокеты штатно убиваются через worker_shutdown_timeout второй вопрос - какая у вас версия nginx ? где-то в районе 3-4 летней давности был баг, который приводил к тому, что несмотря на указанный worker_shutdown_timeout, воркеры все равно не останавливались чт, 8 апр. 2021 г. в 12:28, Vladislavik : > Добрый день, есть 200k websocket соединений на проксируемый сервер, после > изменения в конфиге и попытке reload nginx появляются новые процессы nginx > и > зависают прошлые в статусе "nginx shutting down", которые так и не > завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы > можно > убить kill -9 pid каждый, но в этом случае nginx продолжает в /nginx_status > показывать счетчик коннектов с учетом старых соединений из убитых процессов > плюс заново переподключившиеся (количество коннектов после каждого reload > растет в геометрической прогрессии), хотя в работе после kill старых nginx > процессов остаются только новые процессы. Полностью сбросить счетчик > коннектов получается только через restart nginx, но в этом случае все > websocket клиенты одновременно начинают заново стучаться на сервер, чего > тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и > переподключать websocket соединения хотя бы пачками, а не все одним > моментом? > > Posted at Nginx Forum: > https://forum.nginx.org/read.php?21,291167,291167#msg-291167 > > ___ > nginx-ru mailing list > nginx-ru@nginx.org > http://mailman.nginx.org/mailman/listinfo/nginx-ru ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru
Nginx reload + Websockets
Добрый день, есть 200k websocket соединений на проксируемый сервер, после изменения в конфиге и попытке reload nginx появляются новые процессы nginx и зависают прошлые в статусе "nginx shutting down", которые так и не завершаются, тк клиенты могут висеть онлайн долго, эти старые процессы можно убить kill -9 pid каждый, но в этом случае nginx продолжает в /nginx_status показывать счетчик коннектов с учетом старых соединений из убитых процессов плюс заново переподключившиеся (количество коннектов после каждого reload растет в геометрической прогрессии), хотя в работе после kill старых nginx процессов остаются только новые процессы. Полностью сбросить счетчик коннектов получается только через restart nginx, но в этом случае все websocket клиенты одновременно начинают заново стучаться на сервер, чего тоже не хотелось бы, вопрос: как мягко применять новый конфиг nginx и переподключать websocket соединения хотя бы пачками, а не все одним моментом? Posted at Nginx Forum: https://forum.nginx.org/read.php?21,291167,291167#msg-291167 ___ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru