LINUX.ORG.RU
решено ФорумAdmin

Перенос посещаемого сайта на другой сервер


0

1

Доброго времени суток.

Решил переехать по ряду причин, и задумался. А как это сделать с сайтом на котором чуть ли не каждую секунду происходят изменения в бд и немного реже в некоторых файлах?
На новом серваке все настраиваем, копируем сайт, бд, меняем днс у старого домена. Все по идеи хорошо, но вот у тех, у кого не обновился кэш днс — открывается старая версия сайта и вышеперечисленные изменения происходят на ней. Получается, что ~половина пользователей «гадит» в бд старого сайта, а другая половина — нового. И когда у всех обновятся днс, будет непонятно что.
Подскажите, пожалуйста, может есть какой вариант, при котором все изменения в бд/файлах старого сайта будут отправляться и применяться на новом сервере автоматически? Или может что-нибудь еще подобное существует? В общем, не могу сообразить, как это описать подробнее.
Спасибо.
tazhate

P.S.: пока писал, подумал, что можно же по идеи указать данные доступа к удаленной БД на старом сайте (вместо localhost — адрес сервера) или нет? Ну, а если да, то как быть с файлами?

На время обновления DNS настроить nginx на старом сервере на редирект запросов на новый.

По самому переносу - если требуется zero downtime, то master-master репликация для БД и вперёд, но потребуется очень хорошее соединение и запас мощей по железу.

selivan ★★★ ()
Последнее исправление: selivan (всего исправлений: 1)
Ответ на: комментарий от selivan

На время обновления DNS настроить nginx на старом сервере на редирект запросов на новый.

Это можно сделать без пересборки nginx из исходников? На сервере - дебиан.

если требуется zero downtime

минут 10-20 не так критично, в принципе.

emissar ★★ ()

первым этапом нужно перенастроить время обновления днс, потом подождать пока все днс-сервера старое закешированное значение потрут. потом уже переключать днс.

ещё варианты: 1. прокси 2. перенастроить старый сервер, чтобы обращения шли к новой базе.

maloi ★★★★★ ()
Ответ на: комментарий от emissar

Это можно сделать без пересборки nginx из исходников? На сервере - дебиан.

да, можно.

maloi ★★★★★ ()
Ответ на: комментарий от maloi

первым этапом нужно перенастроить время обновления днс, потом подождать пока все днс-сервера старое закешированное значение потрут. потом уже переключать днс.

Интересно. А можно чуть подробнее?

emissar ★★ ()
Ответ на: комментарий от emissar

Это можно сделать без пересборки nginx из исходников?

Конечно, nginx вообще сначала развивался как реверс-прокси для динамики и основной сервер для статики

минут 10-20 не так критично, в принципе

Если объём данных позволяет перебросить их между серверами за 10-20 минут - вообще никаких проблем:

- настраиваем на новом сервере симметрично веб-сервер и базу данных, но пустые
- ставим на старом сервере revese-proxy на новый на другом порту, типа 8080 - протестировать
- тестируем
- вешаем на старом сервере заглушку «Under construction». Там ещё какой-то специальный заголовок отдавать надо, чтобы гуглбот сайт в таком виде не проиндексировал, не обычный 200 OK.
- гасим БД
- переносим сайт и базу простым копированием на новый сервер
- проверяем на новом сервере
- перенастраиваем на старом reverse-proxy на 80 порт
- меняем записи в DNS

Если объём данных не позволяет перебросить их за требуемое время - потребуются изъёбства:

- статику предварительно скопировать rsync-ом, и потом досинхронизировать изменившиеся файлы
- для базы - настроить partitioning, чтобы новые данные лились в другие файлы; засинхронизировать rsync-ом самые тяжёлые куски, не прекращая работы; застопить и синхронизировать окончательно(будут переданы только новые данные). Ну или изъёбства с master-slave и WAL, для постгреса. Для мускуля - не знаю

selivan ★★★ ()
Ответ на: комментарий от selivan

Что-то я запутался, блин.
Я вообще там меняю? На старом сервере в конфиге хоста меняю:


location / {
# proxy_pass http://127.0.0.1:88;
proxy_pass http://ип_нового_сервера:8080;
}

Старый сайт начинает выдавать 502. Меняю порт на 80 - «Welcome to nginx».

ставим на старом сервере revese-proxy на новый на другом порту, типа 8080 - протестировать

А это для чего вообще? В смысле порт 8080.

emissar ★★ ()
Последнее исправление: emissar (всего исправлений: 1)
Ответ на: комментарий от emissar

На 8080, чтобы сначала протестировать. То есть 8080 старого сервера должен перенаправляться на 80 нового сервера. При этом на 80 старного сервер должен продолжать отдавать сайт. А ты наоборот делаешь, вот и 502 - у тебя же на новом сервере на 8080 ничего нет

selivan ★★★ ()

чуть ли не каждую секунду происходят изменения

50k хитов в день...
я бы даже не парился

wxw ★★★★★ ()
Ответ на: комментарий от selivan

Спасибо за помощь. Вроде получилось, работает. Только вот на глаз медленнее грузится, чем если просто зайти на новый сервер. Так и должно быть?

emissar ★★ ()

rsync и репликация базы, можно часто по крону, асинхронно. меняешь ttl на запись в dns на одну минуту, ждешь (старый ttl), последний раз синкаешь, репоинтишь на новый сервер, меняешь ttl обратно.

val-amart ★★★★★ ()
Ответ на: комментарий от val-amart

assuming все на коленке, денег и админа нет, простой в одну минуту для _некоторых_ клиентов допустим.

val-amart ★★★★★ ()
Ответ на: комментарий от emissar

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

selivan ★★★ ()

Подскажите, пожалуйста, может есть какой вариант, при котором все изменения в бд/файлах старого сайта будут отправляться и применяться на новом сервере автоматически?

Если требуется без остановки, то кроме мастер-мастер репликации БД в голову ничего не приходит.

А с остановкой — проблема кеширования DNS не проблема. Просто на старом сайте вешаем заглушку «идёт переезд, зайдите чуть позже».

KRoN73 ★★★★★ ()
Ответ на: комментарий от wxw

чуть ли не каждую секунду происходят изменения

50k хитов в день...

50k POST'ов, если ТС корректно выразился.

KRoN73 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.