Назад | Перейти на главную страницу

Кластеризация с Vsphere и балансировкой нагрузки Apache

Я смотрел на Vsphere, чтобы автоматически балансировать нагрузку на мои веб-серверы apache и серверы mysql, но действительно ли это поможет?

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

Есть ли более простой способ настроить кластер php-apache и mysql на виртуальных машинах?

Или есть какие-нибудь руководства по кластеризации? (Я безуспешно пытался погуглить)

Любая помощь в понимании / настройке кластеризации и балансировки нагрузки в виртуальных машинах приветствуется.

Что делает vSphere:

  • Кластеризация - DRS = запуск нескольких виртуальных машин на нескольких хостах, vSphere автоматически решит, на какой хост переместить запущенную виртуальную машину.
  • Высокая доступность = запуск гостевой системы на нескольких хостах параллельно - если один из них выходит из строя - второй обеспечивает доступность службы

Кластеризация MySQL - непростая задача, подробностей здесь не описать, но в целом:

  • Зависит от движка БД (MyISAM, InnoDB, XtraDB)
  • Очень ограничен
  • Общее хранилище - в большинстве случаев невозможно
  • Легче реализовать одиночную запись и несколько узлов чтения с репликацией

Балансировка нагрузки Apache / web, оптимальная конфигурация:

  • Сетевой уровень - балансировка нагрузки TCP, требуется как минимум 1 узел балансировки для нормальной работы, 2 для HA (активное резервное копирование). Реализовано через Виртуальный сервер Linux (LVS) модуль ядра:
    • Веб-интерфейс Piranha (RHEL и Fedora) (достаточно, легко реализовать)
    • Keepalived
    • UltraMonkey
    • Linux-HA
  • Уровень ОС - сетевая конфигурация, шлюз, конфигурация ARP (LVS-DR), назначение глобальных IP-адресов локальному хосту (127.0.0.1 - LVS-NAT).
  • Уровень приложения
    • Уровень Apache - без изменений, просто оставьте его работать на порту 80, чтобы приложения могли видеть себя (запросы обратной связи)
    • Уровень PHP - сеансы, tmp также должны быть разделены между узлами
    • Используйте mysql-proxy, работающий как в режиме прослушивания сокетов, так и в портах, перенаправляя запросы на сервер mysql
  • Уровень хранения - данные между веб-серверами должны совместно использоваться чем-то очень быстрым, например, GlusterFS.

Производительность LVS довольно высока - это уровень ядра, двухъядерный процессор 1,6 ГГц может работать более чем на гигабит в режиме NAT и предотвращать многие проблемы на уровне сети. Виртуальный IP-адрес будет принят на L2 сервером LB, и запросы будут перенаправлены ядром на IP-адреса сервера, которые могут иметь тот же IP (LVS-DR) или с NAT (LVS-NAT). LVS-DR требует особой конфигурации arp на стороне сервера, потому что все серверы будут работать с одним и тем же IP. Реализация LVS-NAT проще, и вы можете балансировать нагрузку на любой сервер. Для нормальной работы с LVS-NAT используйте ядро ​​2.6.37 или новее. Балансировщик также может действовать как шлюз и брандмауэр. Необходимо установить постоянство соединения, чтобы избежать некоторых проблем (см. LVS Docs), а таймауты TCP ядра должны быть установлены на минимальные значения. Вы также должны написать сценарии для проверки доступности хоста - работает он нормально или нет. Постарайтесь иметь 100% одинаковую конфигурацию на веб-узлах.

В глобальном масштабе - это очень красивая, очень эффективная и оптимальная архитектура, но после нее потребуется доработка. Узкое место - это ответ хранилища и mysql. php-apache HA / Balancing работает идеально.

Squid, mod_proxy_balancer, HAproxy и т. Д. Являются приложениями пользовательского уровня, неэффективными и тупыми:

  • Squid может использоваться как прокси или обратный прокси (лучше использовать Varnish) для завершения HTTP и / или фильтра безопасности. Вы можете добавить его на каждый веб-сервер и перенаправлять запросы внутри, чтобы скрыть информацию о вашем веб-сервере и т. Д., Дополнительно потребуется mod_extract_forwarded, чтобы исходный IP-адрес правильно идентифицировался веб-сервером и приложением.
  • mod_proxy_balancer, это просто еще одна вещь, "не имеющая отношения - я написал модуль apache" в этой ситуации.
  • haproxy - это очень глупая вещь - приложение слушает порт и инициирует запросы к бэкэнду - я его ненавижу.

Вы можете поиграть с пакетом кластеров RedHat и получить некоторые улучшения для совместного использования файлов (GFS2 и т. Д.), Иметь там HA приложения, но с вашей стороны потребуется больше усилий.

Для узла балансировки - я настоятельно рекомендую Fedora 15 или новее (чем новее ядро ​​- тем лучше). В противном случае - все, что вы хотите, даже Windows (но будут некоторые проблемы с петлевым доступом по http).

Кроме того, я рекомендую вам использовать связывание на основе LACP на сторонах сети хранения.

Это не то решение, которое вы ищете. Кластеризация vSphere предназначена для защиты целых виртуальных машин, а не приложений на этих виртуальных машинах, вам понадобится балансировщик нагрузки для этого, извините, что-то простое, как прокси-сервер Squid / HA вплоть до комплекта Cisco ASA / F5, будет подходящим.