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

Как мне направить пользователей на конкретный IP-адрес без единой точки отказа?

Мы хотели бы создать зеркальную копию нашего сайта в Великобритании и США по двум причинам. Так что...

  1. Сайт работает быстро для пользователей из Америки / Европы.
  2. Таким образом, если любой сервер выйдет из строя, пользователь все равно сможет получить доступ к веб-сайту.

Что касается обмена данными между серверами, мы собираемся использовать зеркалирование MySQL и, возможно, rsync, чтобы сохранять файлы зеркальными.

Если бы нам нужно было выполнить только пункт 1, мы могли бы запрограммировать некоторый код для перенаправления пользователей на любой сайт на основе их IP-адреса, но для этого у нас была бы единая точка отказа.

Есть ли достаточно недорогой способ сообщить пользователям другой IP-адрес в зависимости от их местоположения? Может, нам удастся сделать что-нибудь необычное с нашим DNS-сервером?

«Высокая доступность» - это всегда весело :-)

С "простой" стороны вы можете указать несколько записей A. Это работает (обычно) в циклическом стиле и не дает возможности указать, какой сервер вы хотите обслуживать по умолчанию. Это означает, что вы закончите тем, что люди в Британии будут обслуживаться американскими серверами, и наоборот. Это не то, что вам нужно (меньше всего потому, что нас, американцев, сбивают с толку все лишние буквы, которые появляются в таких словах, как цвет) ;-)

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

На более дорогой и сложной стороне вы можете использовать BGP MultiSite MultiHoming, где вы покупаете Номер автономной системы (ASN)и объявляют маршруты BGP к одной и той же сети с обоих сайтов. Теоретически это гарантирует, что каждый получит «ближайший» (в зависимости от доступности сети) сайт.

Или, конечно, вы можете нанять Акамай распространять ваши данные и приложения для вас. За большие деньги.

Если у вас есть деньги и опыт, я бы порекомендовал многосетевое решение BGP. Если нет, вы можете посмотреть на решения DNS.

Как говорит Мэтт, есть компании, которые предоставляют CDN.

Более дешевым подходом было бы использование RRDNS с

www.example.com   A (UK address)
www.example.com   A (US address)

uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
uk.www.example.com A (UK address)
...
uk.www.example.com A (US address)

us.www.example.com A (US address)
us.www.example.com A (US address)
us.www.example.com A (US address)
...
us.www.example.com A (UK address)

И на обоих серверах попробуйте сбросить cookie (если его нет), указывающий, на каком континенте находится клиент (сохраняет повторяющиеся дорогостоящие поиски).

Поддерживайте состояние «других» систем на каждом сервере. Когда вы устанавливаете соединение по адресу www.example.com, перенаправляйте его в самую доступную локальную систему для клиента (например, uk.www.example.com).

На локализованных виртуальных хостах (Великобритания и США) всякий раз, когда приходит запрос GET, если он предназначен для нелокального виртуального хоста, проверьте, доступен ли предпочтительный хост в этом месте, и перенаправьте туда клиента.

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

Это не идеально и во многом зависит от того, что вы кодируете собственную обработку перенаправления / переключения при отказе.

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

С.