Я хочу, чтобы мой балансировщик нагрузки HAProxy мог обрабатывать не менее 1 млн подключений. Мне нужно это, чтобы развернуть стресс-тест.
Я попытался установить:
maxconn 1000000
в моем haproxy.cfg
, но HAProxy не запустился с:
[haproxy.main()] Cannot raise FD limit to 2000029, limit is 1048576.
Я запускаю HAProxy в контейнере Docker на Ubuntu Linux 20.04 LTS, который является экземпляром Amazon AWS Lightsail VPS.
Я просмотрел в Интернете различные вопросы о том, как вручную увеличить open files
лимит(ulimit -n
)и скопировать множество конфигураций на свой хост. Ничего не сработало -Я не смог увеличить это ограничение до значения выше 1048576.
Я нашел следующие сообщения по теме жесткого ограничения количества открытых файлов:
Этот вопрос кажется почти идентичным моему:
Я подхожу к проблеме с неправильной точки зрения? Есть ли другой способ настроить HAProxy, чтобы он мог обрабатывать миллион подключений (, то есть без увеличения ulimit -n
)?
Предел open files
может бытьувеличен.
… жесткое ограничение на-процесс по умолчанию установлено на 1048576, но его можно изменено с помощью sysctl "fs.nr_open".Из:Руководство по управлению HAProxy | 5. Ограничения дескриптора файла-
Я наткнулся на полезный ресурс о том, как увеличить fs.nr_open
. Это то, что я сделал в итоге (на своем хост-компьютере):
# 0. ssh into my cloud instance
# 1. change to root
sudo su -
# 2. increase the limit
sysctl -w fs.nr_open=2010000
# 3. save changes and exit
sysctl -p
exit
# 4. now you are back in the user shell; you need to re-log
# from this shell as well for the changes to take effect
exit
Обратите внимание, что сделанные изменения не сохраняются после перезагрузки. Если кто-то знает, как это сделать, сообщите мне, и я отредактирую свой ответ.
Мне также нужно было сообщить Docker, что можно открывать более 1 048 576 файлов в контейнере. Я использовал файл Docker Compose для определения своих сервисов. Я просто добавил следующий фрагмент вdocker-compose.yml
:
services:
proxy:
image: haproxy
# Begin snippet
ulimits:
nofile:
soft: 2005000
hard: 2005000
# End snippet
#...
#...
И последнее, но не менее важное: убедитесь, что у хост-экземпляра не менее 2 ГБ ОЗУ, иначе у вас закончится память, когда вы попытаетесь запустить прокси. Если вы действительно хотите обрабатывать 1 миллион запросов с помощью прокси-сервера, вам потребуется гораздо больше памяти -, что-то между 20 и 30 ГБ -, не стесняйтесь протестировать самостоятельно. Если вы знаете, как рассчитать лимит, не стесняйтесь редактировать мой ответ или оставлять комментарии ниже!
Если нам нужно 2 000 029 открытых файлов для 1 миллиона подключений, то давайте: