Πώς να μεταφέρετε το κοντέινερ OpenVZ 6 στον διακομιστή KVM χωρίς πονοκεφάλους

Όποιος χρειάστηκε να μεταφέρει ένα κοντέινερ OpenVZ σε έναν διακομιστή με πλήρη εικονικοποίηση KVM τουλάχιστον μία φορά στη ζωή του, έχει αντιμετωπίσει ορισμένα προβλήματα:

  • Οι περισσότερες πληροφορίες είναι απλώς ξεπερασμένες και αφορούσαν λειτουργικά συστήματα που είχαν περάσει από καιρό τον κύκλο EOL
  • Διαφορετικές πληροφορίες παρέχονται πάντα για διαφορετικά λειτουργικά συστήματα και τα πιθανά σφάλματα κατά τη μετεγκατάσταση δεν λαμβάνονται ποτέ υπόψη
  • Μερικές φορές πρέπει να αντιμετωπίσετε διαμορφώσεις που κάθε τόσο δεν θέλουν να λειτουργούν μετά τη μετεγκατάσταση

Όταν μεταφέρετε 1 διακομιστή, μπορείτε πάντα να διορθώσετε κάτι εν κινήσει, αλλά όταν μεταφέρετε ένα ολόκληρο σύμπλεγμα;

Σε αυτό το άρθρο θα προσπαθήσω να σας πω πώς να μετεγκαταστήσετε σωστά ένα κοντέινερ OpenVZ στο KVM με ελάχιστο χρόνο διακοπής λειτουργίας και μια γρήγορη λύση σε όλα τα προβλήματα.

Ένα μικρό εκπαιδευτικό πρόγραμμα: τι είναι το OpenVZ και τι το KVM;

Δεν θα εμβαθύνουμε στην ορολογία, αλλά θα πούμε γενικά:

OpenVZ — εικονικοποίηση σε επίπεδο λειτουργικού συστήματος, μπορείτε να την αναπτύξετε ακόμη και σε φούρνο μικροκυμάτων, καθώς δεν χρειάζονται οδηγίες CPU και τεχνολογίες εικονικοποίησης στον κεντρικό υπολογιστή.

KVM - Πλήρης εικονικοποίηση, που χρησιμοποιεί όλη τη δύναμη της CPU και μπορεί να εικονικοποιήσει οτιδήποτε, με οποιονδήποτε τρόπο, κόβοντάς το κατά μήκος και σταυρωτά.

Σε αντίθεση με τη δημοφιλή πεποίθηση, στο περιβάλλον πάροχοι φιλοξενίας Το OpenVZ είναι υπερπωλημένο, αλλά το KVM όχι. Ευτυχώς για το τελευταίο, το KVM είναι πλέον υπερπωλημένο όσο και ο αδερφός του.

Τι θα μεταφέρουμε;

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

Θεωρήθηκε ότι τα περισσότερα από τα κοντέινερ OpenVZ εκτελούσαν ήδη κάποιο είδος LAMP και μερικά είχαν ακόμη και κάποιο πολύ συγκεκριμένο λογισμικό. Τις περισσότερες φορές, αυτές ήταν διαμορφώσεις με τον πίνακα ελέγχου ISPmanager, VestaCP (και τις περισσότερες φορές δεν ενημερώθηκαν για χρόνια). Πρέπει επίσης να ληφθούν υπόψη τα αιτήματα μεταφοράς τους.

Η μετανάστευση πραγματοποιείται με διατήρηση διευθύνσεις IP Για ένα φορητό κοντέινερ, θα υποθέσουμε ότι η διεύθυνση IP του κοντέινερ διατηρείται στην εικονική μηχανή και θα λειτουργεί χωρίς προβλήματα.

Πριν από τη μεταφορά, ας βεβαιωθούμε ότι έχουμε τα πάντα στη διάθεσή σας:

  • Διακομιστής OpenVZ, πλήρης πρόσβαση root στον κεντρικό υπολογιστή, δυνατότητα διακοπής/προσάρτησης/εκκίνησης/διαγραφής κοντέινερ
  • Διακομιστής KVM, πλήρης πρόσβαση root στον κεντρικό υπολογιστή, με ό,τι συνεπάγεται. Υποτίθεται ότι όλα είναι ήδη ρυθμισμένα και έτοιμα για χρήση.

Ας ξεκινήσουμε τη μεταφορά

Πριν ξεκινήσουμε τη μεταφορά, ας ορίσουμε όρους που θα σας βοηθήσουν να αποφύγετε τη σύγχυση:

KVM_NODE - Μηχάνημα υποδοχής KVM
VZ_NODE - Μηχανή υποδοχής OpenVZ
CTID - Δοχείο OpenVZ
VM - Εικονικός διακομιστής KVM

Προετοιμασία για μετανάστευση και δημιουργία εικονικών μηχανών.

Βήμα 1

Εφόσον πρέπει να μετακινήσουμε το κοντέινερ κάπου, θα δημιουργήσουμε VM με παρόμοια διαμόρφωση με KVM_NODE.
Σημαντικό! Создавать VM нужно именно на той операционной системе, которая сейчас крутится на CTID. Например, если на CTID установлена Ubuntu 14, то и на VM нужно ставить Ubuntu 14. Минорные версии не важны и их несовпадение не столь критично, а вот мажорные — должны быть одинаковыми.

Μετά τη δημιουργία του VM, θα ενημερώσουμε τα πακέτα στο CTID και στο VM (δεν πρέπει να συγχέεται με την ενημέρωση του λειτουργικού συστήματος - δεν το ενημερώνουμε, ενημερώνουμε μόνο τα πακέτα και, εάν φτάσει, την έκδοση του λειτουργικού συστήματος εντός του κύριου εκδοχή).

Για CentOS этот процесс выглядит безобидно:

# yum clean all
# yum update -y

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

# apt-get update
# apt-get upgrade

Βήμα 2

Εγκατάσταση σε CTID, VZ_NODE и VM χρησιμότητα rsync:

CentOS:

# yum install rsync -y

Debian, Ubuntu:

# apt-get install rsync -y

Δεν εγκαθιστούμε τίποτα άλλο ούτε εκεί ούτε εκεί.

Βήμα 3

Κάνουμε μια στάση CTID επί VZ_NODE ομάδα

vzctl stop CTID

Τοποθέτηση της εικόνας CTID:

vzctl mount CTID

Μεταβείτε στο φάκελο /vz/root/CTID και να εκτελέσει

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

Κάτω από τη ρίζα, δημιουργήστε ένα αρχείο /root/exclude.txt - θα περιέχει μια λίστα εξαιρέσεων που δεν θα μεταβούν στον νέο διακομιστή

/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

Σύνδεση με KVM_NODE και λανσάρουμε το δικό μας VMώστε να λειτουργεί και να είναι προσβάσιμο μέσω του δικτύου.

Τώρα όλα είναι έτοιμα για μεταγραφή. Πηγαίνω!

Βήμα 4

Ακόμα κάτω από το ξόρκι, παίζουμε

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

Η εντολή rsync θα εκτελέσει τη μεταφορά, ελπίζουμε ότι τα κλειδιά είναι καθαρά - η μεταφορά πραγματοποιείται με τη διατήρηση των συμβολικών συνδέσμων, των δικαιωμάτων πρόσβασης, των κατόχων και των ομάδων και η κρυπτογράφηση είναι απενεργοποιημένη για μεγαλύτερη ταχύτητα (μπορείτε να χρησιμοποιήσετε κάποιο πιο γρήγορο κρυπτογράφηση, αλλά αυτό δεν είναι τόσο σημαντικό για αυτήν την εργασία), καθώς και η συμπίεση είναι απενεργοποιημένη.

Μετά την ολοκλήρωση του rsync, βγείτε από το chroot (πατώντας ctrl+d) και εκτελέστε

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

Βήμα 5

Ας εκτελέσουμε πολλά βήματα που θα μας βοηθήσουν να εκκινήσουμε το VM μετά τη μεταφορά από το OpenVZ.
Σε διακομιστές με Σύστημα ας εκτελέσουμε μια εντολή που θα μας βοηθήσει να συνδεθούμε σε μια κανονική κονσόλα, για παράδειγμα, μέσω μιας οθόνης διακομιστή VNC

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

Σε διακομιστές CentOS 6 и CentOS 7 Φροντίστε να εγκαταστήσετε έναν νέο πυρήνα:

yum install kernel-$(uname -r)

Ο διακομιστής μπορεί να φορτωθεί από αυτόν, αλλά μετά τη μεταφορά μπορεί να σταματήσει να λειτουργεί ή να διαγραφεί.

Σε διακομιστή CentOS 7 πρέπει να εφαρμόσετε μια μικρή επιδιόρθωση για το PolkitD, διαφορετικά ο διακομιστής θα διακοπεί για πάντα:

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

Σε όλους τους διακομιστές, εάν έχει εγκατασταθεί το mod_fcgid για Apache, θα εκτελέσουμε μια μικρή επιδιόρθωση με δικαιώματα, διαφορετικά οι ιστότοποι που χρησιμοποιούν mod_fcgid θα διακοπούν με σφάλμα 500:

chmod +s `which suexec` && apachectl restart

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

βρόχο πολύ γρήγορα. λιγο επιβλητική εκτέλεση

δυσάρεστο, αλλά διορθώνεται εύκολα, ανάλογα με την έκδοση του λειτουργικού συστήματος.

Επί Debian 9 η επιδιόρθωση μοιάζει με αυτό:

πραγματοποιούμε

dbus-uuidgen

αν λάβουμε σφάλμα

/usr/local/lib/libdbus-1.so.3: η έκδοση `LIBDBUS_PRIVATE_1.10.8′ δεν βρέθηκε

ελέγξτε την παρουσία του LIBDBUS

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

αν όλα είναι εντάξει, το κάνουμε

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

Εάν δεν σας βοηθήσει, δοκιμάστε τη δεύτερη επιλογή.

Η δεύτερη λύση στο πρόβλημα με λιγο επιβλητική εκτέλεση подходит практически для всех Ubuntu и Debian дистрибутивов.

πραγματοποιούμε

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

Και για Ubuntu 14, Debian 7 Επιπλέον εκτελούμε:

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

Κάνουμε επανεκκίνηση του VM, ελέγχουμε στο VNC πώς εξελίσσεται η φόρτωση και, ιδανικά, όλα θα φορτωθούν χωρίς προβλήματα. Αν και είναι πιθανό να εμφανιστούν ορισμένα συγκεκριμένα προβλήματα μετά τη μετεγκατάσταση, αυτά δεν εμπίπτουν στο πεδίο εφαρμογής αυτού του άρθρου και θα διορθωθούν όταν προκύψουν.

Ελπίζω αυτές οι πληροφορίες να είναι χρήσιμες! 🙂

Πηγή: www.habr.com

Αγοράστε αξιόπιστη φιλοξενία για ιστότοπους με προστασία DDoS, διακομιστές VPS VDS 🔥 Αγοράστε αξιόπιστη φιλοξενία ιστοσελίδων με προστασία DDoS, διακομιστές VPS VDS | ProHoster