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

Живая миграция веб-сервера

Мне нужно заменить стареющий веб-сервер, на котором работает загруженный веб-сайт. У меня установлено новое оборудование, все программное обеспечение установлено. Осталась только одна проблема, решение которой я ищу:

Когда я изменяю запись A для домена в DNS, из-за кэширования DNS требуется некоторое время, чтобы изменение распространялось через Интернет. В течение этого времени некоторые пользователи перейдут на новый сервер, а некоторые - на старый, что приведет к несогласованности данных, поскольку теперь есть две базы данных. Как я могу переключить всех сразу? Я не использую DNS-сервер и не могу ничего изменить, кроме записей A и CNAME, но я могу настроить свои собственные, если это поможет.

У меня, вероятно, может быть час или два простоя при ночном переезде.

Спасибо, Саймон

редактировать: Спасибо за все ваши ответы. Я принимаю ответ SmallClanger, потому что это жизнеспособное решение, и я поддерживаю Брайана, потому что его ответ дал мне новую идею: следуйте решению SmallClanger до миграции базы данных, а затем замените старый apache прокси-сервером HTTP, который проксирует все запросы на новый сервер. Я бы настроил прокси-сервер для адресации нового сервера по IP-адресу, и он не включает временный поддомен, который может (несмотря на код 302) оказаться в каком-то каталоге закладок, социальной сети или кеше браузера.

Вы можете настроить старый веб-сервер для перенаправления всех запросов на новый IP-адрес. Это можно сделать с помощью mod_rewrite в apache.

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

Учитывая, что вы не можете изменить TTL, вам лучше всего свести к минимуму время простоя:

  • Настройте новый сайт на втором доменном имени (например: www2.example.com), но ответьте на www.example.com, слишком. Укажите DNS для www2 только на новом сервере.
  • Сделайте репликацию файлов сайта и заблокируйте их от правок с обеих сторон.
  • Затем в объявленном периоде обслуживания замените действующий сайт уведомлением о том, что обновления недоступны.
  • При необходимости синхронизируйте или скопируйте базу данных, а затем запустите новый сервер.
  • Затем (и только тогда) внесите изменения в DNS в www запись.
  • Замените старую конфигурацию сайта простым перенаправлением 302 на www2.example.com
  • Подождите, пока истечет полный TTL (а затем немного), прежде чем отключать старый сервер.

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

Для односерверного стека LAMP (если он у вас есть) это ваш путь к минимальному (но не нулевому) времени простоя.

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

Вам необходимо сначала перенести все файлы данных на новый сервер (файлы apache и mysql). После этого, когда у вас есть 2 часа на остановку сервера, вы можете синхронизировать все файлы данных с помощью rsync. Например, rsync -avz / var / www / sites (old-server) user @ hosts2: / var / www / sites (new-servers). И экспорт, импорт всех файлов данных на сервере sql с сервера 1 на новый сервер. Затем переключите сервер 2

и остановите старый сервер, если у вас возникли проблемы, снова запустите сервер 1 и повторите ошибки на новом сервере.

Но перед тем, как начать проверку нового сервера на наличие ошибок, проведите собственный тест.

снизить TTL и поставить под знаком обслуживания на старой странице?

Я считаю, что TTL - плохая идея. Потому что, если старый сервер жив, один пользовательский мейбе будет подключаться к старому серверу, а другой пользователь будет использовать новый сервер. Если у вас действительно есть 2 часа, используйте синхронизацию и экспортируйте inport все из sql в sql, а затем переключитесь на новый сервер Я уверен, что все будет в порядке с решениями mu

Вы можете использовать старый IP-адрес сервера для своего нового сервера.