Массовый перенос сайтов при обновлении железа: как правильно?

Александр Фролов
На сайте с 27.12.2007
Offline
155
947

Есть некоторое количество серверов, на каждом из которых десятки или сотни сайтов интернет-магазинов (ОС FreeBSD). Время от времени возникает необходимость забрать сервер с площадки для апгрейда или ремонта. Перед этим приходится сначала ставить новый сервер, потом переносить всех пользователей с сайтами и базами (переносим средствами ISPManager), а затем менять IP-адеса в DNS для каждого сайта.

Вот как раз эта процедура смены IP-адресов в DNS и напрягает, т.к. мы пользуемся DNS-серверами провайдера, а там отсутствует возможность редактирования записей DNS из программ через API. Приходится редактировать вручную, а это долго. Кроме того, на время переключения часть пользователей видит старый сайт, а часть - новый.

Подскажите, пожалуйста, есть ли какие-либо архитектурные решения, позволяющие переносить пользователей и сотни сайтов с одного физического сервера на другой без смены IP сайтов? Решения WMWare слишком дорогие, хотелось бы что-нибудь подешевле, и без особого железа вроде серверов-лезвий. От FreeBSD также не хотелось бы отходить по возможности. Да, и во время переноса не должно быть перерывов в доступе к сайтам, или эти перерывы не должны превышать нескольких минут.

Заранее спасибо за любую помощь!

DV
На сайте с 01.05.2010
Offline
644
#1

Клонировать диск, прописать новые сетевые интерфейсы и ad/da.

VDS хостинг ( http://clck.ru/0u97l ) Нет нерешаемых задач ( https://searchengines.guru/ru/forum/806725 ) | Перенос сайтов на Drupal 7 с любых CMS. ( https://searchengines.guru/ru/forum/531842/page6#comment_10504844 )
Александр Фролов
На сайте с 27.12.2007
Offline
155
#2
DenisVS:
Клонировать диск, прописать новые сетевые интерфейсы и ad/da.

Так мы клонируем сервер. Потом мы должны его привезти на площадку к провайдеру, и тут возникнут проблемы. Мы не можем просто установить его и включить, т.к. IP уже занят другим сервером, который работает. Поэтому нам придется остановить работающий сервер, изъять его, поставить новый и включить. Во время замены сервера и загрузки ОС сайты будут недоступны как минимум минут 20, и еще не известно, все ли будет хорошо при загрузке нового сервера. Например, окажется, что еще нужно прописывать новый MAC-адрес на маршрутизаторе провайдера.

Кстати, обычно я еще и обновляю ПО сервера, так что клонирование не всегда подойдет.

Хотелось бы все это сделать без предварительного изъятия старого сервера или даже без его остановки. Т.е. поставили новый сервер, перенесли на него все, потом быстро переключили IP или сделали что-то еще и продолжаем работать. Когда убедились, что новый сервер работает, останавливаем старый. Так можно?

С
На сайте с 14.04.2011
Offline
63
#3

Копируете всё на новый, затем на старом делаете проксирование(через nginx) всех запросов на новый.

Затем спокойно переписываете ДНС, как всё обновится, отключаете старый. Даунтайм нулевой.

Александр Фролов
На сайте с 27.12.2007
Offline
155
#4
Сентябрь:
Копируете всё на новый, затем на старом делаете проксирование(через nginx) всех запросов на новый.
Затем спокойно переписываете ДНС, как всё обновится, отключаете старый. Даунтайм нулевой.

Да, интересное решение, спасибо!

А не подскажете, как это настроить? Я не большой спец по nginx...

С
На сайте с 14.04.2011
Offline
63
#5
Александр Фролов:
Да, интересное решение, спасибо!
А не подскажете, как это настроить? Я не большой спец по nginx...

http://nginx.org/ru/docs/http/ngx_http_proxy_module.html#proxy_pass

Александр Фролов
На сайте с 27.12.2007
Offline
155
#6

Вот тут-то я и не понимаю, не получается разобраться по документации...

Мне ведь надо все запросы для всех сайтов на порту 80 проксировать на другой сервер?

Правильно ли я понимаю, что нужно сделать что-то вроде этого:

http {

include mime.types;

default_type application/octet-stream;

...

server {

listen 80;

server_name *; ???

location / { ???

root html;

index index.html index.htm;

}

Но как задать server_name и loсation, чтобы обозначить сразу все сайты?

Или мне для каждого из сотен сайтов нужно отдельно прописывать блок server?

С
На сайте с 14.04.2011
Offline
63
#7

server {
listen 80;
server_name _;
location / {
proxy_pass http://newserver;
}
}
Александр Фролов
На сайте с 27.12.2007
Offline
155
#8

Большое спасибо, буду пробовать!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий