Свако ко је барем једном у животу морао да пренесе ОпенВЗ контејнер на сервер са пуном КВМ виртуелизацијом наишао је на неке проблеме:
- Већина информација је једноставно застарела и била је релевантна за оперативне системе који су одавно прошли ЕОЛ циклус
- За различите оперативне системе увек се дају различите информације, а могуће грешке током миграције се никада не разматрају
- Понекад морате да се носите са конфигурацијама које с времена на време не желе да раде након миграције
Када пренесете 1 сервер, увек можете нешто поправити у ходу, али када пренесете цео кластер?
У овом чланку ћу покушати да вам кажем како да исправно мигрирате ОпенВЗ контејнер на КВМ са минималним застојима и брзим решењем за све проблеме.
Мали образовни програм: шта је ОпенВЗ, а шта КВМ?
Нећемо улазити дубоко у терминологију, већ ћемо рећи уопштено:
ОпенВЗ — виртуелизација на нивоу оперативног система, можете је чак применити и на микроталасној, пошто нема потребе за ЦПУ инструкцијама и технологијама виртуелизације на главној машини.
квм - пуна виртуелизација, која користи сву снагу ЦПУ-а и способна да виртуелизује било шта, на било који начин, пресецајући то по дужини и попречно.
Супротно увреженом веровању, у окружењу провајдери хостинга OpenVZ је препродан, али KVM није. Срећом по овог другог, KVM је сада препродан подједнако добро као и његов брат.
Шта ћемо пренети?
Читава шума оперативних система доступних на OpenVZ-у морала је бити коришћена као тест субјекти за трансфер: CentOS (6. и 7. верзија), Ubuntu (14, 16 и 18 LTS), Debian 7.
Претпостављало се да већина ОпенВЗ контејнера већ користи неку врсту ЛАМП-а, а неки чак имају и врло специфичан софтвер. Најчешће су то биле конфигурације са ИСПманагер-ом, ВестаЦП контролном таблом (и најчешће нису ажуриране годинама). Њихови захтеви за трансфер такође се морају узети у обзир.
Миграција се врши уз очување ИП адресе За преносиви контејнер, претпоставићемо да је IP адреса контејнера сачувана на виртуелној машини и да ће радити без проблема.
Пре преноса, уверимо се да имамо све при руци:
- ОпенВЗ сервер, потпуни роот приступ главној машини, могућност заустављања/монтаже/покретања/брисања контејнера
- КВМ сервер, потпуни роот приступ главној машини, са свим оним што подразумева. Претпоставља се да је све већ конфигурисано и спремно за рад.
Почнимо са преносом
Пре него што започнемо пренос, хајде да дефинишемо термине који ће вам помоћи да избегнете забуну:
КВМ_НОДЕ - КВМ хост машина
ВЗ_НОДЕ - ОпенВЗ хост машина
ЦТИД - ОпенВЗ контејнер
VM - КВМ виртуелни сервер
Припрема за миграцију и креирање виртуелних машина.
Корак КСНУМКС
Пошто морамо негде да померимо контејнер, креираћемо VM са сличном конфигурацијом као КВМ_НОДЕ.
Важно! Потребно је да креирате виртуелну машину на истом оперативном систему који тренутно ради на CTID-у. На пример, ако је CTID покренут Ubuntu 14, онда га морате инсталирати и на виртуелну машину Ubuntu 14. Мање верзије нису важне и њихова неслагања нису толико критична, али главне верзије морају бити исте.
Након креирања ВМ-а, ажурираћемо пакете на ЦТИД-у и на ВМ-у (не треба мешати са ажурирањем ОС-а - ми га не ажурирамо, само ажурирамо пакете и, ако стигне, верзију ОС-а у оквиру главног верзија).
За CentOS Овај процес изгледа безопасно:
# yum clean all
# yum update -yИ ништа мање безопасно за Ubuntu, Debian:
# apt-get update
# apt-get upgradeКорак КСНУМКС
Инсталирај на ЦТИД, ВЗ_НОДЕ и VM корисност рсинц:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yНишта друго не уграђујемо ни тамо ни тамо.
Корак КСНУМКС
Заустављамо се ЦТИД на ВЗ_НОДЕ тим
vzctl stop CTIDМонтирање слике ЦТИД:
vzctl mount CTIDИдите у фасциклу /вз/роот/ЦТИД и извршити
mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .Под роот-ом креирајте датотеку /роот/екцлуде.ткт - она ће садржати листу изузетака који неће доћи до новог сервера
/boot
/proc
/sys
/tmp
/dev
/var/lock
/etc/fstab
/etc/mtab
/etc/resolv.conf
/etc/conf.d/net
/etc/network/interfaces
/etc/networks
/etc/sysconfig/network*
/etc/sysconfig/hwconf
/etc/sysconfig/ip6tables-config
/etc/sysconfig/kernel
/etc/hostname
/etc/HOSTNAME
/etc/hosts
/etc/modprobe*
/etc/modules
/net
/lib/modules
/etc/rc.conf
/usr/share/nova-agent*
/usr/sbin/nova-agent*
/etc/init.d/nova-agent*
/etc/ips
/etc/ipaddrpool
/etc/ips.dnsmaster
/etc/resolv.conf
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-ens3Povezujemo se sa КВМ_НОДЕ и покренути наше VMтако да ради и да је доступан преко мреже.
Сада је све спремно за трансфер. Иди!
Корак КСНУМКС
Још увек под чаролијом, наступамо
rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/Команда рсинц ће извршити пренос, надамо се да су кључеви јасни – пренос се врши уз очување симболичких веза, права приступа, власника и група, а шифровање је онемогућено ради веће брзине (можете користити неки бржи шифрар, али ово није толико важно за овај задатак), као и компресија је онемогућена.
Након што завршите рсинц, изађите из цхроот-а (притиском на цтрл+д) и извршите
umount dev && umount proc && umount sys && cd .. && vzctl umount CTIDКорак КСНУМКС
Хајде да извршимо неколико корака који ће нам помоћи да покренемо ВМ након преноса са ОпенВЗ-а.
На серверима са Системд хајде да извршимо команду која ће нам помоћи да се пријавимо на обичну конзолу, на пример, преко екрана ВНЦ сервера
mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceНа серверима CentOS 6 и CentOS 7 Обавезно инсталирајте ново језгро:
yum install kernel-$(uname -r)Сервер се може учитати са њега, али након преноса може престати да ради или ће бити обрисан.
На серверу CentOS 7 морате да примените малу исправку за ПолкитД, иначе ће се сервер заувек срушити:
getent group polkitd >/dev/null && echo -e "e[1;32mpolkitd group already existse[0m" || { groupadd -r polkitd && echo -e "e[1;33mAdded missing polkitd groupe[0m" || echo -e "e[1;31mAdding polkitd group FAILEDe[0m"; }
getent passwd polkitd >/dev/null
&& echo -e "e[1;32mpolkitd user already existse[0m" || { useradd -r -g polkitd -d / -s /sbin/nologin -c "User for polkitd" polkitd && echo -e "e[1;33mAdded missing polkitd usere[0m" || echo -e "e[1;31mAdding polkitd user FAILEDe[0m"; }
rpm -Va polkit* && echo -e "e[1;32mpolkit* rpm verification passede[0m" || { echo -e "e[1;33mResetting polkit* rpm user/group ownership & permse[0m"; rpm --setugids polkit polkit-pkla-compat; rpm --setperms polkit polkit-pkla-compat; }На свим серверима, ако је инсталиран мод_фцгид за Апацхе, извршићемо малу поправку са правима, иначе ће сајтови који користе мод_фцгид пасти са грешком 500:
chmod +s `which suexec` && apachectl restartИ на крају, биће корисно за Ubuntu, Debian дистрибуције. Овај ОС може да се сруши и доведе до трајног покретања са грешком.
петља пребрзо. пригушивање извршења мало
непријатно, али се лако поправља, у зависности од верзије ОС-а.
На Debian 9 поправка изгледа овако:
спроводимо
dbus-uuidgenако добијемо грешку
/уср/лоцал/либ/либдбус-1.со.3: верзија `ЛИБДБУС_ПРИВАТЕ_1.10.8′ није пронађена
проверите присуство ЛИБДБУС-а
ls -la /lib/x86_64-linux-gnu | grep dbus
libdbus-1.so.3 -> libdbus-1.so.3.14.15
libdbus-1.so.3.14.15 <-- нужен этот
libdbus-1.so.3.14.16ако је све у реду, ми то радимо
cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15 libdbus-1.so.3Ако не помогне, пробајте другу опцију.
Друго решење проблема са мало пригушивање извршења погодно за скоро свакога Ubuntu и Debian дистрибуције.
Изводимо
bash -x /var/lib/dpkg/info/dbus.postinst configureИ за Ubuntu 14, Debian 7 Поред тога вршимо:
adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus
rm -rf /etc/init.d/modules_dep.sh Шта смо урадили? Вратили смо магистралу порука, која је недостајала при покретању. Debian/Ubuntu и уклонио modules_dep, који је дошао из OpenVZ-а и спречавао учитавање многих модула језгра.
Корак КСНУМКС
Поново покрећемо ВМ, проверавамо у ВНЦ-у како учитавање напредује и, идеално, све ће се учитати без проблема. Иако је могуће да ће се неки специфични проблеми појавити након миграције, они су ван оквира овог чланка и биће исправљени како се појаве.
Надам се да су ове информације корисне! 🙂
Извор: ввв.хабр.цом
