Амьдралдаа дор хаяж нэг удаа 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 хаяг нь виртуал машин дээр хадгалагдсан бөгөөд асуудалгүй ажиллана гэж бид үзнэ.
Шилжүүлэхээсээ өмнө гарт бүх зүйл байгаа эсэхийг шалгацгаая:
- OpenVZ сервер, хост машинд бүрэн root хандалт, контейнеруудыг зогсоох/холбох/эхлүүлэх/устгах чадвар
- KVM сервер, хост машинд бүрэн root хандалт, үүнд хамаарах бүх зүйл. Бүх зүйл аль хэдийн тохируулагдсан, ажиллахад бэлэн болсон гэж үздэг.
Шилжүүлэлтийг эхлүүлье
Шилжүүлгийг эхлүүлэхийн өмнө төөрөгдлөөс зайлсхийхэд туслах нэр томъёог тодорхойлъё:
KVM_NODE - KVM хост машин
VZ_NODE - OpenVZ хост машин
CTID - OpenVZ контейнер
VM - KVM виртуал сервер
Шилжин суурьшихад бэлтгэж, виртуал машин үүсгэж байна.
1 алхам
Бид савыг хаа нэг газар зөөх шаардлагатай байгаа тул бид үүсгэх болно VM -тэй төстэй тохиргоотой KVM_NODE.
Чухал! Создавать VM нужно именно на той операционной системе, которая сейчас крутится на CTID. Например, если на CTID установлена Ubuntu 14, то и на VM нужно ставить Ubuntu 14. Минорные версии не важны и их несовпадение не столь критично, а вот мажорные — должны быть одинаковыми.
VM-г үүсгэсний дараа бид CTID болон VM дээрх багцуудыг шинэчлэх болно (OS-ийг шинэчлэхтэй андуурч болохгүй - бид үүнийг шинэчлэхгүй, бид зөвхөн багцуудыг шинэчилдэг бөгөөд хэрэв ирвэл үндсэн үйлдлийн систем дэх үйлдлийн системийн хувилбарыг шинэчилнэ. хувилбар).
Хэрэгтэй CentOS этот процесс выглядит безобидно:
# yum clean all
# yum update -yИ не менее безобидно для Ubuntu, Debian:
# apt-get update
# apt-get upgrade2 алхам
Суулгах CTID, VZ_NODE и VM ашиглалтын rsync:
CentOS:
# yum install rsync -yDebian, 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 CTID5 алхам
OpenVZ-ээс шилжүүлсний дараа VM-г эхлүүлэхэд туслах хэд хэдэн алхмуудыг хийцгээе.
-тэй серверүүд дээр Системд Жишээ нь VNC серверийн дэлгэцээр дамжуулан ердийн консол руу нэвтрэхэд туслах командыг ажиллуулцгаая.
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 та 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 Что мы сделали? Восстановили messagebus, которого не хватало для запуска Debian/Ubuntu и удалили modules_dep, который пришел от OpenVZ и мешал загрузки многих модулей ядра.
6 алхам
Бид VM-г дахин ачаалж, VNC-ээр ачаалах явц хэрхэн явагдаж байгааг шалгаж, бүх зүйл асуудалгүй ачаалагдах болно. Шилжүүлгийн дараа зарим тодорхой асуудлууд гарч ирэх боломжтой ч энэ өгүүллийн хамрах хүрээнээс хэтэрсэн тул үүссэн тохиолдолд засч залруулах болно.
Энэ мэдээлэл хэрэг болно гэж найдаж байна! 🙂
Эх сурвалж: www.habr.com
