Wechsel von virtuellen Maschinen zu LXC-Containern: Gründe, Vorteile und gebrauchsfertige Anweisungen

Worüber wir sprechen werden:

- Warum haben wir uns für LXC-Container entschieden?
- Wie erstelle ich einen Container und führe darauf einen Bitrix-basierten Host aus?

Für wen wird es nützlich sein:

Für alle, die eine neue Lösung ausprobieren und dabei weniger Ressourcen verbrauchen möchten.

LXC-Vorteile gegenüber virtuellen Maschinen


Wir sind auf Container umgestiegen, als wir auf einen Mangel an Serverressourcen, die Schwierigkeit, Zugriffsrechte für verschiedene Projekte zu unterscheiden, und Softwarekonflikte in einer virtuellen Maschine gestoßen sind. Hier sind einige wichtige Vorteile von LXC gegenüber virtuellen Maschinen:

  1. Weniger Verlust an CPU-Leistung, Festplattenbetrieb und RAM. Fast alles, was im Container verfügbar ist, arbeitet mit Servergeschwindigkeit.
  2. Es ist nicht erforderlich, RAM für den Betriebssystemkern, den Videospeicher, die Festplattenpuffer usw. zuzuweisen.
  3. Schnellstart. Tatsächlich werden nur die Anwendungen gestartet, die für die Funktion des Containers erforderlich sind.
  4. Es unterstützt das Starten einzelner Anwendungen im Container und nicht des gesamten Systems. Es ist praktisch, dass Zugriffe einfach durch Hinzufügen eines Benutzers (anstelle von chroot) gewährt werden können, da sich nur ein Projekt im Container befindet (auf den virtuellen Maschinen befanden sich mehrere).
  5. Die Fähigkeit, die Ressourcen jedes Containers zu verwalten.
  6. Verschieben Sie Container schnell und einfach zwischen Servern.

Wir verwenden rsync. Erstellen Sie einfach einen gleichnamigen Container auf dem neuen Server und kopieren Sie:

rsync -alvz :/var/lib/lxd/container/test/ /var/lib/lxd/container/test/ 

Wir müssen den fünften Absatz näher erläutern und über das Ressourcenmanagement sprechen. Wir müssen dem Container genügend Ressourcen zur Verfügung stellen, um zu arbeiten, und gleichzeitig sicherstellen, dass der Container keine unnötigen Ressourcen verbraucht, wodurch die Arbeit des restlichen Systems beeinträchtigt wird.

Sie können die Statistiken zum Ressourcenverbrauch mit dem folgenden Befehl anzeigen: lxc info test

 Remote: unix:// : x86_64 : 2018/12/04 14:27 UTC Status: Running Type: persistent : default Pid: 28317 IPs: eth0: inet 172.27.2.204 vethF91F2U Resources: : 56 CPU usage:   ( ): 20583 Memory usage: Memory (current): 1.03GB Memory (peak): 3.11GB Network usage: eth0:  : 17.45GB  : 9.93GB 

Anhand dieser Statistiken können Sie mithilfe spezieller Befehle verfolgen, wie viele Ressourcen ein Container verbraucht, und bei Bedarf den Verbrauch begrenzen:

  • lxc config set test limit.memory 2048M # setze das Speicherlimit.
  • lxc config set test limit.cpu 1,2,3,8 # bindet den Container an die CPU-Kerne.
  • lxc config set test cpu.allowance 10% # CPU-Verbrauch begrenzen.
  • lxc config set test root size 50GB # begrenzt den vom Container verwendeten Speicherplatz (funktioniert nur mit ZFS oder btrfs).
  • lxc config get test limits.memory - Zeigt den eingestellten Grenzwert an

Infolgedessen können Sie mit Containern Dutzende von Containern auf einem Standard-Desktop abrufen und gleichzeitig eine ausreichende Leistung aufrechterhalten.

Wir konfigurieren den Server und übertragen den Standardhost mit Bitrix von der virtuellen Maschine in den Container


1. Server-Setup

1.1 Installieren Sie die neueste Version des Ubuntu 18.04-Servers auf dem Server. Es hat bereits LXD. LXD ist ein Add-On zu LXC, einem Hypervisor, der die Interaktion mit dem Containerisierungssystem vereinfacht.
1.2 apt Bridge-Utils installieren # Bridge-Utils installieren
1.3 lxd init # initialisiere lxd
1.4 lxc Profil bearbeiten Standard # Bearbeiten Sie die Profildatei:

 devices: eth0: name: eth0 nictype: bridged parent: br0 type: nic root: path: / pool: default type: disk name: default 

1,5 lxc Start Ubuntu: 04/18 Test # Erstellen Sie einen Container namens Test. Er wird das Bild herunterladen, erstellen und starten. Damit ist die Konfiguration und Erstellung des Containers abgeschlossen. Anschließend wird der Container konfiguriert und der Host auf ihn übertragen.

2. Konfiguration des Hostcontainers und Standortmigration

2.1 lxc exec test / bin / bash # Wechseln Sie zum erstellten Container.
2.2 add-apt-repository ppa: ondrej / php # Füge ein Repository hinzu.
2.3 apt update # Aktualisieren Sie das Repository.
2.4 apt installieren
php7.1 {fpm, bcmath, bz2, cli, common, curl, dev, verzaubern, fpm, gd, gmp, imap, intl, json,
ldap, mbstring, mcrypt, mysql, odbc, opcache, phpdbg, pspell, readline, recode, soap,
ordentlich, xml, xmlrpc, xsl, zip} # Installiere PHP und alle notwendigen Module für Bitrix.
2.5 apt install nginx # Installiere nginx.
2.6 vim /etc/netplan/50-cloud-init.yaml # IP statisch machen:

 network: version: 2 ethernets: eth0: addresses: [172.27.2.108/16] gateway4: 172.27.0.1 nameservers: addresses: [172.27.1.1] dhcp4: false 

2.7 Kopieren Sie PHP- und Nginx-Konfigurationen von unserer virtuellen Maschine und überprüfen Sie, ob alles startet und funktioniert.
2.8 Wir übertragen die gesamte Site von unserer virtuellen Maschine. Zum Beispiel:

rsync -alvz old Virtual: / var / www / / var / www /

3. Erstellen eines separaten Containers für die Datenbank

3.1 Wiederholen Sie die Schritte 1 .5, 2.1 und 2.6 und benennen Sie den Container, z. B. test-db.
3.2 apt install mysql-server # installiere die Datenbank
3.3 apt install pv # Installiere PV, um den Fortschritt beim Hochladen der Datenbank zu sehen.

4. Einrichten eines neuen Datenbankservers

Zu Beginn sammeln wir Informationen vom alten Server:

4.1 Wir benötigen Benutzer und übergeben aus der gewünschten Datenbank.
4.2 mysql -u test -p'test '-e "show create database testDB;" # Finden Sie heraus, wie die Datenbank erstellt wurde (was wir hervorheben müssen):

 mysql: [Warning] Using a password on the command line interface can be insecure. +----------+--------------------------------------------------------------------------+ | Database | Create Database | +----------+--------------------------------------------------------------------------+ | demoshop | <b>CREATE DATABASE `demoshop` /*!40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci */ |</b> +----------+--------------------------------------------------------------------------+ 

4.3 mysqldump -ER --single-transaction --quick testDB | gzip> testDB.sql.gz # Führen Sie diesen Befehl auf dem Server aus, auf dem sich unsere Datenbank befindet. Sie wird es ablegen und in das Archiv komprimieren.

Wir werden in unsere neue Datenbank gehen und die folgenden Aktionen ausführen:

4.4 rsync -alvz alte Datenbank: / root / testDB.sql.gz / root / # Übertragen Sie das Archiv mit dem Speicherauszug in unseren Container.
4.5 mysql # Gehen wir zu unserer Datenbank
4.5.1 CREATE USER 'user' @ '%' IDENTIFIED BY 'pass'; # Erstellen Sie denselben Benutzer und dasselbe Kennwort.
4.5.2 Ab Absatz 4.2 geben wir den folgenden Befehl ein: CREATE DATABASE `DBName` / *! 40100 DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci * / ;
4.5.3 ALLE PRIVILEGIEN FÜR DB-Namen GEWÄHREN. * TO 'user' @ '%' IDENTIFIED by 'pass'; # Wir geben Rechte an unserer Datenbank.
4.6 Wir verlassen die Datenbank und führen die Containerkonsole aus: pv testDB.sql.gz | zcat | mysql testDB # Füllen Sie den Speicherauszug in unsere Datenbank

5. Überprüfung

5.1 Ändern Sie die Parameter für die Verbindung mit der Datenbank und geben Sie die neue IP unserer Datenbank an.
5.2 Danach sollte die Site über IP oder DNS geöffnet werden. Dies hängt von Ihrer Konfiguration ab.

Fazit


Mithilfe von LXC-Containern können wir den Verbrauch von Testserverressourcen reduzieren und mehr Hosts auf einem Server unterbringen, während die verbrauchten Ressourcen jedes Hosts bequem verwaltet werden können. Jetzt haben Sie vorgefertigte Anweisungen, die zeigen, wie einfach die Implementierung ist.

Source: https://habr.com/ru/post/de458658/


All Articles