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

Балансировка нагрузки - несколько серверов в разных местах

Я очень быстро масштабировал сервис и обнаружил проблему в способе балансировки нагрузки. Моим серверам не требуется идеально равномерное распределение, поэтому я просто использовал настройку DNS с циклическим перебором, чтобы направлять клиентов на серверы.

Однако очень важно, чтобы клиент не перебрасывался между серверами, и я обнаружил, что многие клиенты, работающие со своим программным обеспечением на Ubuntu, НЕ кэшируют полученный результат DNS, поэтому они постоянно меняют, с каким сервером они общаются.

Есть ли способ заставить DNS-запись прикрепляться к ним, или мне придется искать программный или аппаратный балансировщик нагрузки? Меня беспокоит задержка балансировщика нагрузки. Если LB находится в США, а клиент направлен в Великобританию, я понимаю, что клиент всегда должен будет подключаться к балансировщику нагрузки в США перед перенаправлением в Великобританию.

К сожалению, невозможно заставить DNS-запись закрепиться за конкретным пользователем. Балансировщик нагрузки может отслеживать сеанс пользователя и всегда отправлять его на один и тот же сервер. Однако похоже, что у вас возникают проблемы с географически разделенными экземплярами приложений.

В этом случае лучше всего будет иметь следующую настройку:

  • Создайте поддомен для каждой географической области, которую вы хотите представить, которая содержит IP-адреса серверов в этой области. us.yourdomain.com и uk.yourdomain.com
  • Веб-сервер обрабатывает www.yourdomain.com запись или то, что обычно вводят пользователи, в которой используется система географического поиска (например, GeoIP) для перенаправления пользователей на соответствующий поддомен.

Используя эту архитектуру, первоначальный HTTP-запрос для пользователя в США будет выглядеть примерно так:

  1. Запросы пользователей www.yourdomain.com.
  2. Обработка сервера www.yourdomain.com ищет географический регион пользователя.
  3. Сервер определяет, что пользователь находится в США.
  4. Сервер перенаправляет пользователя на us.yourdomain.com.
  5. Браузер пользователя принимает перенаправление, и все последующие запросы отправляются на us.yourdomain.com.

Для этой настройки потребуется не менее 3 серверов. Один обрабатывает запросы из США, один обрабатывает запросы из Великобритании, а третий обрабатывает перенаправление пользователей на сайты США / Великобритании.

Прилипчивые сессии - отстой!

Хотя отправка пользователей по разным машинам может быть неудобной, одной из основных причин использования RRDns является доступность. Если вам нужно держать пользователей на одном сервере, вы теряете преимущества.

Безусловно, предпочтение пользователей к соседнему серверу дает хорошие преимущества в производительности - большинство крупных DNS-провайдеров теперь предлагают поиск DNS с географической привязкой (без затрат на создание полной сети доставки контента). И если вы чувствуете себя смелым и занимаетесь обслуживанием собственного имени, вы можете настроить привязку, чтобы сделать это за вас. Обратите внимание, что при обычном RRDNS хосты обслуживаются сервером имен в случайном порядке - вполне возможно иметь конфигурацию аварийного переключения, в которой `` локальные '' серверы всегда представлены в том же порядке одним и тем же клиентам вместе со списком аварийного переключения, который всегда появляется в конце.

Многое из того, что подходит, зависит от масштаба, в котором вы работаете. Если вы уверены, что у вас хорошая доступность в каждом центре обработки данных, то использование локального балансировщика нагрузки в каждом центре обработки данных может быть лучшим вариантом (проверьте HA-Proxy и Varnish).