Смена серверов - Перенаправление на новый IP = Нет времени простоя?

13

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

  1. Настройте новый сервер и прослушайте новый IP
  2. Старый сервер перенаправляет весь трафик на новый IP
  3. Измените записи DNS, чтобы они указывали на новый IP

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

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

Денис Пшенов
источник
3
Вы, вероятно, думали об этом, но не упоминали об этом: не забудьте уменьшить TTL соответствующих записей DNS.
cjc
Этот веб-сайт используется только людьми или есть приложения, которые могут подключиться к нему? Например, потреблять веб-сервисы? Если это так, у вас, тем не менее, могут быть простои. Java кэширует результаты DNS и может не учитывать новые записи DNS, пока они не будут перезапущены. Если вы не можете держать пересылку онлайн в течение длительного времени. Также, если вы используете перенаправление шифрования, потребуется выполнить несколько дополнительных шагов.
Брэм
Какие базы данных вы используете? Вы правы в том, что изменение DNS не решит проблему простоя, я делаю это все время в своей работе и могу дать вам подробные инструкции, однако, если вы создадите базу данных на одном и том же сервере, это вызовет небольшую проблему, которая обычно легко решается прийти.
Энтони Форнито
Кроме того, на каком сервере у вас установлены windows или linux. После прочтения некоторых ответов они все указывают на linux, но я действительно не вижу ничего в вашем вопросе, что вы используете IIS против linux
Энтони Форнито

Ответы:

19

Вот метод, который работал для меня:

  1. Синхронизируйте файлы и базы данных с новым сервером.
  2. Выполните повторную синхронизацию непосредственно перед отключением.
  3. Измените DNS, чтобы он указывал на новый сервер.
  4. Направьте запрос, приходящий на старый ip, на новый сервер, пока не завершится распространение DNS.

Вот как я бы сделал шаг 4:

Мы настроим IPTables на сервере Linux для перенаправления всего трафика, поступающего через порт 80 (который является портом веб-сервера по умолчанию), на сервер с IP 122.164.34.240. Первым шагом является настройка вашего Linux-бокса, чтобы разрешить такую ​​пересылку. Откройте окно терминала, войдите в систему как пользователь root и выполните следующую команду:

# echo 1 >/proc/sys/net/ipv4/ip_forward

Следующим шагом является указание IPTables перенаправить трафик на новый сервер:

# iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 122.164.34.240

Вот где происходит волшебство IPTables. На третьем и последнем шаге мы сообщаем IPTables переписать источник подключений к порту 80 нового сервера, чтобы он появился на старом сервере.

# iptables -t nat -A POSTROUTING -p tcp -d 122.164.34.240 --dport 80 -j MASQUERADE

Последний шаг необходим, потому что, если мы не сообщим веб-серверу нового сервера, что соединения исходят от клиентских компьютеров, они могут подумать, что они исходят от старого сервера.

Вы можете повторить это для баз данных и порта почтового сервера.

Шаин Падмаджан
источник
Вы имели в виду -A вместо -D ?? -D это удалить правило, не так ли? В любом случае, после того, как я это сделал, старая коробка определенно пытается перенаправить, потому что она больше не загружает сеть, но не работает, потому что новая сеть тоже не показывает, просто говорит, что время соединения истекло. Есть ли другие настройки, которые я должен сделать? Может быть, что-то на моей новой коробке?
Денис Пшенов
Неважно, я это исправил! Оказывается, мой shorewall блокировал перенаправление. Я должен был позволить это в правилах.
Денис Пшенов
Я сожалею о том, что. Вы правы, это было -А, а не -D. Я обновил пост.
Шаин Падмаджан
1
Просто предупреждение - подход, использующий iptables, перенаправит весь трафик на новый сайт, но когда он туда попадет, он будет выглядеть как исходящий с вашего старого сервера, а не с фактического IP-адреса исходного браузера. Это сломает такие вещи, как географический анализ. В частности, никогда не поддавайтесь искушению перенаправить порт 25 таким способом для электронной почты, иначе вы можете случайно создать открытый ретранслятор, поскольку почта от спаммера через старый сервер будет обрабатываться вашим новым сервером так, как если бы он был с одной из ваших машин, которая может хорошо быть доверенным и позволено передавать.
Гэри Билкус
@ShainPadmajan, хотя и поздно, большое спасибо, это работало как шарм даже в 2015 году.
Абхишек Мадхани
5

Вы также можете посмотреть на добавление нескольких A-записей. Например, Google использует это, проверьте вывод nslookup:

Name:       google.com
Addresses:  209.85.148.101
            209.85.148.102
            209.85.148.113
            209.85.148.138
            209.85.148.100
            209.85.148.139

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

Настройте новый IP-адрес как дополнительную A-запись на 24 часа, запустите новый сервер, выключите старый, удалите IP.

JapyDooge
источник
Кроме того, не добавляйте запись A, пока новый сервер не будет запущен. :)
Аарон Копли
@ Аарон: почему бы и нет? Добавление записи A занимает несколько часов (до 24 часов для полной активности), и, пока 2-й сервер не включен, клиенты будут выбирать первый.
JapyDooge
Когда истекает TTL для зоны, ваш сервер имен снова запрашивается для ресурса, и он получает оба ответа. Если вы добавите новую запись A и подождите некоторое время, чтобы запустить сервер, люди, скорее всего, уже разрешат хост, который еще не доступен. Если новый сервер уже запущен, вам не нужно беспокоиться об этом.
Аарон Копли
1

Другой вариант - использовать VIP (виртуальный IP). Итак, ваши шаги будут:

  1. Настройте новый сервер и прослушайте новый IP.
  2. Добавьте VIP на старый сервер.
  3. Измените записи DNS, чтобы они указывали на IP-адрес VIP. До сих пор весь трафик будет по-прежнему отправляться на старый сервер, но с использованием VIP.
  4. Когда все будет готово, переместите VIP на новый сервер.
  5. При желании вы можете изменить DNS на новый IP-адрес сервера и удалить VIP (через некоторое время) из DNS.
Халед
источник
Мне нравится ваше решение. Но я не знаком с VIP и как его получить. Не могли бы вы указать в правильном направлении?
Денис Пшенов
Это действительно просто. Команда like ifconfig eth0:0 <ip> <mask> upсоздаст подчиненный интерфейс, настроенный с IP, и этого ifconfig eth0:0 downдостаточно, чтобы деактивировать его.
Халед
0

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

  1. Настройте репликацию между базами данных на двух серверах.
  2. Во время переключения сделайте базу данных нового сервера в качестве основного, а старый сервер - только для чтения.
  3. Укажите строку подключения базы данных приложения на новый сервер как на старом, так и на новом сервере. Если ваш сайт использует сеансы, убедитесь, что сеанс сохраняется в БД.
  4. Измените IP-адрес в DNS на новый сервер.
  5. Продолжайте использовать оба сервера в течение как минимум 48 часов.
Шьям Сундар CS
источник
0
  1. Настройте новый сервер и прослушайте новый IP
  2. Затем настройте прозрачное перенаправление. На старом сервере установите rinetd.

В rinetd.conf:

OLD_SERVER_IP 80 NEW_SERVER_IP 80
  1. Измените записи DNS, чтобы они указывали на новый IP
yadaya
источник
Я сделал apt-get install rinetd, изменил /etc/rinetd.conf на новые настройки, перезапустил с /etc/init.d/rinetd restart, но он не перенаправил. также ничего не показывают в журнале /var/run/rinetd.log
Денис Пшенов
Покажите свое iptables-save и cat /etc/sysctl.conf | grep ip_forwardпожалуйста.
Ядайя
0

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

Апок
источник
-1

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

Например, если вы используете apache, когда вы делаете что-то подобное в apache на старом сервере:

redirect permanent / http://newserver.example.com

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

Поэтому, пока вы реализуете какое-то перенаправление на своем веб-сервере в дополнение к другим изменениям, у вас все будет в порядке.

aseq
источник