Мне нужно обновить нашу текущую инфраструктуру, основанную на одном сервере, до многосерверной. В основном мы запускаем HTTP-приложение, MySQL и другие службы.
Моя идея - поставить HAProxy на все серверы, чтобы они могли самостоятельно балансировать / переключаться.
Что-то вроде этого:
WAN
| |
|------| |------|
| HAP1 | | HAP2 | HAProxy servers
|------| |------|
\ /
----X----
/ \
|------| |------|
| NGX1 | | NGX2 | Nginx webservers
|------| |------|
Идея состоит в том, чтобы настроить общедоступное имя хоста с циклическим DNS, указывающим на серверы HAP, которые затем будут балансировать с веб-серверами.
Чтобы иметь не полностью случайный баланс Я хочу использовать минимум алгоритм, но тут возникает проблема: Могут ли серверы HAP обмениваться данными друг с другом о том, как они балансируют входящие соединения? Я бы хотел, чтобы оба сервера не считали, что серверная часть выгружена из-за восходящего циклического перебора.
РЕДАКТИРОВАТЬ: Я бы хотел избежать использования оставайся живым и виртуальный IP-адрес, совместно используемый двумя HAP, поскольку серверы будут находиться в разных центрах обработки данных.
Если вы планируете использовать активные / активные балансировщики нагрузки в разных центрах обработки данных, будет довольно сложно надежно обмениваться информацией о статусе соединения в обоих направлениях.
Учитывая, что вас беспокоит нагрузка на бэкэнд-серверы как средство для принятия решения, какой из них выбрать, вполне естественно, что вам следует обратиться к ним, чтобы выяснить, сколько трафика отправить.
К счастью, в HAProxy есть несколько директив для этого: agent-check
, agent-port
.
я полагаю weight
и agent-inter
также должны быть включены, так как они тоже имеют здесь некоторый эффект.
Это позволяет запускать службу на каждом внутреннем сервере, которая будет отвечать строкой, как указано в документы, что повлияет на вес сервера.
Агент может проверять практически все (ЦП, память, сеть, зависимые службы, время суток, погоду), если он возвращает разумные значения, которые HAProxy может использовать и понимать.