OpenVZ 6 контейнерин кантип баш оорутпай KVM серверине өткөрүү керек

Жашоосунда жок дегенде бир жолу OpenVZ контейнерин толук KVM виртуалдаштыруусу бар серверге өткөрүүгө муктаж болгон ар бир адам кээ бир көйгөйлөргө туш болгон:

  • Маалыматтын көбү жөн эле эскирип калган жана 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деги топтомдорду жаңыртабыз (OS жаңыртуу менен чаташтырбоо керек - биз аны жаңыртпайбыз, биз пакеттерди гана жаңыртабыз, ал эми ал келсе, ОС версиясын негизги программанын ичинде жаңыртабыз. версия).

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ал иштейт жана тармак аркылуу жеткиликтүү болушу үчүн.

Азыр баары которууга даяр. Go!

кадам 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 бөлүштүрүү үчүн пайдалуу. Бул ОС ката менен түбөлүк жүктөөгө дуушар болушу мүмкүн

өтө тез айлануу. аткарууну бир аз кыскартуу

жагымсыз, бирок OS версиясына жараша оңой чечилет.

боюнча Debian 9 оңдоо төмөнкүдөй көрүнөт:

аткарабыз

dbus-uuidgen

эгер биз ката алсак

/usr/local/lib/libdbus-1.so.3: версия `LIBDBUS_PRIVATE_1.10.8' табылган жок

LIBBUS бар экенин текшерүү

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 иштетүү үчүн жок болгон messagebus калыбына келтирдик жана OpenVZден келген modules_depди алып салдык жана көптөгөн ядро ​​модулдарын жүктөөгө тоскоол болдук.

кадам 6

Биз VMди кайра жүктөйбүз, VNCде жүктөө кандай жүрүп жатканын текшеребиз жана идеалдуу түрдө баары көйгөйсүз жүктөлөт. Миграциядан кийин кээ бир спецификалык көйгөйлөр пайда болушу мүмкүн болсо да, алар бул макаланын алкагына кирбейт жана пайда болгон сайын оңдолот.

Бул маалымат пайдалуу деп үмүттөнөм! 🙂

Source: www.habr.com

Комментарий кошуу