OpenVZ 6 konteynerini baş ağrısı olmadan KVM serverinə necə köçürmək olar

Həyatında ən azı bir dəfə OpenVZ konteynerini tam KVM virtualizasiyası olan serverə köçürməyə ehtiyacı olan hər kəs bəzi problemlərlə qarşılaşıb:

  • Məlumatların əksəriyyəti sadəcə köhnəlmişdir və EOL dövründən çoxdan keçmiş ƏS-lər üçün aktual idi
  • Fərqli əməliyyat sistemləri üçün həmişə müxtəlif məlumatlar verilir və miqrasiya zamanı mümkün səhvlər heç vaxt nəzərə alınmır
  • Bəzən miqrasiyadan sonra hərdən işləmək istəməyən konfiqurasiyalarla məşğul olmalısınız

1 server köçürdükdə, siz həmişə nəyisə tez bir zamanda düzəldə bilərsiniz, lakin bütün klasteri köçürəndə?

Bu yazıda sizə OpenVZ konteynerini minimal fasilələrlə və bütün problemlərin tez həlli ilə KVM-ə necə düzgün köçürəcəyinizi izah etməyə çalışacağam.

Kiçik bir təhsil proqramı: OpenVZ nədir və KVM nədir?

Terminologiyaya dərindən girməyəcəyik, lakin ümumi şəkildə deyəcəyik:

OpenVZ — əməliyyat sistemi səviyyəsində virtuallaşdırma, hətta onu mikrodalğalı sobada da yerləşdirə bilərsiniz, çünki ana maşında CPU təlimatlarına və virtuallaşdırma texnologiyalarına ehtiyac yoxdur.

KVM - tam hüquqlu virtuallaşdırma, CPU-nun bütün gücündən istifadə edərək və istənilən şəkildə hər şeyi virtuallaşdıra, onu uzununa və çarpaz kəsməyə qadirdir.

Hostinq provayderləri arasında OpenVZ-nin həddən artıq satılacağına dair yayılmış inancın əksinə olaraq, KVM satılmayacaq - xoşbəxtlikdən ikinci üçün KVM indi qardaşından heç də pis satılmır.

Nə daşıyacağıq?

Köçürmə üçün test subyektləri olaraq biz OpenVZ-də mövcud olan əməliyyat sistemlərinin bütün meşəsindən istifadə etməli olduq: CentOS (6 və 7 versiyalar), Ubuntu (14, 16 və 18 LTS), Debian 7.

Güman edilirdi ki, OpenVZ konteynerlərinin əksəriyyəti artıq bir növ LAMP işlədir və bəzilərində hətta çox xüsusi proqramlar var. Çox vaxt bunlar ISPmanager, VestaCP idarəetmə paneli ilə konfiqurasiyalar idi (və çox vaxt illərdir yenilənmir). Onların köçürmə tələbləri də nəzərə alınmalıdır.

Miqrasiya köçürülmüş konteynerin IP ünvanını qoruyarkən həyata keçirilir; konteynerin malik olduğu IP-nin VM-də saxlandığını və problemsiz işləyəcəyini güman edəcəyik.

Köçürməzdən əvvəl hər şeyin əlimizdə olduğuna əmin olaq:

  • OpenVZ server, ana maşına tam kök girişi, konteynerləri dayandırmaq/montaj etmək/başlamaq/silmək imkanı
  • KVM serveri, bütün nəzərdə tutduqları ilə ana maşına tam kök girişi. Hər şeyin artıq konfiqurasiya edildiyi və getməyə hazır olduğu güman edilir.

Köçürməyə başlayaq

Transferə başlamazdan əvvəl çaşqınlığın qarşısını almağa kömək edəcək şərtləri müəyyən edək:

KVM_NODE - KVM host maşını
VZ_NODE - OpenVZ host maşını
CTID - OpenVZ konteyneri
VM - KVM virtual server

Miqrasiyaya hazırlıq və virtual maşınların yaradılması.

1 addım

Konteyneri bir yerə köçürməli olduğumuz üçün yaradacağıq VM oxşar konfiqurasiya ilə KVM_NODE.
Mühüm! Hazırda CTID-də işləyən əməliyyat sistemində VM yaratmalısınız. Məsələn, Ubuntu 14 CTID-də quraşdırılıbsa, Ubuntu 14 VM-də quraşdırılmalıdır. Kiçik versiyalar vacib deyil və onların uyğunsuzluğu o qədər də kritik deyil, lakin əsas versiyalar eyni olmalıdır.

VM-ni yaratdıqdan sonra biz CTID-də və VM-də paketləri yeniləyəcəyik (ƏS-nin yenilənməsi ilə səhv salmayın - biz onu yeniləmirik, biz yalnız paketləri və əgər o, gələrsə, əsas daxilində ƏS versiyasını yeniləyirik. versiya).

CentOS üçün bu proses zərərsiz görünür:

# yum clean all
# yum update -y

Ubuntu və Debian üçün daha az zərərsiz deyil:

# apt-get update
# apt-get upgrade

2 addım

Quraşdırın CTID, VZ_NODE и VM kommunal rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Biz orda və ya orada başqa heç nə quraşdırmırıq.

3 addım

Biz dayanırıq CTID haqqında VZ_NODE komanda

vzctl stop CTID

Şəklin quraşdırılması CTID:

vzctl mount CTID

/vz/root/ qovluğuna keçinCTID və icra edin

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

Kök altında /root/exclude.txt faylı yaradın - bu, yeni serverə daxil olmayacaq istisnaların siyahısını ehtiva edəcək.

/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

-a qoşulun KVM_NODE və işə salın VMbelə ki, o, işləyir və şəbəkə üzərindən əlçatan olsun.

İndi hər şey transfer üçün hazırdır. Get!

4 addım

Hələ sehr altında, biz çıxış edirik

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

Rsync əmri köçürməni həyata keçirəcək, ümid edirik ki, açarlar aydındır - ötürmə simvolik bağlantıların, giriş hüquqlarının, sahiblərin və qrupların qorunması ilə həyata keçirilir və şifrələmə daha yüksək sürət üçün söndürülür (bir az daha sürətli şifrə istifadə edə bilərsiniz, lakin bu, bu vəzifə üçün o qədər də vacib deyil) , həmçinin sıxılma əlildir.

Rsync tamamladıqdan sonra chroot-dan çıxın (ctrl+d düymələrini basaraq) və icra edin

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

5 addım

OpenVZ-dən köçürdükdən sonra VM-ni işə salmağa kömək edəcək bir neçə addımı yerinə yetirək.
ilə serverlərdə Systemd məsələn, VNC server ekranı vasitəsilə adi konsola daxil olmağımıza kömək edəcək əmri yerinə yetirək

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

Serverlərdə CentOS 6 и CentOS 7 Təzə kernel quraşdırdığınızdan əmin olun:

yum install kernel-$(uname -r)

Server ondan yüklənə bilər, lakin ötürüldükdən sonra işləməyi dayandıra və ya silinə bilər.

Serverdə CentOS 7 PolkitD üçün kiçik bir düzəliş tətbiq etməlisiniz, əks halda server həmişəlik çökəcək:

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

Bütün serverlərdə, əgər Apache üçün mod_fcgid quraşdırılıbsa, biz hüquqlarla kiçik bir düzəliş həyata keçirəcəyik, əks halda mod_fcgid istifadə edən saytlar 500 xətası ilə çökəcək:

chmod +s `which suexec` && apachectl restart

Və sonuncu şey Ubuntu və Debian paylamaları üçün faydalıdır. Bu əməliyyat sistemi xəta ilə əbədi açılışa düşə bilər

çox sürətli dönmə. icranı bir az tənzimləyir

xoşagəlməz, lakin OS versiyasından asılı olaraq asanlıqla düzəldilir.

Haqqında Debian 9 düzəliş belə görünür:

həyata keçiririk

dbus-uuidgen

xəta alsaq

/usr/local/lib/libdbus-1.so.3: `LIBDBUS_PRIVATE_1.10.8` versiyası tapılmadı

LİBDBUS-un mövcudluğunu yoxlayın

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

hər şey qaydasındadırsa, biz bunu edirik

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

Əgər kömək etmirsə, ikinci variantı sınayın.

Problemin ikinci həlli ilə icranı bir az tənzimləyir Demək olar ki, bütün Ubuntu və Debian paylamaları üçün uyğundur.

Həyata keçiririk

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

Və üçün Ubuntu 14, Debian 7 Əlavə olaraq həyata keçiririk:

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

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

Biz nə etmişik? Debian/Ubuntu-nu işə salmaq üçün çatışmayan mesaj avtobusunu bərpa etdik və OpenVZ-dən gələn və bir çox nüvə modullarının yüklənməsinə mane olan modules_dep-i çıxardıq.

6 addım

VM-ni yenidən işə salırıq, VNC-də yükləmənin necə getdiyini yoxlayırıq və ideal olaraq hər şey problemsiz yüklənəcək. Miqrasiyadan sonra bəzi spesifik problemlərin ortaya çıxması mümkün olsa da, onlar bu məqalənin əhatə dairəsi xaricindədir və yarandıqca düzəldiləcəkdir.

Ümid edirəm bu məlumat faydalıdır! 🙂

Mənbə: www.habr.com

Добавить комментарий