OpenVZ 6 konteynerini baş ağrısı olmadan KVM sunucusuna nasıl aktarabilirim?

Hayatında en az bir kez bir OpenVZ konteynerini tam KVM sanallaştırmasına sahip bir sunucuya aktarma ihtiyacı duyan herkes bazı sorunlarla karşılaştı:

  • Bilgilerin çoğu güncelliğini kaybetmiş durumda ve EOL döngüsünü uzun süre geçmiş işletim sistemleriyle ilgiliydi
  • Farklı işletim sistemleri için her zaman farklı bilgiler sağlanır ve geçiş sırasındaki olası hatalar hiçbir zaman dikkate alınmaz
  • Bazen geçişten sonra ara sıra çalışmak istemeyen yapılandırmalarla uğraşmak zorunda kalırsınız

1 sunucuyu aktardığınızda, her zaman bir şeyleri anında düzeltebilirsiniz, ancak bir kümenin tamamını aktardığınızda?

Bu yazıda size bir OpenVZ konteynerini minimum kesinti süresiyle ve tüm sorunlara hızlı bir çözümle KVM'ye doğru şekilde nasıl taşıyacağınızı anlatmaya çalışacağım.

Küçük bir eğitim programı: OpenVZ nedir ve KVM nedir?

Terminolojinin derinliklerine inmeyeceğiz, ancak genel anlamda şunu söyleyeceğiz:

OpenVZ — işletim sistemi düzeyinde sanallaştırma, ana makinede CPU talimatlarına ve sanallaştırma teknolojilerine gerek olmadığından onu mikrodalgada bile dağıtabilirsiniz.

KVM - CPU'nun tüm gücünü kullanan ve her şeyi, herhangi bir şekilde, uzunlamasına ve çapraz olarak keserek sanallaştırma yeteneğine sahip tam teşekküllü sanallaştırma.

Yaygın inanışın aksine, çevrede barındırma sağlayıcıları OpenVZ aşırı satılıyor, ancak KVM öyle değil. Neyse ki, KVM de tıpkı kardeşi gibi artık aşırı satılıyor.

Neyi taşıyacağız?

В качестве подопытных для переноса пришлось использовать весь лес операционных систем, которые доступны на OpenVZ: CentOS (6 и 7 версии), Ubuntu (14, 16 и 18 LTS), Debian 7.

OpenVZ konteynerlerinin çoğunun zaten bir tür LAMP çalıştırdığı ve hatta bazılarının çok özel bir yazılıma sahip olduğu varsayıldı. Çoğu zaman bunlar ISPmanager ve VestaCP kontrol paneliyle yapılan yapılandırmalardı (ve çoğu zaman yıllardır güncellenmedi). Transfer taleplerinin de dikkate alınması gerekiyor.

Göç, koruma gözetilerek gerçekleştirilir. IP adresleri Taşınabilir bir konteyner için, konteynerin IP adresinin sanal makinede saklanacağını ve sorunsuz çalışacağını varsayacağız.

Aktarmadan önce her şeyin elimizde olduğundan emin olalım:

  • OpenVZ sunucusu, ana makineye tam kök erişimi, konteynerleri durdurma/bağlama/başlatma/silme yeteneği
  • KVM sunucusu, ima ettiği her şeyle birlikte ana makineye tam kök erişimi. Her şeyin zaten yapılandırılmış ve kullanıma hazır olduğu varsayılmaktadır.

Aktarmaya başlayalım

Aktarmaya başlamadan önce kafa karışıklığını önlemenize yardımcı olacak terimleri tanımlayalım:

KVM_NODE - KVM ana makine
VZ_NODE - OpenVZ ana makine
CTID - OpenVZ konteyneri
VM - KVM sanal sunucusu

Geçişe hazırlanma ve sanal makineler oluşturma.

1 Adım

Konteyneri bir yere taşımamız gerektiğinden, şunu yaratacağız: VM benzer bir konfigürasyona sahip KVM_NODE.
Önemli! Создавать VM нужно именно на той операционной системе, которая сейчас крутится на CTID. Например, если на CTID установлена Ubuntu 14, то и на VM нужно ставить Ubuntu 14. Минорные версии не важны и их несовпадение не столь критично, а вот мажорные — должны быть одинаковыми.

VM'yi oluşturduktan sonra CTID ve VM üzerindeki paketleri güncelleyeceğiz (işletim sistemini güncellemekle karıştırılmamalıdır - güncellemiyoruz, yalnızca paketleri güncelliyoruz ve eğer gelirse ana sürümdeki işletim sistemi sürümünü güncelliyoruz) versiyonu).

için CentOS этот процесс выглядит безобидно:

# yum clean all
# yum update -y

И не менее безобидно для Ubuntu, Debian:

# apt-get update
# apt-get upgrade

2 Adım

Kurulum tarihi CTID, VZ_NODE и VM yarar rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Ne oraya ne de oraya başka bir şey kurmuyoruz.

3 Adım

Duruyoruz CTID üzerinde VZ_NODE takım

vzctl stop CTID

Görüntüyü monte etme CTID:

vzctl mount CTID

/vz/root/ klasörüne gidinCTID ve yürüt

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

Kök altında bir /root/exclude.txt dosyası oluşturun - bu dosya, yeni sunucuya ulaşmayacak istisnaların bir listesini içerecektir

/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

Bağlanmak KVM_NODE ve lansmanımızı başlatıyoruz VMböylece çalışır ve ağ üzerinden erişilebilir olur.

Artık transfer için her şey hazır. Gitmek!

4 Adım

Hala büyünün altındayız, performans sergiliyoruz

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

Aktarımı rsync komutu gerçekleştirecektir, anahtarların açık olduğunu umuyoruz - aktarım sembolik bağlantıların, erişim haklarının, sahiplerin ve grupların korunmasıyla gerçekleştirilir ve daha yüksek hız için şifreleme devre dışı bırakılır (bazı daha hızlı şifreler kullanabilirsiniz, ancak bu, bu görev için o kadar önemli değil) ve ayrıca sıkıştırma devre dışı bırakılır.

Rsync'i tamamladıktan sonra chroot'tan çıkın (ctrl+d tuşlarına basarak) ve çalıştırın

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

5 Adım

OpenVZ'den aktardıktan sonra VM'yi başlatmamıza yardımcı olacak birkaç adımı gerçekleştirelim.
olan sunucularda systemd örneğin bir VNC sunucu ekranı aracılığıyla normal bir konsolda oturum açmamıza yardımcı olacak bir komutu çalıştıralım

mv /etc/systemd/system/getty.target.wants/getty@tty2.service /etc/systemd/system/getty.target.wants/getty@tty1.service

Sunucularda CentOS 6 и CentOS 7 Yeni bir çekirdek yüklediğinizden emin olun:

yum install kernel-$(uname -r)

Sunucu buradan yüklenebilir, ancak aktarımdan sonra çalışmayı durdurabilir veya silinebilir.

sunucuda CentOS 7 PolkitD için küçük bir düzeltme uygulamanız gerekiyor, aksi takdirde sunucu sonsuza kadar çökecektir:

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

Tüm sunucularda, Apache için mod_fcgid yüklüyse, haklarla birlikte küçük bir düzeltme gerçekleştireceğiz, aksi takdirde mod_fcgid kullanan siteler 500 hatasıyla çökecektir:

chmod +s `which suexec` && apachectl restart

И последнее, пригодится для Ubuntu, Debian дистрибутивов. Эта ОС может упасть в вечный бут с ошибкой

çok hızlı dönüyor. infazı biraz yavaşlatmak

hoş olmayan ancak işletim sistemi sürümüne bağlı olarak kolayca düzeltilebilen bir sorundur.

Üzerinde Debian 9 düzeltme şuna benzer:

biz yürütürüz

dbus-uuidgen

eğer bir hata alırsak

/usr/local/lib/libdbus-1.so.3: 'LIBDBUS_PRIVATE_1.10.8' sürümü bulunamadı

LIBDBUS'un varlığını kontrol edin

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

her şey yolundaysa yaparız

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

Eğer işe yaramazsa ikinci seçeneği deneyin.

Sorunun ikinci çözümü infazı biraz yavaşlatmak подходит практически для всех Ubuntu и Debian дистрибутивов.

Gerçekleştiriyoruz

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

Ve için Ubuntu 14, Debian 7 Ek olarak şunları gerçekleştiriyoruz:

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 Adım

VM'yi yeniden başlatıyoruz, VNC'de yüklemenin nasıl ilerlediğini kontrol ediyoruz ve ideal olarak her şey sorunsuz yüklenecek. Geçiş sonrasında bazı spesifik sorunların ortaya çıkması mümkün olsa da bunlar bu makalenin kapsamı dışındadır ve ortaya çıktıkça düzeltilecektir.

Umarım bu bilgi faydalıdır! 🙂

Kaynak: habr.com

DDoS korumalı siteler, VPS VDS sunucuları için güvenilir hosting satın alın 🔥 DDoS korumalı, güvenilir VPS ve VDS sunucu barındırma hizmeti satın alın | ProHoster