OpenVZ 6 контейнерийг толгой өвдөхгүйгээр KVM сервер рүү хэрхэн шилжүүлэх вэ

Амьдралдаа дор хаяж нэг удаа OpenVZ контейнерийг бүрэн KVM виртуалчлалтай сервер рүү шилжүүлэх шаардлагатай болсон хүн бүр зарим асуудалтай тулгарсан:

  • Ихэнх мэдээлэл нь зүгээр л хуучирсан бөгөөд EOL мөчлөгийг давсан үйлдлийн системүүдэд хамааралтай байсан
  • Янз бүрийн үйлдлийн системүүдэд өөр өөр мэдээллийг үргэлж өгдөг бөгөөд шилжих явцад гарч болзошгүй алдааг хэзээ ч тооцдоггүй
  • Заримдаа та шилжилтийн дараа ажиллахыг хүсэхгүй байгаа тохиргоотой тулгардаг

Та 1 сервер шилжүүлэхдээ ямар нэг зүйлийг шууд засах боломжтой, гэхдээ бүхэл бүтэн кластер шилжүүлэх үед?

Энэ нийтлэлд би OpenVZ контейнерийг KVM руу хэрхэн зөв шилжүүлэх, хамгийн бага сул зогсолт, бүх асуудлыг хурдан шийдвэрлэх талаар танд хэлэхийг хичээх болно.

Жижиг боловсролын хөтөлбөр: OpenVZ гэж юу вэ, KVM гэж юу вэ?

Бид нэр томъёонд гүнзгий орохгүй, гэхдээ ерөнхийд нь хэлэх болно:

OpenVZ — үйлдлийн системийн түвшинд виртуалчлал, та үүнийг богино долгионы зууханд ч ашиглаж болно, учир нь хост машин дээр CPU заавар, виртуалчлалын технологи шаардлагагүй болно.

KVM - CPU-ийн бүх хүчийг ашиглан, ямар ч аргаар виртуалчлах, урт болон хөндлөн огтлох боломжтой бүрэн виртуалчлал.

Хостинг үйлчилгээ үзүүлэгчдийн дунд OpenVZ хэт их борлогдох болно гэсэн түгээмэл итгэл үнэмшлийн эсрэгээр KVM тийм биш - аз болоход KVM одоо ахаасаа илүү зарагдсан байна.

Бид юу авчрах вэ?

Шилжүүлгийн туршилтын субъектуудын хувьд бид OpenVZ дээр байдаг CentOS (6 ба 7 хувилбарууд), Ubuntu (14, 16 ба 18 LTS), Debian 7 дээр байдаг үйлдлийн системийг бүхэлд нь ашиглах шаардлагатай болсон.

Ихэнх OpenVZ контейнерууд аль хэдийн ямар нэгэн LAMP ажиллаж байсан, зарим нь бүр маш тодорхой програм хангамжтай байсан гэж таамаглаж байсан. Ихэнхдээ эдгээр нь ISPmanager, VestaCP хяналтын самбар бүхий тохиргоонууд байсан (мөн ихэнхдээ олон жилийн турш шинэчлэгдээгүй). Тэдний шилжүүлгийн хүсэлтийг мөн харгалзан үзэх ёстой.

Шилжилт нь шилжүүлсэн контейнерийн IP хаягийг хадгалахын зэрэгцээ хийгддэг бөгөөд бид уг контейнерийн IP хаягийг VM дээр хадгалсан бөгөөд асуудалгүй ажиллах болно гэж бид таамаглах болно.

Шилжүүлэхээсээ өмнө гарт бүх зүйл байгаа эсэхийг шалгацгаая:

  • OpenVZ сервер, хост машинд бүрэн root хандалт, контейнеруудыг зогсоох/холбох/эхлүүлэх/устгах чадвар
  • KVM сервер, хост машинд бүрэн root хандалт, үүнд хамаарах бүх зүйл. Бүх зүйл аль хэдийн тохируулагдсан, ажиллахад бэлэн болсон гэж үздэг.

Шилжүүлэлтийг эхлүүлье

Шилжүүлгийг эхлүүлэхийн өмнө төөрөгдлөөс зайлсхийхэд туслах нэр томъёог тодорхойлъё:

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

Дебиан, Убунту:

# 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-г эхлүүлэхэд туслах хэд хэдэн алхмуудыг хийцгээе.
-тэй серверүүд дээр Системд Жишээ нь 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' хувилбар олдсонгүй

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-г ажиллуулахад байхгүй байсан messagebus-ыг сэргээж, OpenVZ-ээс ирсэн modules_dep-ийг устгасан бөгөөд олон цөмийн модулийг ачаалахад саад болсон.

6 алхам

Бид VM-г дахин ачаалж, VNC-ээр ачаалах явц хэрхэн явагдаж байгааг шалгаж, бүх зүйл асуудалгүй ачаалагдах болно. Шилжүүлгийн дараа зарим тодорхой асуудлууд гарч ирэх боломжтой ч энэ өгүүллийн хамрах хүрээнээс хэтэрсэн тул үүссэн тохиолдолд засч залруулах болно.

Энэ мэдээлэл хэрэг болно гэж найдаж байна! 🙂

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх