PHP-приложение для балансировки нагрузки с тремя серверами - PullRequest
4 голосов
/ 30 июня 2011

У меня есть 2 веб-сервера и 1 сервер, который предназначен для использования в качестве обратного прокси-сервера или балансировщика нагрузки.2 веб-сервера имеют реальные / публичные IP-адреса, а также балансировщик нагрузки.Сервер балансировки нагрузки еще не настроен, потому что я не решил, какой вариант будет лучшим для моих веб-приложений.Я знаю, что один балансировщик нагрузки опасен, потому что «единственная точка отказа», но я хочу пойти с ним.

2 веб-серверы содержат более одного приложения PHP / vhost (Apache + fastcgi) с тем же доменом иразные субдомены.Все они используют сеансы, куки и некоторые из них требуют SSL.Моя главная цель - просто разделить входящие соединения пополам и перенаправить их на 2 веб-узла.И если один веб-узел переходит в автономный режим, другой должен принимать все соединения.И я думаю, что при необходимости мы можем сделать совместное использование сессии с memcache.

Я читал о Nginx, HaProxy и любом другом приложении, которое я могу найти в сети.Но я не могу решить, потому что:

1) У меня есть 1 сервер, который я могу использовать в качестве балансировщика нагрузки, но для всей конфигурации, которую я нашел в сети, требуется 2 узла балансировщика нагрузки.2) Я не уверен, где мне следует устанавливать SSL-сертификаты (на балансировщик нагрузки или веб-узлы) и какое решение лучше всего использовать при использовании HTTPS-соединений.

Требуется любая помощь / идея, большое спасибо.

Ответы [ 4 ]

4 голосов
/ 30 июня 2011

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

Существует множество учебных пособий, таких как this , в которых содержатся подробные объяснения о том, как настроить его в требуемой конфигурации.

1 голос
/ 12 июля 2011

Я только вчера создал конфигурацию, в которой сервер NGINX используется в качестве балансировщика нагрузки, за которым стоят 2 сервера PHP-FPM, 1 сервер Memcache и 1 сервер MySQL.NGINX был настроен с использованием функции Upstreaming, и соответствующие строки конфигурации выглядят примерно так:

html {

    ...

    # loadbalancing        
    upstream myLoadBalancer {
        ip_hash; # makes sure same user uses the same server, not 100% effective - application
                 # should handle this; in my case 1 Memcached and 1 MySQL servers commonly used
                 # by all App-servers work just fine. I store sessions in Memcache, so Session 
                 # management isn't a problem at all. Its shared across all App-servers.
        server 192.168.1.10:9000; # location of my first php-fpm server
        server 192.168.1.11:9000; # second php-fpm server
        # server aaa.bbb.ccc.ddd:80; # let's say, an Apache server
    }

    #vhost
    server {
        listen 80;
        server_name mydomain.com;
        index index.php;

        location ~* \.php$ {
            gzip on;
            try_files $uri =404;
            include fastcgi_params;
            fastcgi_pass myLoadBalancer;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME /path/to/webdir$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
        }
    }
}

HTTPS: Они должны быть установлены на балансировщик нагрузки NGINX, если я не ошибаюсь - никогда не пыталсясебя.Как только клиентский запрос передается на сервер приложений, он обрабатывает его, получает запрос и отправляет его обратно в NGINX.И NGINX перед передачей ответа клиенту зашифрует содержимое.Это теория, конечно.Но я уверен, что NGINX справится с SSL довольно легко.Это самый быстрый и надежный прокси / балансировщик и хороший веб-сервер в сочетании с возможностями FASTCGI различных CLI.

ПРИМЕЧАНИЕ: Это не конфигурация для производственной среды, а тестовая среда.тематический сценарий.Производственная среда потребует много безопасных настроек.Могут быть использованы следующие ресурсы:

0 голосов
/ 02 августа 2011

Вы можете делать все, что вам нужно, только с одним узлом HAProxy (хотя это все еще оставляет вас с единственной точкой отказа).

Я написал учебник по установке HAProxy в Rackspace Cloud , который можно адаптировать к любой установке Ubuntu. Используя опцию cookie, вы также можете принудительно установить сохранение сеанса, поэтому нет необходимости делить сеансы между блоками, пользователи потеряют свой сеанс только в том случае, если ящик, на котором они установлены, выйдет из строя в середине сеанса.

Как только ваш стандартный HTTP-трафик сбалансирован через HAProxy, вы можете затем отправить свой SSL через него, используя опцию mode tcp. Это не может вставить куки в запрос, поэтому используйте режим balance source. Это балансируется в зависимости от IP-адреса пользователя, поэтому не изменится в середине сеанса, если вы не добавите дополнительные узлы.

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

0 голосов
/ 25 июля 2011

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

Мне знакома идея иметь только 3 сервера и не требовать избыточных балансировщиков нагрузки.Я на самом деле написал электронную книгу для масштабирующих архитектур, и она включает в себя несколько примеров с 2-3-4 серверами и только 1 балансировщиком нагрузки.Может быть, он может предоставить больше информации и помочь вам начать работу.

...