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.

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 -y

Və heç də az zərərsiz deyil Ubuntu, Debian:

# 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/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.service

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ə 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-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, hər kəs üçün uyğundur Ubuntu и Debian paylanmalar.

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 

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

DDoS mühafizəsi, VPS VDS serverləri olan saytlar üçün etibarlı hostinq alın 🔥 DDoS qorunması, VPS VDS serverləri ilə etibarlı veb sayt hostinqi alın | ProHoster