Как настроить HAProxy для более чем 500 000 подключений внутри контейнера Docker на хосте Linux?

Я хочу, чтобы мой балансировщик нагрузки 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)?

0
задан 6 November 2021 в 16:35
1 ответ

Решение

Предел 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 миллиона подключений, то давайте:

  • установим предел контейнера прокси немного выше этого:2 000 029 + 4971 = 2 005 000
    • установить лимит ОС хоста немного выше этого:2 005 000 + 5000 = 2 010 000
0
ответ дан 7 November 2021 в 12:33

Теги

Похожие вопросы