Блин! Подробное руководство по установке и запуску HAProxy! Благодаря возможностям бесплатного открытого исходного кода мы достигли вершины массовой балансировки нагрузки!
Блин! Подробное руководство по установке и запуску HAProxy! Благодаря возможностям бесплатного открытого исходного кода мы достигли вершины массовой балансировки нагрузки!

Предисловие

Сегодня второй брат беседовал с другим читателем из Шанхая и говорил о работе, жизни и текущих рыночных условиях... Как-тоиз Только что говорили обалансировка нагрузкиПонятно。

Второй брат считает, что это довольно интересно.。Здесь я поделюсь с вами программным обеспечением, которым пользовался мой второй брат.:HAProxy

Введение в HAProxy

HAProxy(High Availability Proxy)этоВысокопроизводительное программное обеспечение балансировщика нагрузки и прокси-сервера с открытым исходным кодом, написанное на языке C.,Его можно использовать в большинстве основных операционных систем Linux.

HAProxy, благодаря своей превосходной производительности и богатому функционалу, играет важную роль в создании крупномасштабных сетевых сервисов с высокой доступностью. Он особенно подходит для веб-сайтов с очень большими нагрузками.

В этой статье будет подробно описан процесс установки и установки HAProxy, чтобы помочь читателям быстро освоить использование этого мощного инструмента.

Установить HAProxy

1. Подготовка

Перед использованием Установить HAProxy убедитесь, что ваша системная среда соответствует следующим требованиям:

  • Операционная система: поддерживает несколько дистрибутивов Linux, таких как CentOS, Ubuntu и т. д.
  • Необходимые пакеты зависимостей: такие как make, gcc, pcre-devel, bzip2-devel, openssl-devel и т. д.
  • Отключите брандмауэр и SELinux (или установите разрешительный режим),Чтобы политики безопасности не мешали нормальной работе HAProxy.
2. Этапы установки

Ниже в качестве примера используется система CentOS7, чтобы показать процесс установки HAProxy (1.7.2):

(1) Установите необходимые пакеты зависимостей.

Язык кода:javascript
копировать
sudo yum -y install make gcc pcre-devel bzip2-devel openssl-devel

(2) Загрузите и скомпилируйте Установить. HAProxy

Вы можете загрузить последнюю версию пакета исходного кода с официального сайта HAProxy (https://www.haproxy.org/) или установить ее напрямую с помощью менеджера пакетов (если он доступен). Вот как его установить из исходного пакета:

Язык кода:javascript
копировать
wget http://www.haproxy.org/download/1.7/src/haproxy-1.7.2.tar.gz
tar -xzf haproxy-1.7.2.tar.gz

Скомпилируйте и установите

Язык кода:javascript
копировать
make TARGET=linux2628 USE_OPENSSL=1 USE_PCRE=1 USE_SYSTEMD=1
sudo make install PREFIX=/home/ha/haproxy

TARGETУказывается на основе текущей версии ядра операционной системы.:

Язык кода:javascript
копировать
- linux22     for Linux 2.2
- linux24     for Linux 2.4 and above (default)
- linux24e    for Linux 2.4 with support for a working epoll (> 0.21)
- linux26     for Linux 2.6 and above
- linux2628   for Linux 2.6.28, 3.x, and above (enables splice and tproxy)

В этом случае,Версия ядра нашей операционной системы — 3.10.0.,такTARGETобозначен какlinux2628。

USE_OPENSSLUSE_PCREUSE_SYSTEMDВыберите другие варианты в зависимости от ваших реальных потребностей и системной среды.。

PREFIXПо указанному пути установки。все видят,Я создал пользователей и группы пользователей специально для HAProxy.,В этом случаепользовательипользователь Все группыha

Кроме того, если вы хотите, чтобы HAProxy прослушивал порты ниже 1024, вам необходимо запустить его от имени пользователя root.

(3) Создайте мягкое соединение (необязательно)

Для удобства использования вы можете добавить исполняемый файл HAProxy в PATH системы:

Язык кода:javascript
копировать
sudo ln -s /home/ha/haproxy/sbin/* /usr/sbin/
3. Конфигурационный файл

HAProxyиз Конфигурационный файлобычно расположен/etc/haproxy/в каталоге,Имя файлаhaproxy.cfg

Но здесь мы сами создаем файл конфигурации HAProxy.

Язык кода:javascript
копировать
mkdir -p /home/ha/haproxy/conf
vi /home/ha/haproxy/conf/haproxy.cfg

Файл конфигурации состоит из нескольких частей, включая глобальную, настройки по умолчанию, интерфейсную часть, внутреннюю часть и прослушиваемую часть. Ниже приведен простейший файл конфигурации.

Язык кода:javascript
копировать
global #глобальные свойства
    daemon  #В фоновом режиме демон запускает
    maxconn 256  #Максимум 256 одновременных подключений
    pidfile /home/ha/haproxy/conf/haproxy.pid  #Указываем файл для сохранения номера процесса HAProxy

defaults #Параметры по умолчанию
    mode http  #httpmode
    timeout connect 5000ms  #Таймаут подключения к серверу 5с
    timeout client 50000ms  #Тайм-аут ответа клиента 50 с
    timeout server 50000ms  #Тайм-аут ответа сервера 50 с

frontend http-in #http-вход фронтенд-сервиса
    bind *:8080  #Прослушиваем порт 8080
    default_backend servers  #Запрос перенаправляется на серверную службу с именем "servers"

backend servers #Верхние сервисные серверы
    server server1 127.0.0.1:8000 maxconn 32  #backend На серверах есть только одна серверная служба с именем server1, которая запускается с локального порта 8000. HAProxy может инициировать до 32 подключений к этой службе одновременно.

Более подробная настройка будет описана в последующих главах.

Примечание. HAProxy требует, чтобы системный параметр ulimit -n был больше [maxconn*2+18]. При установке большего значения maxconn обязательно проверьте и измените параметр ulimit -n.

бегать

1. Зарегистрируйте HAProxy как системную службу.

Добавьте сценарии запуска и остановки службы HAProxy в каталог /etc/init.d:

Язык кода:javascript
копировать
vi /etc/init.d/haproxy

#! /bin/sh
set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/home/ha/haproxy/sbin
PROGDIR=/home/ha/haproxy
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/conf/$PROGNAME.cfg
PIDFILE=$PROGDIR/conf/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

start()
{
       echo -e "Starting $DESC: $PROGNAME\n"
       $DAEMON -f $CONFIG
       echo "."
}

stop()
{
       echo -e "Stopping $DESC: $PROGNAME\n"
       haproxy_pid="$(cat $PIDFILE)"
       kill $haproxy_pid
       echo "."
}

restart()
{
       echo -e "Restarting $DESC: $PROGNAME\n"
       $DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
       echo "."
}

case "$1" in
 start)
       start
       ;;
 stop)
       stop
       ;;
 restart)
       restart
       ;;
 *)
       echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
       exit 1
       ;;
esac

exit 0
2. Запуск, остановка и перезапуск
Язык кода:javascript
копировать
service haproxy start
service haproxy stop
service haproxy restart
3.Добавить журнал

HAProxy не будет выводить файл напрямую.,так Нам нужно использоватьLinuxизrsyslogПриди и уступи дорогуHAProxyвыходбревно>

Изменить haproxy.cfgсуществоватьglobalдомениdefaultsДобавить в домен:

Язык кода:javascript
копировать
global
    ...
    log 127.0.0.1 local0 info
    log 127.0.0.1 local1 warning
    ...

defaults
    ...
    log global
    ...

Это означает, что журналы уровня информации (и выше) передаются в интерфейс local0 rsyslog, журналы уровня предупреждения (и выше) передаются в интерфейс local1 rsyslog, а все внешние интерфейсы по умолчанию используют глобальную конфигурацию журнала.

Примечание. В журналах информационного уровня будет печататься каждый запрос, обработанный HAProxy, который будет занимать много дискового пространства. В производственной среде рекомендуется настроить уровень журнала, чтобы это было заметно.

Добавьте конфигурацию журнала haproxy в rsyslog

Язык кода:javascript
копировать
vi /etc/rsyslog.d/haproxy.conf
Язык кода:javascript
копировать
$ModLoad imudp

$UDPServerRun 514
$FileCreateMode 0644  #бревно права доступа к файлам
$FileOwner ha  #бревно Владелец файла
local0.*     /var/log/haproxy.log  #local0 интерфейс, соответствующий выходному файлу
local1.*     /var/log/haproxy_warn.log  выходной файл бревно, соответствующий интерфейсу #local1

Измените параметры запуска rsyslog.

Язык кода:javascript
копировать
vi /etc/sysconfig/rsyslog
# Options for rsyslogd

# Syslogd options are deprecated since rsyslog v3.
# If you want to use them, switch to compatibility mode 2 by "-c 2"
# See rsyslogd(8) for more details
SYSLOGD_OPTIONS="-c 2 -r -m 0"
4. Перезапустите rsyslog и HAProxy.
Язык кода:javascript
копировать
service rsyslog restart
service haproxy restart

На этом этапе вы сможете увидеть файл журнала haproxy в каталоге /var/log.

5. Сегментация журналов

Вывод журналов через rsyslog не будет сегментирован, поэтому вам придется полагаться на logrotate, предоставляемый Linux, для выполнения работы по сегментации.

Используйте пользователя root для создания файла конфигурации сегментации журнала haproxy:

Язык кода:javascript
копировать
mkdir /root/logrotate
vi /root/logrotate/haproxy
Язык кода:javascript
копировать
/var/log/haproxy.log /var/log/haproxy_warn.log {  #Два имени файла разделены
    daily        #Разделить по дням
    rotate 7     #Сохранить 7 копий
    create 0644 ha ha  #Создание новых прав доступа к файлам, пользователей, групп пользователей
    compress     #compressoldбревно
    delaycompress  #Отложить сжатие на один день
    missingok    #Игнорировать ошибки отсутствия файла
    dateext      #старыйбревно плюс суффикс бревно
    sharedscripts  #Скрипт перезапуска после разделения выполняется только один раз
    postrotate   #После разделения сценарий запуска перезагружает rsyslog и позволяет rsyslog выводить бревно в новый бревно файл.
      /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null
    endscript
}

И настройте это в crontab:

Язык кода:javascript
копировать
0 0 * * * /usr/sbin/logrotate /root/logrotate/haproxy

🆗, базовая настройка HAProxy завершена.

Теперь вы можете получить доступ к порту HAProxy** (например, http://your_server_ip:8080) через браузер или команду Curl, чтобы проверить, правильно ли работает балансировка нагрузки.

Подвести итог

HAProxy предоставляет две возможности балансировки нагрузки: L4 (TCP) и L7 (HTTP) с богатыми функциями. В следующей статье мы объясним это подробно.

HAProxy работает на текущем оборудовании,Может полностью поддерживать десятки тысяч одновременных соединений.,А его режим разработки позволяет легко и безопасно интегрироваться в текущую архитектуру пользователя.,Защищайте одновременнопользовательизwebСервер не подключен к сети。

Самое главное, что у HAProxy есть возможности коммерческой балансировки. нагрузкиустройствоизпроизводительностьистабильность。Это делаетВ настоящее время это не только лучший выбор среди бесплатного программного обеспечения для балансировки нагрузки, но и почти единственный выбор.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose