LINUX.ORG.RU

Nginx, балансировка, разные сети


1

2

Доброго времени суток всем!
Имеем следующее хозяйство:

  • Два Apache сервера, на которых крутится PHP скрипт
  • MySQL сервер, отвечающий на запросы двух вышеуказанных серверов
  • Nginx сервер, балансирующий нагрузку с ip_hash

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

  1. Как быть с балансировщиком, который теперь будет стучаться не в свою локалку, а к чужому провайдеру в другую страну, по значительно меньшему каналу?
  2. До сих пор не понимаю, что делать когда упадет балансировщик? Допустим, есть резервный балансировщик, но пока перебросится на него DNS-кеш провайдеров всех клиентов, они уйдут к конкурентам. Как вариант думал иметь IP для балансировщика, выдающийся по VPN, но, опять же, это сильно бьет по каналу, что тоже отпадает.

Ответ на: комментарий от nickey

Первое правило надежный fallover строится только в сетях с резервными каналами. Поскольку ты это обычно не осилишь в рамках обычных ДЦ, то делаешь свою AS с двумя каналами. Перенаправление трафика на резервный сервер производить средствами bgp, а не через dns. По аналогии делаешь в других странах.

Теперь о lua и geoip. Опять же случай, где dns не нужен. Не знаю написан ли такой модуль для nginx, логика следующая: по geoip перенаправляешь запросы на сервера ближайшего ДЦ. Хранить список серверов можно в конф. файле. Итого: client ip -> geoip -> country -> lua magic -> адрес/пул ближайших серверов.

gh0stwizard ★★★★★
()
Ответ на: комментарий от gh0stwizard

Вот теперь понял, благодарю за дельные советы.
Касательно lua+geoip, здесь тогда лучше не про Nginx, а про DNS. DNS посмотрит откуда пришел запрос и даст адрес ближайшего балансировщика в ближайшем ДЦ.
Видимо, все же придется ставить в каждом ДЦ своего балансировщика потому что вопрос с каналом так и остался нерешенным.

nickey
() автор топика
Ответ на: комментарий от nickey

Да, можно поиграться с dns. Обычно так и делают. Но вариант для nginx имеет больше шансов, т.к. в нем встроен свой аналог heartbeat.

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)

Можно тупо слать редирект на ближайший ДЦ. А если у тебя web2.0 сайт то это можно сделать внутри скриптов.

true_admin ★★★★★
()

Что за ресурс? 2 сервера Apache, 1 - MySQL. Узкое горлышко таки где?

Sense
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.