Наконец-то я настроил прокси-сервер HA и начал работать так, как мне кажется. Однако это не балансировка нагрузки получаемых веб-запросов. Все запросы в настоящее время перенаправляются на первый сервер в кластере. Я собираюсь вставить свою конфигурацию ниже - я буду признателен, если кто-нибудь увидит, где я ошибся.
Это моя первая попытка настроить веб-серверы в среде * nix.
Во-первых, у меня прокси-сервер HA работает на том же хосте, что и первый сервер в кластере apache. Позже мы переводим эти серверы в виртуальные, и у них будут разные виртуальные хосты, но я хотел запустить это сейчас.
Оба веб-сервера получают проверки работоспособности и правильно отчитываются. Страница статистики haproxy? Правильно сообщает о серверах, которые работают и не работают. Я проверил это, изменив имя проверяемого файла. Я еще не загружал эти серверы. Я только что открыл URL-адреса на нескольких вкладках (частный просмотр), и несколько сотрудников тоже открыли URL-адреса. Весь трафик идет на WEB1. Я неправильно балансирую?
global
maxconn 10000
nbproc 8
pidfile /var/run/haproxy.pid
log 127.0.0.1 local0 debug
daemon
defaults
log global
mode http
retries 3
option redispatch
maxconn 5000
contimeout 5000
clitimeout 50000
srvtimeout 50000
listen WEBHAEXT :80,:8443
mode http
cookie sessionbalance insert indirect nocache
balance roundrobin
option httpclose
option forwardfor except 127.0.0.1
option httpchk HEAD /health_check.txt
stats enable
stats auth rah:rah
server WEB1 10.90.2.131:81 cookie WEB_1 check
server WEB2 10.90.2.130:80 cookie WEB_2 check
Редактировать:
Я успешно провел тесты с использованием ab (тестирование apache), и нагрузка была равномерно распределена между обоими узлами. Я не уверен, что я делал раньше неправильно, но приведенная выше конфигурация работает.
Как вы проверяете, что все запросы отправляются на один сервер? Поскольку вы настроили HAProxy, вы используете закрепленные сеансы, в которых HAProxy устанавливает файл cookie для каждого клиента, который направляет его на один и тот же серверный узел для каждого запроса. Если бы вы просто продолжали перезагружаться в одном браузере, вы бы увидели, что каждый запрос отправляется в один и тот же сервер.
Я только что попробовал ту конфигурацию, которую вы предоставили. Во-первых, проверка работоспособности у меня не сработала, мне пришлось добавить "/" перед "health_check.txt" (haproxy-1.4.10).
Однако балансировка нагрузки работала нормально. Каждый раз, когда я закрывал и снова открывал свой браузер, меня перенаправляли на другой сервер.
У вас есть живое приложение, которое вы тестируете (с собственными файлами cookie), или это просто тестовая страница?
Попробуйте удалить insert
заявление от cookie
.
Следуя документации для [insert
]:
Если у клиента есть вся необходимая информация для подключения к тому же серверу в следующий раз, дополнительные файлы cookie не будут вставлены.
Так что вполне возможно, что все запросы получат свои WEB1 с помощью этого файла cookie, а затем следуйте этому направлению при каждом запросе.
PS: И вы должны установить такие же имена для cookie
параметр на сервере statement
.
server WEB1 10.90.2.131:81 cookie WEB_LB check
server WEB2 10.90.2.130:80 cookie WEB_LB check
Вы пытались удалить все параметры, связанные с сохранением файлов cookie? Что случается?
Попробуйте изменить WEB_1 на WEB1:
server WEB1 10.90.2.131:81 cookie WEB1 check
server WEB2 10.90.2.130:80 cookie WEB2 check