Поиск по сайту:

Как использовать HAProxy в качестве балансировщика нагрузки уровня 7 для WordPress и Nginx в Ubuntu 14.04


Введение

В этом руководстве мы научим вас использовать HAProxy в качестве балансировщика нагрузки уровня 7 для обслуживания нескольких приложений с одного доменного имени или IP-адреса. Балансировка нагрузки может повысить производительность, доступность и устойчивость вашей среды.

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

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

Предпосылки

Прежде чем продолжить работу с этим учебным пособием, у вас должно быть как минимум два приложения, работающих на разных серверах. Мы будем использовать статический веб-сайт, размещенный на Nginx и WordPress, в качестве двух наших приложений. Если вы хотите точно следовать этому руководству, вот руководства, которые мы использовали для настройки нашей необходимой среды:

  • Wordpress-1 VPS: как настроить удаленную базу данных для оптимизации производительности сайта с помощью MySQL
  • web-1 VPS: как установить Nginx на Ubuntu 14.04

Наше стартовое окружение выглядит так:

В дополнение к вашей текущей среде мы создадим следующие VPS:

  • haproxy-www: ваш сервер HAProxy для балансировки нагрузки и обратного проксирования
  • wordpress-2: ваш второй сервер веб-приложений WordPress (требуется только в том случае, если вы хотите сбалансировать нагрузку компонента WordPress вашей среды)
  • web-2: ваш второй веб-сервер Nginx (требуется только в том случае, если вы хотите сбалансировать нагрузку компонента Nginx в вашей среде)

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

Наша цель

К концу этого урока мы хотим, чтобы среда выглядела так:

То есть ваши пользователи будут получать доступ к обоим вашим приложениям через http://example.com/wordpress и будут перенаправляться на ваши серверы WordPress, а все остальные запросы будут перенаправляться на ваши базовые серверы Nginx. . Обратите внимание, что вам не обязательно балансировать нагрузку ваших приложений, чтобы они отображались в одном домене, но мы рассмотрим балансировку нагрузки в этом руководстве.

Примечание: руководство по настройке балансировщиков нагрузки из шага 2 вместо настройки HAProxy.

Установить HAProxy

Создайте новый VPS с частной сетью. В этом руководстве мы будем называть его haproxy-www.

Давайте установим HAProxy на нашем VPS haproxy-www с помощью apt-get:

sudo apt-get update
sudo apt-get install haproxy

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

sudo vi /etc/default/haproxy

Измените значение ENABLED на 1, чтобы включить сценарий инициализации HAProxy:

ENABLED=1

Сохранить и выйти. Теперь HAProxy будет запускаться и останавливаться на вашем VPS. Кроме того, теперь вы можете использовать команду service для управления вашим HAProxy. Давайте проверим, работает ли он:

user@haproxy-www:/etc/init.d$ sudo service haproxy status
haproxy not running.

Он не работает. Это нормально, потому что его нужно настроить, прежде чем мы сможем его использовать. Давайте настроим HAProxy для нашей среды.

Конфигурация HAProxy

Файл конфигурации HAProxy разделен на два основных раздела:

  • Глобальный: задает параметры для всего процесса.
  • Прокси: состоит из параметров по умолчанию, listen, внешнего интерфейса и внутреннего интерфейса.

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

Конфигурация HAProxy: глобальная

Вся настройка HAProxy должна выполняться на вашем HAProxy VPS, haproxy-www.

Во-первых, давайте сделаем копию файла haproxy.cfg по умолчанию:

cd /etc/haproxy; sudo cp haproxy.cfg haproxy.cfg.orig

Теперь откройте haproxy.cfg в текстовом редакторе:

sudo vi /etc/haproxy/haproxy.cfg

Вы увидите, что уже определены два раздела: global и defaults. Сначала мы рассмотрим некоторые параметры по умолчанию.

В разделе значения по умолчанию найдите следующие строки:

mode    http
option  httplog

Выбор http в качестве режима настраивает HAProxy для выполнения уровня 7 или прикладного уровня балансировки нагрузки. Это означает, что балансировщик нагрузки просматривает содержимое HTTP-запросов и перенаправляет его на соответствующий сервер на основе правил, определенных во внешнем интерфейсе. Если вы не знакомы с этой концепцией, прочтите раздел Типы балансировки нагрузки в нашем Введении в HAProxy.

Пока не закрывайте файл конфигурации! Далее мы добавим конфигурацию прокси.

Конфигурация HAProxy: Прокси

Конфигурация внешнего интерфейса

Первое, что мы хотим добавить, это интерфейс. Для базовой настройки обратного прокси-сервера 7-го уровня и балансировки нагрузки нам нужно определить ACL, который будет использоваться для направления нашего трафика на соответствующие внутренние серверы. В HAProxy можно использовать множество списков ACL, и в этом руководстве мы рассмотрим только один из них (path_beg). Полный список списков ACL в HAProxy можно найти в официальной документации: HAProxy ACL.

В конце файла добавим наш внешний интерфейс, www. Обязательно замените haproxy_www_public_IP на общедоступный IP-адрес вашего haproxy-www VPS:

<пред>

Вот объяснение того, что означает каждая строка в приведенном выше фрагменте конфигурации внешнего интерфейса:

  • frontend www: указывает внешний интерфейс с именем \www, так как мы будем использовать его для обработки входящего трафика с www
  • bind haproxy_www_public_IP:80: замените haproxy_www_public_IP общедоступным IP-адресом haproxy-www. Это сообщает HAProxy, что этот интерфейс будет обрабатывать входящий сетевой трафик на этом IP-адресе и порте
  • option http-server-close: включает режим закрытия HTTP-соединения на сервере и сохраняет возможность поддерживать поддержку активности HTTP и конвейерную обработку на клиенте. Эта опция позволит HAProxy обрабатывать несколько клиентских запросов с помощью одного подключения, что часто повышает производительность.
  • acl url_wordpress path_beg /wordpress: определяет ACL с именем url_wordpress, который оценивается как истинный, если путь запроса начинается с \/wordpress, например, http://example.com /wordpress/hello-world
  • use_backend wordpress-backend if url_wordpress: направляет любой трафик, соответствующий url_wordpress ACL, на wordpress-backend, который мы скоро определим
  • default_backend web-backend: указывает, что любой трафик, не соответствующий правилу use_backend, будет перенаправляться в веб-backend, который мы определим на следующем шаге.

Конфигурация серверной части

После того, как вы закончите настройку интерфейса, продолжите добавлять свой первый сервер, добавив следующие строки. Обязательно замените выделенные слова соответствующими значениями:

<пред>

Вот объяснение того, что означает каждая строка в приведенном выше фрагменте конфигурации бэкэнда:

  • backend web-backend: указывает серверную часть с именем web-backend
  • server web-1 …: указывает внутренний сервер с именем web-1, частный IP-адрес (который вы должны заменить) и порт, который он прослушивает, 80 в этом случае. Параметр check заставляет балансировщик нагрузки периодически выполнять проверку работоспособности на этом сервере

Затем добавьте бэкэнд для вашего приложения WordPress:

<пред>

Вот объяснение того, что означает каждая строка в приведенном выше фрагменте конфигурации бэкэнда:

  • backend wordpress-backend: указывает серверную часть с именем wordpress-backend
  • reqrep …: переписывает запросы для /wordpress в / при перенаправлении трафика на серверы WordPress. В этом нет необходимости, если приложение WordPress установлено в корне сервера, но мы хотим, чтобы оно было доступно через /wordpress на нашем сервере HAProxy
  • server wordpress-1 …: указывает внутренний сервер с именем wordpress-1, частный IP-адрес (который вы должны заменить) и порт, который он прослушивает, 80 в этом случае. Параметр check заставляет балансировщик нагрузки периодически выполнять проверку работоспособности на этом сервере

Конфигурация HAProxy: статистика

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

<пред>

Вот объяснение нетривиальных строк в приведенном выше фрагменте конфигурации listen stats:

  • listen stats :1936: настраивает доступ к странице статистики HAProxy через порт 1936 (т. е. http://haproxy_www_public_IP:1936)
  • область статистики…: собирать статистику по указанному внешнему или внутреннему интерфейсу
  • stats uri /: указывает URI страницы статистики в виде /
  • stats realm Haproxy\ Statistics: включите статистику и задайте имя области аутентификации (всплывающее окно аутентификации), используемое в сочетании с опцией stats auth
  • stats auth haproxy:password: указывает учетные данные аутентификации для страницы статистики. Измените имя пользователя и пароль на свои собственные

Теперь сохраните и выйдите. Когда вы запускаете HAProxy, страница статистики будет доступна через http://haproxy_www_public_ip:1936/ после запуска службы HAProxy. Теперь HAProxy готов к запуску, но давайте сначала включим ведение журнала.

Включение ведения журнала HAProxy

Включить ведение журнала в HAProxy очень просто. Сначала отредактируйте файл rsyslog.conf:

sudo vi /etc/rsyslog.conf

Затем найдите следующие две строки и раскомментируйте их, чтобы включить прием системного журнала UDP. Когда вы закончите, это должно выглядеть следующим образом:

$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1

Теперь перезапустите rsyslog, чтобы включить новую конфигурацию:

sudo service rsyslog restart

Ведение журнала HAProxy теперь включено! Файл журнала будет создан в /var/log/haproxy.log после запуска HAProxy.

Обновить конфигурацию WordPress

Теперь, когда URL-адрес вашего приложения WordPress изменился, мы должны обновить пару настроек в WordPress.

На любом сервере WordPress отредактируйте файл wp-config.php. Он расположен там, где вы установили WordPress (в руководстве он был установлен в /var/www/example.com, но ваша установка может отличаться):

<пред>

Найдите вверху строку с надписью define(DB_NAME, wordpress); и добавьте над ней следующие строки, заменив выделенные значения:

<пред>

Сохранить и выйти. Теперь URL-адреса WordPress настроены так, чтобы они указывали на ваш балансировщик нагрузки, а не только на ваш исходный сервер WordPress, который вступает в игру, когда вы пытаетесь получить доступ к панели управления wp-admin.

Запустить HAProxy

На haproxy-www запустите HAProxy, чтобы изменения конфигурации вступили в силу:

sudo service haproxy restart

Обратный прокси завершен

Теперь ваши приложения доступны через тот же домен, example.com, через обратный прокси-сервер 7-го уровня, но они еще не сбалансированы по нагрузке. Ваша среда должна выглядеть так, как показано на следующей диаграмме:

В соответствии с интерфейсом, который мы определили ранее, вот описание того, как HAProxy будет перенаправлять ваш трафик:

  • **http://example.com/wordpress**: любые запросы, начинающиеся с /wordpress, будут отправлены в wordpress-backend (который состоит из ваших сервер wordpress-1)
  • **http://example.com/**: любые другие запросы будут отправлены на веб-сервер (который состоит из вашего сервера web-1)

Если все, что вы хотели сделать, это разместить несколько приложений в одном домене, все готово! Если вы хотите сбалансировать нагрузку ваших приложений, вам нужно будет прочитать дальше.

Как добавить балансировку нагрузки

Балансировка нагрузки веб-1

Чтобы сбалансировать нагрузку базового веб-сервера, все, что вам нужно сделать, — это создать новый веб-сервер с идентичной конфигурацией и содержимым, что и исходный. Мы назовем этот новый сервер: web-2.

У вас есть два варианта создания нового VPS:

  1. Если у вас есть возможность создать новый VPS из моментального снимка web-1, это самый простой способ создать web-2
  2. Создайте его с нуля. Установите все то же программное обеспечение, настройте его идентично, затем скопируйте содержимое корня вашего сервера Nginx из web-1 в web-2 с помощью rsync (см. Учебное пособие по Rsync).< /li>

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

После настройки вашего идентичного веб-сервера добавьте его в веб-бэкэнд в конфигурации HAProxy.

На haproxy-www отредактируйте haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

Найдите раздел конфигурации web-backend:

<пред>

Затем добавьте свой сервер web-2 в следующую строку:

<пред>

Сохранить и выйти. Теперь перезагрузите HAProxy, чтобы изменения вступили в силу:

sudo service haproxy reload

Теперь ваш веб-сервер имеет два сервера, обрабатывающих весь ваш не-WordPress-трафик! Нагрузка сбалансирована!\\

Балансировка нагрузки wordpress-1

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

Все шаги, необходимые для создания дополнительного идентичного сервера WordPress, описаны в другом руководстве по балансировке нагрузки: Как использовать HAProxy в качестве балансировщика нагрузки уровня 4 для WordPress. Выполните три следующих шага из этого руководства, чтобы создать второй сервер WordPress, wordpress-2:

  1. Создайте второй сервер веб-приложений
  2. Синхронизировать файлы веб-приложения
  3. Создать нового пользователя базы данных

Остановитесь, как только вы доберетесь до раздела, который называется «Еще не сбалансирована нагрузка».

После того, как вы создали wordpress-2 и правильно настроили базу данных, все, что вам нужно сделать, это добавить ее в ваш wordpress-backend в конфигурации HAProxy.

На haproxy-www отредактируйте haproxy.cfg:

sudo vi /etc/haproxy/haproxy.cfg

Найдите раздел конфигурации wordpress-backend:

<пред>

Затем добавьте свой сервер wordpress-2 в следующую строку:

<пред>

Сохранить и выйти. Теперь перезагрузите HAProxy, чтобы изменения вступили в силу:

sudo service haproxy reload

Теперь у вашего wordpress-backend есть два сервера, которые обрабатывают весь ваш трафик WordPress! Это балансировка нагрузки!

Заключение

Теперь, когда вы завершили работу с этим учебным пособием, вы сможете расширить концепции обратного прокси-сервера и балансировки нагрузки, чтобы добавить в свою среду больше приложений и серверов, чтобы она лучше соответствовала вашим потребностям. Помните, что существует безграничное количество способов настройки вашей среды, и вам может потребоваться изучить Руководство по настройке HAProxy, если у вас есть более сложные требования.

Кроме того, если вы ищете другой способ повысить производительность вашего экземпляра WordPress, вы можете изучить репликацию MySQL. Ознакомьтесь с этим руководством, в котором описывается, как настроить это с помощью WordPress:

  • Как оптимизировать производительность WordPress с помощью репликации MySQL в Ubuntu 14.04

Митчел Аникас