Для начала на обоих машинах обновляем до последней актуальной версии пакет vzctl (vzmigrate входит в его состав):
yum upgrade vzctl -y
Кладем на удаленный (target) сервер свои ключи: http://phpsuxx.blogspot.com/2009/12/ssh_17.html
Вызываем команду vzlist на host_source чтобы определить, CTID контейнера, который будем переносить:
vzlist
В моем случае это контейнер 1201.
Сохраняем состояние host_source:
vzlist | grep 1201
1201 42 running ip.ad.dr.es domain.ru
И host_target:
vzlist | grep 1201
Container(s) not found
Так как ssh может отцепиться в процессе переноса, а это очень долгий процесс ставим и запускаем screen:
yum install screen -y
screen
# а если у Вас отцепится ssh, при повторном входе делаете screen -r
Обращаю внимание, что если идет речь о переносе веб-сервера, то на нем заведомо может быть огромное число файлов в папке /tmp (либо /var/www/username/data/mod-tmp), которые могут ОЧЕНЬ сильно замедлить процесс переноса, поэтому позаботьтесь об их удалении загодя, иначе это чревато тем, что миграция будет идти пару суток :)
Также есть опасность получить проблемы (например, такие), если на source сервере загружены спец модули iptables, которых может не оказаться на target машине.
Поэтому смотрим, какие IPTABLES модули подключены к VPS:
cat /etc/vz/conf/1201.conf | grep IPTABLES -i
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ipt_state iptable_nat ipt_REDIRECT "
Тут список модулей весьма велик и на время миграции (ну или навсегда, их стоит отключить во избежание проблем):
vi /etc/vz/conf/1201.conf
И приводим строку к виду:
IPTABLES=""
Перезапускаем контейнер:
vzctl stop 1201; vzctl start 1201
Запускаем перенос (если хотите, чтобы скрипт миграции не забивал экран текстом, то уберите --rsync="-v"):
vzmigrate -v --remove-area no --online --rsync="-v" host_target_ip 1201
Если нужно отказаться от копирования каких-либо файлов, после -v через пробел дописываем:
--exclude-from=/root/exclude.txt
В итоге получаем облом:
Starting online migration of CT 1201 to host_target_ip
Error: Can't connect to destination address using public key
Error: Please put your public key to destination node
Бороться с этим вот так: http://phpsuxx.blogspot.com/2009/12/ssh_17.html (те для source системы настраиваем авторизацию на target)
Повторяем предыдущую команду.
OPT:--online
OPT:88.198.37.23
Starting online migration of CT 1201 to 88.198.37.23
Preparing remote node
Initializing remote quota
Syncing private
Live migrating container...
Syncing 2nd level quota
Cleanup
И в итоге на host_source имеем:
vzlist | grep 1201
А на host_target:
vzlist | grep 1201
1201 42 running ip.ad.dr.es domain.ru
А с private data дела сложнее - данные 1201 VE были удалены с source ноды целиком (что очень не радует...), зато целиком (надеюсь) переехали на новую в папку: /vz/private/1201/
А вот пинги у меня обломались, т.к. датацентр не поддерживает live-миграцию айпи с одной машины на другую.
После окончания переноса не забываем удалить ssh ключи с target машины, ибо это крайне небезопасно:
rm -f /root/.ssh/authorized_keys
Далее не забываем отдать все ресурсы выделенного сервера контейнеру: http://phpsuxx.blogspot.com/2010/03/openvz-vps.html
Далее, если при переносе сменился IP необходимо скорректировать настройки контейнера:
sed -i 's/178.63.175.246/' /etc/vz/conf/1201.conf
vzctl stop 1201
vzctl start 1201
Далее производим изменения ip уже в контейнере (пример для Debian):
export OLD_IP=12.1.1.1
export NEW_IP=122.33.44.55
vzctl enter 1201
# Debian
sed -i "s/$OLD_IP/$NEW_IP/" /etc/nginx/nginx.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/apache2.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/conf.d/rpaf.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/apache2/mods-enabled/rpaf.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/hosts
/etc/init.d/nginx restart
/etc/init.d/apache2 restart
# CentOS
sed -i "s/$OLD_IP/$NEW_IP/" /etc/nginx/nginx.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/httpd/conf/httpd.conf
sed -i "s/$OLD_IP/$NEW_IP/" /etc/hosts
/etc/init.d/httpd restart
/etc/init.d/nginx restart
А также на всякий случай поищем упоминания старого IP в других конфигах:
cd /etc
grep -HiR "$OLD_IP" *
Также, если используется VDSManager, то необходимо открыть его конфиг:
vi /usr/local/ispmgr/etc/vdsmgr.conf
И удалить оттуда блок, соответствующий перенесенному VPS:
vds "xx.xx.xx.xx" {
Name test.domain.ru
Owner admin
CPULimit 0
TrafLimit 99999999
TrafUsed 574
Backup none
}
После этого перезапускаем VDSManager:
killall -9 vdsmgr
И убеждаемся, что команда сбора статистики:
/usr/local/ispmgr/sbin/dostat.pl
Более не выдает ошибки: "ERROR 1 : VDS not found"
Основано на мануале: http://wiki.openvz.org/Checkpointing_and_live_migration
No comments :
Post a Comment
Note: only a member of this blog may post a comment.