Большинство болезненных переездов — это ошибки порядка действий, а не технические проблемы. Люди сначала меняют DNS и только потом обнаруживают, что база данных устарела. Соблюдайте порядок ниже, и посетители не заметят переезда.
Шаг 1: заранее уменьшите TTL в DNS
Как минимум за сутки до переезда установите для записей A и AAAA значение TTL 300 секунд. Кэшам, которые уже хранят старое значение, нужно время, чтобы оно истекло, поэтому этот шаг нельзя ускорить в день переезда.
Шаг 2: сначала создайте новый сервер
Создайте новый VPS, примените чек-лист по защите и установите тот же набор ПО: веб-сервер, версию PHP или Node, СУБД. Одинаковые версии избавляют от большинства сюрпризов. Копируйте конфигурацию, а не только содержимое.
Шаг 3: скопируйте файлы
rsync -aHAX --info=progress2 -e ssh /var/www/ user@NEW_IP:/var/www/
Запустите копирование один раз сейчас. В первый раз оно идёт медленно, а при повторе быстро, в этом и смысл.
Шаг 4: скопируйте базу данных
# on the old server
mysqldump --single-transaction --routines --triggers mydb | gzip > mydb.sql.gz
scp mydb.sql.gz user@NEW_IP:~/
# on the new server
gunzip < mydb.sql.gz | mysql mydb
Это репетиция. Она даёт вам рабочую копию для тестирования.
Шаг 5: протестируйте до того, как туда направят посетителей
Направьте свой компьютер на новый сервер, изменив файл hosts: добавьте NEW_IP example.com www.example.com. Откройте сайт, войдите в аккаунт, отправьте форму и оформите тестовый заказ. Исправьте всё, что сломалось, пока посетители ещё видят старый сервер. Установите сертификат TLS с помощью DNS-проверки, чтобы он работал ещё до переключения.
Шаг 6: заморозка, финальная синхронизация, переключение
- Переведите старый сайт в режим обслуживания или только для чтения.
- Повторите
rsync, а также выгрузку и импорт базы данных. - Измените DNS-записи на новый IP.
- Удалите запись из файла hosts и проверьте из другой сети.
Окно только для чтения обычно занимает несколько минут. Для магазина или сайта с авторизацией выберите спокойное время.
Шаг 7: понаблюдайте, затем выведите старый сервер из эксплуатации
Держите старую машину несколько дней. Некоторые резолверы игнорируют TTL, поэтому небольшой поток трафика всё ещё будет приходить. По возможности перенаправляйте или проксируйте этот трафик на новый IP, проверьте логи, затем верните TTL к обычному значению. Прежде чем удалять старый сервер, сделайте свежую резервную копию с нового.
Переезжаете заодно в другую юрисдикцию? Сначала сравните варианты в статье сравнение юрисдикций для оффшорного хостинга.