OpenVZ 6 konteynerini KVM serveriga bosh og'rig'isiz qanday o'tkazish mumkin

Hayotida kamida bir marta OpenVZ konteynerini to'liq KVM virtualizatsiyasiga ega serverga o'tkazish kerak bo'lgan har bir kishi ba'zi muammolarga duch keldi:

  • Ma'lumotlarning aksariyati shunchaki eskirgan va EOL siklidan uzoq vaqt o'tgan operatsion tizimlar uchun tegishli edi
  • Turli xil operatsion tizimlar uchun har doim turli xil ma'lumotlar taqdim etiladi va migratsiya paytida yuzaga kelishi mumkin bo'lgan xatolar hech qachon hisobga olinmaydi
  • Ba'zan siz har doim va keyin migratsiyadan keyin ishlashni xohlamaydigan konfiguratsiyalar bilan shug'ullanishingiz kerak

1 ta serverni uzatganingizda, siz har doim biror narsani tezda tuzatishingiz mumkin, lekin butun klasterni o'tkazganingizda?

Ushbu maqolada men sizga OpenVZ konteynerini minimal uzilishlar va barcha muammolarni tezda hal qilish bilan KVMga qanday qilib to'g'ri ko'chirishni aytib berishga harakat qilaman.

Kichik ta'lim dasturi: OpenVZ nima va KVM nima?

Biz terminologiyaga chuqur kirmaymiz, lekin umumiy ma'noda aytamiz:

OpenVZ β€” operatsion tizim darajasida virtualizatsiya, siz uni hatto mikroto'lqinli pechda ham o'rnatishingiz mumkin, chunki asosiy kompyuterda CPU ko'rsatmalari va virtualizatsiya texnologiyalariga ehtiyoj yo'q.

KVM - to'liq huquqli virtualizatsiya, protsessorning barcha kuchidan foydalangan holda va har qanday narsani virtualizatsiya qilish, uni uzunligi va ko'ndalang bo'ylab kesish.

OpenVZ xosting-provayderlari orasida haddan tashqari sotiladi, degan keng tarqalgan e'tiqoddan farqli o'laroq, KVM bo'lmaydi - baxtiga ikkinchisi uchun KVM endi o'z akasidan ko'ra ko'proq sotilgan.

Biz nimani olib ketamiz?

O'tkazish uchun sinov sub'ektlari sifatida biz OpenVZ-da mavjud bo'lgan operatsion tizimlarning butun o'rmonidan foydalanishimiz kerak edi: CentOS (6 va 7 versiyalar), Ubuntu (14, 16 va 18 LTS), Debian 7.

Taxminlarga ko'ra, OpenVZ konteynerlarining ko'pchiligi allaqachon qandaydir LAMP bilan ishlaydi, ba'zilarida esa o'ziga xos dasturiy ta'minot mavjud edi. Ko'pincha, bu ISPmanager, VestaCP boshqaruv paneli bilan konfiguratsiyalar edi (va ko'pincha yillar davomida yangilanmagan). Ularning transfer so'rovlari ham hisobga olinishi kerak.

Migratsiya o'tkazilgan konteynerning IP-manzilini saqlab qolgan holda amalga oshiriladi; biz konteynerda bo'lgan IP VMda saqlangan va muammosiz ishlaydi deb taxmin qilamiz.

O'tkazishdan oldin, bizda hamma narsa borligiga ishonch hosil qilaylik:

  • OpenVZ serveri, xost-mashinaga to'liq ildiz kirish, konteynerlarni to'xtatish/o'rnatish/boshlash/o'chirish qobiliyati
  • KVM serveri, xost-mashinaga to'liq ildiz kirish, u nazarda tutgan barcha narsalar bilan. Hamma narsa allaqachon sozlangan va ishlashga tayyor deb taxmin qilinadi.

Keling, uzatishni boshlaylik

O'tkazishni boshlashdan oldin, chalkashmaslikka yordam beradigan shartlarni aniqlaymiz:

KVM_NODE - KVM xost mashinasi
VZ_NODE - OpenVZ xost mashinasi
CTID - OpenVZ konteyneri
VM - KVM virtual serveri

Migratsiyaga tayyorgarlik va virtual mashinalarni yaratish.

1 bosqichma

Konteynerni biror joyga ko'chirishimiz kerakligi sababli, biz yaratamiz VM ga o'xshash konfiguratsiya bilan KVM_NODE.
Muhim! Hozirda CTID da ishlayotgan operatsion tizimda VM yaratishingiz kerak. Misol uchun, agar Ubuntu 14 CTID da o'rnatilgan bo'lsa, u holda Ubuntu 14 VM ga o'rnatilishi kerak.Kichik versiyalar muhim emas va ularning nomuvofiqligi unchalik muhim emas, lekin asosiy versiyalar bir xil bo'lishi kerak.

VM-ni yaratgandan so'ng, biz CTID va VM-dagi paketlarni yangilaymiz (OTni yangilash bilan adashtirmaslik kerak - biz uni yangilamaymiz, biz faqat paketlarni va agar u kelgan bo'lsa, OS versiyasini asosiy versiyada yangilaymiz. versiya).

CentOS uchun bu jarayon zararsiz ko'rinadi:

# yum clean all
# yum update -y

Ubuntu va Debian uchun ham zararsiz:

# apt-get update
# apt-get upgrade

2 bosqichma

O'rnatish CTID, VZ_NODE ΠΈ VM qulaylik rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Biz u erda ham, u erda ham boshqa hech narsa o'rnatmayapmiz.

3 bosqichma

Biz to'xtab qolamiz CTID haqida VZ_NODE jamoa

vzctl stop CTID

Tasvirni o'rnatish CTID:

vzctl mount CTID

/vz/root/ jildiga o'tingCTID va bajaring

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

Ildiz ostida /root/exclude.txt faylini yarating - u yangi serverga kirmaydigan istisnolar ro'yxatini o'z ichiga oladi.

/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

ga ulanamiz KVM_NODE va bizning VMShunday qilib, u ishlaydi va tarmoq orqali kirish mumkin.

Endi hammasi transferga tayyor. Bor!

4 bosqichma

Hali ham sehr ostida, biz ijro etamiz

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

Rsync buyrug'i uzatishni amalga oshiradi, umid qilamizki, kalitlar aniq - uzatish simli havolalar, kirish huquqlari, egalari va guruhlari saqlanishi bilan amalga oshiriladi va shifrlash yuqori tezlikda o'chirilgan (siz tezroq shifrdan foydalanishingiz mumkin, lekin bu vazifa uchun bu unchalik muhim emas) , shuningdek, siqish o'chirilgan.

Rsync-ni tugatgandan so'ng, chroot-dan chiqing (ctrl+d tugmalarini bosib) va bajaring

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

5 bosqichma

Keling, OpenVZ-dan o'tkazgandan so'ng VM-ni ishga tushirishga yordam beradigan bir necha qadamlarni bajaramiz.
bilan serverlarda Systemd Keling, oddiy konsolga kirishga yordam beradigan buyruqni bajaraylik, masalan, VNC server ekrani orqali

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

Serverlarda CentOS 6 ΠΈ CentOS 7 Yangi yadro o'rnatganingizga ishonch hosil qiling:

yum install kernel-$(uname -r)

Serverni undan yuklash mumkin, lekin uzatilgandan so'ng u ishlamay qolishi yoki o'chirilishi mumkin.

Serverda CentOS 7 PolkitD uchun kichik tuzatishni qo'llashingiz kerak, aks holda server abadiy ishdan chiqadi:

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

Barcha serverlarda, agar Apache uchun mod_fcgid o'rnatilgan bo'lsa, biz huquqlar bilan kichik tuzatishni amalga oshiramiz, aks holda mod_fcgid-dan foydalanadigan saytlar 500 xato bilan ishlamay qoladi:

chmod +s `which suexec` && apachectl restart

Va oxirgi narsa Ubuntu va Debian tarqatish uchun foydalidir. Ushbu OS xato bilan abadiy yuklashda qulashi mumkin

juda tez aylanish. ijroni biroz bostirish

yoqimsiz, lekin OS versiyasiga qarab osongina tuzatiladi.

ning Debian 9 tuzatish quyidagicha ko'rinadi:

amalga oshiramiz

dbus-uuidgen

agar biz xato qilsak

/usr/local/lib/libdbus-1.so.3: β€œLIBDBUS_PRIVATE_1.10.8” versiyasi topilmadi

LIBDBUS mavjudligini tekshiring

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

agar hamma narsa tartibda bo'lsa, biz buni qilamiz

cd /lib/x86_64-linux-gnu
rm -rf libdbus-1.so.3
ln -s libdbus-1.so.3.14.15  libdbus-1.so.3

Agar u yordam bermasa, ikkinchi variantni sinab ko'ring.

Muammoning ikkinchi yechimi ijroni biroz bo'g'ish Deyarli barcha Ubuntu va Debian distributivlari uchun javob beradi.

Biz bajaramiz

bash -x /var/lib/dpkg/info/dbus.postinst configure

Va uchun Ubuntu 14, Debian 7 Bundan tashqari, biz quyidagilarni bajaramiz:

adduser --system --home /nonexistent --no-create-home --disabled-password --group messagebus

rm -rf /etc/init.d/modules_dep.sh 

Biz nima qildik? Biz Debian/Ubuntu-ni ishga tushirish uchun etishmayotgan messagebus-ni tikladik va OpenVZ-dan kelgan modules_dep-ni olib tashladik va ko'plab yadro modullarini yuklashga xalaqit berdik.

6 bosqichma

Biz VMni qayta ishga tushiramiz, VNC-da yuklash qanday ketayotganini tekshiramiz va ideal holda hamma narsa muammosiz yuklanadi. Garchi migratsiyadan keyin ba'zi o'ziga xos muammolar paydo bo'lishi mumkin bo'lsa-da, ular ushbu maqola doirasidan tashqarida va yuzaga kelganda tuzatiladi.

Umid qilamanki, bu ma'lumot foydalidir! πŸ™‚

Manba: www.habr.com

a Izoh qo'shish