Перенос сайта с минимальным простоем

Перенос сайта с минимальным простоем

При росте нагрузки на веб-ресурс зачастую встает вопрос об увеличении мощности сервера. Вам повезло, если сайт размещен в гибком облаке, где можно «на лету» менять параметры сервера, в противном случае нужно будет переводить ресурс на новый сервер, данная статья расскажет о том, как провести миграцию с минимальными потерями.
Казалось бы, что сложного, настроить новый сервер, перенести базу, обновить DNS-записи и выключить старый сервер, но не все так просто. Когда пользователь набирает в строке браузера domain.com, браузер обращается к DNS-серверу, чтобы узнать адрес для подключения, DNS-сервера обновляются достаточно медленно, этот процесс может занимать до нескольких дней. При вышеописанном сценарии, часть пользователей не сможет попасть на сервер, т.к. будет обращаться к старому «выключенному» адресу. Если же оставить старый сервер работать, что тогда часть пользователей будет работать со старой версией сайта, а часть с новой, если сайт использует базу данных для хранения информации, то возникнет ситуация с двумя разными базами с актуальными данными, нужно будет проводить слияние баз, а это очень сложный процесс.

3.первый_вариант
Задачу можно решить, применив механизм проксирования сервера Nginx. При данном сценарии, старый сервер будет принимать запросы и перенаправлять их на новый сервер. Таким образом старый сервер будет как указатель на новое местоположение, со временем, DNS-сервера обновятся везде, и запросы к старому серверу прекратятся. Старый сервер должен именно проксировать запросы, а не выдавать 301 код редиректа, все это связано опять-таки с записями DNS-сервером, пользователь не попадет на новый сервер пока не обновятся DNS-сервера.

3.второй_вариант
Следующие инструкции написаны на примере Debian, однако легко переносимы на другие системы. Предполагается, что новый сервер настроен, контент перенесен и ожидает отключения старого сервера.
Если на сервере уже используется Nginx или связка Nginx-Apache, то можно приступить к конфигурированию, если же Nginx отсутствует, то его нужно установить из репозитария с помощью менеджера пакетов. Настроим Nginx для проксирования, создадим или обновим конфигурацию чтобы она выглядела приблизительно так.

server {
       listen 80;
       server_name domain.com www.domain.com;
       access_log /path/to/log/domain.com_access_log;
       error_log /path/to/log/domain.com_error_log info;
       root /path/to/site/;
       index index.html;
       charset utf-8;
        location / {
                proxy_pass http://12.34.56.78/;
                proxy_redirect off;
                proxy_set_header host $host;
                proxy_set_header x-real-ip $remote_addr;
                proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;
                client_max_body_size 100m;
                client_body_buffer_size 128k;
                proxy_connect_timeout 90;
                proxy_send_timeout 90;
                proxy_read_timeout 90;
                proxy_buffer_size 4k;
                proxy_buffers 4 32k;
                proxy_busy_buffers_size 64k;
                proxy_temp_file_write_size 10m;
        }
}

При данных настройках, Nginx будет перенаправлять все запросы на другой сервер с IP-адресом 12.34.56.78, добавляя необходимые заголовки с информацией о том, откуда пришел пользователь. Также важно логгировать всю информацию о доступе к серверу и об ошибках на нем – это поможет определить, когда пользователи прекратят обращаться к старому серверу. Теперь старый сервер готов к перенаправлению трафика, но прежде чем начать перенаправлять трафик нужно убедиться, что новый сервер имеет актуальный контент и правильно работает.
Если все верно, то достаточно перезагрузить Nginx, теперь поток трафика пойдет на новый сервер, пользователи не заметят изменений, возможно часть из них увидит страницу с ошибкой на время перезапуска Nginx, но это количество будет очень мало.
Если все работает штатно, можно обновлять DNS записи о ресурсе. Через несколько дней, нужно посмотреть логи доступа на старом сервере, если обращения закончились, то можно отключать сервер – поздравляю, сайт благополучно мигрировал с минимальными потерями.
Данная статься не рассматривает вопросы сложной миграции, при которых необходимо перенести базу данных с минимальным простоем, читайте об этом в следующих заметках.
Если Вам понравилась заметка, обязательно делитесь ее со своими друзьями, если же есть пожелания или замечания – сообщите о них.
Использование материалов на сторонних ресурсах, без разрешения автора, запрещено.

Автор:Jury Sosnovsky