Мне нужно заменить стареющий веб-сервер, на котором работает загруженный веб-сайт. У меня установлено новое оборудование, все программное обеспечение установлено. Осталась только одна проблема, решение которой я ищу:
Когда я изменяю запись 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
только на новом сервере. www
запись. www2.example.com
Это гарантирует, что весь трафик идет на новый сайт во время распространения 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-адрес сервера для своего нового сервера.