Рейтинг:0

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

флаг br

Я бы хотел, чтобы мой балансировщик нагрузки HAProxy мог обрабатывать не менее 1 млн подключений. Мне нужно это, чтобы развернуть стресс-тест.

Я попытался установить:

максконн 1000000

в моем haproxy.cfg но HAProxy не удалось запустить с:

[haproxy.main()] Невозможно поднять лимит FD до 2000029, лимит 1048576.

Я запускаю HAProxy в контейнере Docker на Ubuntu Linux 20.04 LTS, который является экземпляром Amazon AWS Lightsail VPS.

Я просмотрел различные вопросы в Интернете о том, как вручную увеличить открывать файлы предел (улимит -n) и скопировал множество конфигураций на мой хост. Ничего не сработало - я не смог увеличить этот лимит выше 1048576.

Я нашел следующие связанные сообщения на тему жесткого ограничения количества открытых файлов:

Этот вопрос кажется почти идентичным моему:

Я подхожу к вопросу не с той стороны? Есть ли другой способ настроить HAProxy, чтобы он мог обрабатывать миллион подключений (то есть без увеличения улимит -n)?

Gerard H. Pille avatar
флаг in
Нет. В заголовке вашего вопроса написано «более 500000», что кажется возможным, но не двойным.Вы понимаете, что с 1 миллионом открытых файлов ваш сервер будет заморожен? Есть идеи, сколько памяти требуется для одного соединения TCP/IP?
флаг br
Я просматривал [эту статью] (https://www.freecodecamp.org/news/how-we-fine-tuned-haproxy-to-achieve-2-000-000-concurrent-ssl-connections-d017e61a4d27/# haproxy-configuration), где для `maxconn` установлено значение 2 000 000. Системы, на которых они запускали haproxy, имели 30 ГБ ОЗУ или больше.
Gerard H. Pille avatar
флаг in
Они ведь не используют контейнер на облачном сервере?
Рейтинг:0
флаг br

Решение

открывать файлы ограничение возможно повысился.

¦ жесткое ограничение для каждого процесса по умолчанию установлено на 1048576, но его можно изменено с помощью sysctl "fs.nr_open". От: Руководство по управлению HAProxy | 5. Ограничения файлового дескриптора

я наткнулся на полезный ресурс о том, как увеличить fs.nr_open. Вот что я сделал (на моем хост-компьютере):

# 0. ssh к моему облачному экземпляру

# 1. изменить на корень
судо су -
# 2. увеличить лимит
sysctl -w fs.nr_open = 2010000
# 3. сохранить изменения и выйти
sysctl -p
выход
# 4. теперь вы снова в пользовательской оболочке; вам нужно повторно войти
# также из этой оболочки, чтобы изменения вступили в силу
выход

Обратите внимание, что внесенные изменения не сохраняются после перезагрузки. Если кто-то знает, как это сделать, сообщите мне, и я отредактирую свой ответ.

Мне также нужно было сообщить Docker, что можно открывать более 1 048 576 файлов в контейнере. Я использовал файл Docker Compose для определения своих сервисов. Я просто добавил следующий фрагмент в свой докер-compose.yml:

Сервисы:
  прокси:
    изображение: хапрокси
    # Начать сниппет
    uлимит:
      Нет файла:
        мягкий: 2005000
        жесткий: 2005000
    # Конец фрагмента
    # ...
# ...

И последнее, но не менее важное: убедитесь, что хост-экземпляр имеет не менее 2 ГБ ОЗУ, иначе у вас закончится память, когда вы попытаетесь запустить прокси. Если вы действительно хотите обработать 1 миллион запросов с помощью прокси-сервера, вам потребуется гораздо больше памяти — что-то между 20 и 30 ГБ — не стесняйтесь тестировать самостоятельно. Если вы знаете, как рассчитать лимит, не стесняйтесь редактировать мой ответ или оставлять комментарии ниже!

Обоснование количества открытых файлов

Если нам нужно 2 000 029 открытых файлов для 1 миллиона подключений, то давайте:

  • установите лимит контейнера прокси немного выше этого: 2 000 029 + 4971 = 2 005 000
    • установите лимит ОС хоста немного выше: 2 005 000 + 5000 = 2 010 000
Gerard H. Pille avatar
флаг in
Есть идеи, сколько Джефф возьмет с тебя за это?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.