OpenVZ 6 контейнерін бас ауыртпай KVM серверіне қалай тасымалдауға болады

Өмірінде кем дегенде бір рет толық KVM виртуализациясы бар серверге OpenVZ контейнерін тасымалдау қажет болған кез келген адам кейбір мәселелерге тап болды:

  • Ақпараттың көпшілігі жай ғана ескірген және EOL циклінен бұрыннан өткен ОЖ үшін өзекті болды
  • Әртүрлі операциялық жүйелер үшін әртүрлі ақпарат әрқашан ұсынылады және тасымалдау кезінде мүмкін болатын қателер ешқашан ескерілмейді
  • Кейде тасымалдаудан кейін жұмыс істегіңіз келмейтін конфигурациялармен айналысуға тура келеді

1 серверді тасымалдаған кезде, сіз әрқашан бір нәрсені жылдам түзете аласыз, бірақ тұтас кластерді тасымалдағанда?

Бұл мақалада мен сізге OpenVZ контейнерін минималды тоқтау уақытымен және барлық мәселелерді жылдам шешумен KVM-ге қалай дұрыс көшіру керектігін айтуға тырысамын.

Шағын білім беру бағдарламасы: OpenVZ дегеніміз не және KVM дегеніміз не?

Біз терминологияға тереңірек бармаймыз, бірақ жалпы түрде айтамыз:

OpenVZ — операциялық жүйе деңгейінде виртуализация, оны тіпті микротолқынды пеште де орналастыруға болады, өйткені негізгі компьютерде CPU нұсқаулары мен виртуализация технологиялары қажет емес.

KVM - толыққанды виртуалдандыру, процессордың барлық қуатын пайдалана отырып және кез келген жолмен кез келген нәрсені виртуализациялауға, оны ұзына бойына және көлденең кесуге қабілетті.

Хостинг провайдерлерінің арасында OpenVZ артық сатылып кетеді деген танымал пікірге қарамастан, KVM сатылмайды - бақытымызға орай, KVM қазір оның ағасынан артық сатылмайды.

Біз нені өткіземіз?

Тасымалдау үшін сынақ субъектілері ретінде біз OpenVZ-де қол жетімді операциялық жүйелердің барлық орманын пайдалануымыз керек болды: CentOS (6 және 7 нұсқалары), Ubuntu (14, 16 және 18 LTS), Debian 7.

OpenVZ контейнерлерінің көпшілігі қазірдің өзінде қандай да бір LAMP түрімен жұмыс істейді деп болжанған, ал кейбіреулерінде тіпті өте нақты бағдарламалық жасақтама болған. Көбінесе бұл ISPmanager, VestaCP басқару панелімен конфигурациялар болды (және көбінесе жылдар бойы жаңартылмайды). Олардың аудару туралы өтініштері де ескерілуі керек.

Тасымалдау тасымалданатын контейнердің IP мекенжайын сақтау кезінде жүзеге асырылады, біз контейнердегі IP мекенжайы VM-де сақталған және еш қиындықсыз жұмыс істейді деп есептейміз.

Тасымалдамас бұрын, қолымызда бәрі бар екеніне көз жеткізіңіз:

  • OpenVZ сервері, негізгі компьютерге толық түбірлік қатынас, контейнерлерді тоқтату/монтаждау/бастау/жою мүмкіндігі
  • KVM сервері, басты компьютерге толық түбірлік қатынас, оның барлығын білдіреді. Барлығы қазірдің өзінде конфигурацияланған және пайдалануға дайын деп болжанады.

Аударуды бастайық

Тасымалдауды бастамас бұрын, шатастырмауға көмектесетін шарттарды анықтайық:

KVM_NODE - KVM хост машинасы
VZ_NODE - OpenVZ хост машинасы
CTID - OpenVZ контейнері
VM - KVM виртуалды сервері

Көшіруге дайындық және виртуалды машиналарды жасау.

қадам 1

Контейнерді бір жерге жылжытуымыз керек болғандықтан, біз жасаймыз VM ұқсас конфигурациямен KVM_NODE.
Маңызды! Қазіргі уақытта CTID жүйесінде жұмыс істеп тұрған операциялық жүйеде VM жасау керек. Мысалы, Ubuntu 14 CTID-де орнатылған болса, Ubuntu 14 VM-де орнатылуы керек.Кіші нұсқалар маңызды емес және олардың сәйкессіздігі соншалықты маңызды емес, бірақ негізгі нұсқалар бірдей болуы керек.

VM жасағаннан кейін біз CTID және VM пакеттерін жаңартамыз (ОЖ жаңартуымен шатастырмау керек - біз оны жаңартпаймыз, біз тек пакеттерді жаңартамыз, ал егер ол келсе, негізгі жүйеде ОЖ нұсқасын жаңартамыз. нұсқасы).

CentOS үшін бұл процесс зиянсыз болып көрінеді:

# yum clean all
# yum update -y

Ubuntu және Debian үшін зияны кем емес:

# apt-get update
# apt-get upgrade

қадам 2

Орнату CTID, VZ_NODE и VM утилита rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Біз ол жерде де, ол жақта да басқа ештеңе орнатпаймыз.

қадам 3

Біз тоқтаймыз CTID туралы VZ_NODE командасы

vzctl stop CTID

Кескінді орнату CTID:

vzctl mount CTID

/vz/root/ қалтасына өтіңізCTID және орындау

mount --bind /dev dev && mount --bind /sys sys && mount --bind /proc proc && chroot .

Түбір астында /root/exclude.txt файлын жасаңыз - ол жаңа серверге кірмейтін ерекше жағдайлардың тізімін қамтиды.

/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-ens3

Қосылу KVM_NODE және біздің VMол жұмыс істейді және желі арқылы қол жетімді болады.

Қазір барлығы трансферге дайын. Бар!

қадам 4

Әлі де сиқырдың астында, біз орындаймыз

rsync --exclude-from="/root/exclude.txt" --numeric-ids -avpogtStlHz --progress -e "ssh -T -o Compression=no -x" / root@KVM_NODE:/

Rsync пәрмені тасымалдауды орындайды, кілттер анық деп үміттенеміз - тасымалдау символдық сілтемелерді, қол жеткізу құқықтарын, иелер мен топтарды сақтай отырып жүзеге асырылады, ал шифрлау жоғарырақ жылдамдық үшін өшірілген (біраз жылдамырақ шифрды қолдануға болады, бірақ бұл тапсырма үшін соншалықты маңызды емес) , сондай-ақ қысу өшірілген.

Rsync аяқталғаннан кейін chroot жүйесінен шығыңыз (ctrl+d пернелерін басу арқылы) және орындаңыз

umount dev && umount proc && umount sys && cd .. && vzctl umount CTID

қадам 5

OpenVZ жүйесінен тасымалдағаннан кейін VM іске қосуға көмектесетін бірнеше қадамдарды орындайық.
бар серверлерде Systemd кәдімгі консольге кіруге көмектесетін пәрменді орындайық, мысалы, VNC серверінің экраны арқылы

mv /etc/systemd/system/getty.target.wants/[email protected] /etc/systemd/system/getty.target.wants/[email protected]

Серверлерде CentOS 6 и CentOS 7 Жаңа ядроны орнатуды ұмытпаңыз:

yum install kernel-$(uname -r)

Серверді одан жүктеуге болады, бірақ тасымалдаудан кейін ол жұмысын тоқтатуы немесе жойылуы мүмкін.

Серверде CentOS 7 PolkitD үшін шағын түзетуді қолдануыңыз керек, әйтпесе сервер мәңгілікке бұзылады:

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; }

Барлық серверлерде, егер Apache үшін mod_fcgid орнатылған болса, біз құқықтармен шағын түзетуді орындаймыз, әйтпесе mod_fcgid пайдаланатын сайттар 500 қатемен бұзылады:

chmod +s `which suexec` && apachectl restart

Соңғысы Ubuntu және Debian дистрибутивтері үшін пайдалы. Бұл ОЖ қателікпен мәңгілік жүктеуге түсіп қалуы мүмкін

тым жылдам цикл. орындауды аздап азайтады

жағымсыз, бірақ ОЖ нұсқасына байланысты оңай түзетіледі.

туралы Debian 9 түзету келесідей көрінеді:

орындаймыз

dbus-uuidgen

қате алсақ

/usr/local/lib/libdbus-1.so.3: `LIBDBUS_PRIVATE_1.10.8′ нұсқасы табылмады

LIBDBUS бар-жоғын тексеріңіз

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 іске қосу үшін жетіспейтін хабарлар автобусын қалпына келтірдік және OpenVZ-тен келген және көптеген ядро ​​модульдерін жүктеуге кедергі келтіретін modules_dep файлын жойдық.

қадам 6

Біз VM-ді қайта жүктейміз, VNC-де жүктеудің қалай жүріп жатқанын тексереміз және ең дұрысы, бәрі қиындықсыз жүктеледі. Көшіруден кейін кейбір нақты мәселелердің пайда болуы мүмкін болса да, олар осы мақаланың аясынан тыс және пайда болған кезде түзетілетін болады.

Бұл ақпарат пайдалы деп үміттенемін! 🙂

Ақпарат көзі: www.habr.com

пікір қалдыру