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.
Geniş yayılmış inancın əksinə olaraq, ətraf mühitdə hosting provayderləri OpenVZ həddindən artıq satılıb, amma KVM yox. Xoşbəxtlikdən, sonuncu üçün KVM indi qardaşı kimi həddindən artıq satılıb.
Nə daşıyacağıq?
OpenVZ-də mövcud olan bütün əməliyyat sistemləri meşəsi köçürmə üçün sınaq mövzusu kimi istifadə edilməli idi: 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 qorunma ilə həyata keçirilir IP ünvanları Portativ konteyner üçün, konteynerin IP ünvanının VM-də saxlanıldığını və problemsiz işləyəcəyini fərz 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 eyni əməliyyat sistemində VM yaratmalısınız. Məsələn, əgər CTID işləyirsə Ubuntu 14, onda onu VM-ə də quraşdırmalısınız Ubuntu 14. Kiçik versiyalar vacib deyil və onların uyğunsuzluğu o qədər də vacib 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).
Uğrunda CentOS Bu prosedur zərərsiz görünür:
# yum clean all
# yum update -yVə heç də az zərərsiz deyil Ubuntu, Debian:
# apt-get update
# apt-get upgrade2 addım
Quraşdırın CTID, VZ_NODE и VM kommunal rsync:
CentOS:
# yum install rsync -yDebian, Ubuntu:
# apt-get install rsync -yBiz 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 CTID5 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/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.serviceServerlə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 restartVə nəhayət, bu, sizin üçün faydalı olacaq Ubuntu, Debian paylanmalar. Bu ƏS xəta ilə daimi yükləməyə 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-uuidgenxə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.16hə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, hər kəs üçün uyğundur Ubuntu и Debian paylanmalar.
Həyata keçiririk
bash -x /var/lib/dpkg/info/dbus.postinst configureVə üçü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 Nə etdik? Başlanğıc üçün çatışmayan mesaj avtobusunu bərpa etdik. Debian/Ubuntu və OpenVZ-dən gələn və bir çox kernel modulunun yüklənməsinin qarşısını alan modules_dep funksiyasını sildi.
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
