In diesem Teil der Reihe werden wir das wp-content Verzeichnis in ein eigenes Ceph-Volume auslagern und über einen NFS-Server bereitstellen. So können alle Server auf das selbe wp-content Verzeichnis zugreifen und dem Einrichten der automatisierten Skalierung der Webserverinstanzen steht nichts mehr im Wege.

Ceph-Volume in OpenStack über einen NFS-Server bereitstellen

Im vorherigen Teil haben wir bereits mehrere Webserverinstanzen angelegt und wollen nun das wp-content Verzeichnis so auslagern, dass alle Instanzen auf das selbe Verzeichnis zugreifen können.
OpenStack bietet mit Volumes die Möglichkeit, ein Art virtuelle Festplatte anzulegen und diese in einer Instanz zu verwenden. Dieses Volume kann beliebig aus- und eingehangen, jedoch nur von einer Instanz gleichzeitig verwendet werden. Da wir mit unseren Webservern jedoch mehrere Server haben welche den Zugriff auf das Volumen benötigen werden wir das Volume in einem eigenen NFS-Server einhängen und dann per NFS für die Webserverinstanzen bereit stellen. Vorgänge im Dashboard, welche bereits in den vorherigen Teilen des Tutorials erklärt wurden, werden in diesem Teil nicht detailiert erläutert sondern nur die benötigten Parameter z.B. zum Anlegen genannt.

Sicherheitsgruppen für NFS-Server anlegen

Zu erst legen wir für den neuen NFS-Server eine Sicherheitsgruppe mit dem selben Namen unter Access & Security an. Anschließend müssen für die Sicherheitsgruppe unter Add Rule Regeln angelegt werden, welche alle eingehenden Verbindungen von Instanzen der Gruppe web erlauben. Es muss jeweils eine Regel für ALL TCP, ALL UDP sowie ALL ICMP mit der Richtung Ingress, Remote Security Group und der Security Gruppe web angelegt werden. Die fertig eingetragenen Regeln der Gruppe NFS-Server sehen Sie im unten stehenden Screenshot.

Sicherheitsgruppe für NFS-Server

Sicherheitsgruppe für NFS-Server

 

Nun wiederholen wir den Vorgang für die vorhandene Gruppe web und erlauben eingehende (Ingress) Verbindungen für TCP, UDP und ICMP ausgehend von der Gruppe NFS-Server. Die fertig eingetragenen Regeln der Gruppe web sehen Sie im unten stehenden Screenshot.

Sicherheitsgruppe web

Sicherheitsgruppe web

Wie Sie bemerkt haben geben wir einfach jede Verbindung zwischen den beiden Sicherheitsgruppen NFS-Server und web frei. Da die Verbindung nur im internen Netzwerk erfolgt stellt dies im Testbetrieb kein hohes Sicherheitsrisiko dar. Im tatsächlichen Produktivbetrieb sollten jedoch die von NFS benötigen Ports und Protokolle selektiv freigegeben werden.

OpenStack Instanz für NFS-Server anlegen

Legen Sie nun unter Instances eine neue Instanz mit dem Namen NFS-Server an. Die Instanz sollte mit einem aktuellen Ubuntu Image erstellt werden. Vergessen Sie nicht die Sicherheitsgruppen remote_mgmt und NFS-Server im Reiter Access & Security des Instanzdialogs zuzuordnen. Ist die Instanz für den NFS-Server vollständig angelegt, notieren Sie sich die IP-Adresse des der Instanz.

Instanz für NFS-Server anlegen

Instanz für NFS-Server anlegen

 

Volumen anlegen und bei der Instanz einhängen

Gehen Sie nun im Hauptmenü auf Volume und Klicken Sie auf den Button Create Volume um ein neues Volume zu erstellen. Geben Sie als Name des Volumes z.B. wp-content an. Der Typ ist Ceph und die Größe sollte mit 2 GB mehr als ausreichend sein. Eine vorhandene Quelle muss unter Source nicht gewählt werden da wir ein leeres Volume erstellen wollen.

Ein Volume für wp-content Verzeichnis erstellen

Ein Volume für wp-content Verzeichnis erstellen

Wurde das Volume vollständig erstellt müssen Sie dieses noch einer Instanz einhängen.  Klicken Sie dazu auf Edit Attachments und wählen Sie in dem Dialog bei Attach to Instance die Instanz NFS-Server aus. Als Device Name sollten Sie /dev/vdb angeben, da der Vorgabewert in der aktuellen Version ingnoriert und idR. das Volume als /dev/vdb eingehangen wird.

Volume wp-content bei NFS-Server einhängen

Volume wp-content bei NFS-Server einhängen

Volumen formatieren und NFS-Server auf Instanz einrichten

Loggen Sie sich nun auf über Ihrem Jumphost per SSH auf der Instanz NFS-Server ein. Als erstes müssen wir das neue Volume formatieren da es noch kein Filesystem enthält.

ubuntu@nfs-server:~$ sudo -s
root@nfs-server:/mnt# mkfs.ext4 /dev/vdb

Als nächstes erstellen wir ein neues Verzeichnis als Mountpunkt für das Volume worüber wie es später in das lokale Dateisystem einhängen können.

root@nfs-server:/dev# cd /mnt/
root@nfs-server:/mnt# mkdir wp-content

Nun kann das Volumen gemounted werden. Bearbeiten Sie dazu die Datei /etc/fstab mit einem Texteditor und fügen Sie folgende Zeile gefolgt von einer Leerzeile hinzu:

/dev/vdb /mnt/wp-content ext4 defaults 0 0

Mounten Sie nun das Volume und wechseln Sie in das Verzeichnis:

root@nfs-server:~# mount /mnt/wp-content
root@nfs-server:~# cd /mnt/wp-content
root@nfs-server:/mnt/wp-content# ls -lha

Das evtl. überflüssige lost+found Verzeichnis kann problemlos gelöscht werden.
Weiterhin müssen wir direkt die Berechtigungen des Verzeichnisses auf den Benutzer und die Gruppe des Webservers umstellen:

root@nfs-server:/mnt/wp-content# rm -rf lost+found/
root@nfs-server:/mnt/wp-content# chown -R www-data:www-data *

Jetzt nutzen wir den Paketmanager apt zur Installation das benötigten nfs-kernel-server Pakets und konfigurieren den NFS-Server in der Datei /etc/exports.

root@nfs-server:/mnt/wp-content# apt-get install nfs-kernel-server
...
root@nfs-server:/mnt/wp-content# vi /etc/exports

Fügen Sie folgende Zeile in der Datei hinzu, wobei die IP Adresse der Netzmaske natürlich an Ihr eigenes Subnetz angepasst werden muss. Die User-ID und Group-ID 33 wird bei Ubuntu für www-data verwendet.

/mnt/wp-content 192.168.1.0/255.255.255.0(rw,async,no_subtree_check,all_squash,anonuid=33,anongid=33)

Jetzt können Sie mit folgenden Kommandos die Konfiguration übernehmen und den NFS-Server starten falls dieser noch nicht läuft.
Konfiguration übernehmen und Server starten:

root@nfs-server:/mnt/wp-content# exportfs -ar
root@nfs-server:/mnt/wp-content# /etc/init.d/nfs-kernel-server start
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon [ OK ]

Der NFS-Server ist soweit vorbereitet. Loggen Sie sich nun über den Jumphost auf der ersten Webserverinstanz web1 ein.

Webserverinstanz zur Verwendung des NFS-Servers konfigurieren

Nach dem Login installieren Sie zu erst das benötigte Paket nfs-common mit dem Paketmanager apt:

ubuntu@web1:~$ sudo -s
root@web1:~# apt-get install nfs-common

Nach der Installation können Sie in das WordPress-Verzeichnis wechseln und das vorhandene wp-content Verzeichnis verschieben sowie ein leeres Verzeichnis als Mountpunkt für den NFS-Server anlegen.

root@web1:~# cd /var/www/wordpress/
root@web1:/var/www/wordpress# mv wp-content wp-content-backup
root@web1:/var/www/wordpress# mkdir wp-content

Bearbeiten Sie nun die Datei /etc/fstab mit einem Editor und fügen Sie folgende Zeile gefolgt von einer Leerzeile hinzu. Beachten Sie, dass Sie die tatsächliche IP Adresse Ihrer eigenen NFS-Server Instanz angeben müssen:

192.168.1.168:/mnt/wp-content /var/www/wordpress/wp-content nfs auto,rw 0 0

Jetzt können Sie das Verzeichnis mounten, den Inhalt des Verzeichnisses aus dem Backup herstellen und die Benutzerrechte korrigieren:

root@web1:/var/www/wordpress# mount wp-content
root@web1:/var/www/wordpress# chmod -R g+w nfs-wp-content/
root@web1:/var/www/wordpress# cp -R wp-content-backup/* wp-content/

Herzlichen Glückwunsch, die Webserverinstanz web1 verwendet nun das Ceph-Volume über den NFS-Server!

Weitere Webserverinstanzen bequem per Snapshot-Feature erstellen

Um weitere Webserverinstanzen anzulegen, können Sie auf herkömmlichem Wege die obigen Schritte auf jeder Instanz manuell wiederholen.

Alternativ können Sie jedoch auch gleich die Vorteile von OpenStack nutzen und über das Dashboard bequem einen Snapshot der laufenden web1 Instanz herstellen. Mit dem erzeugten Snapshot können Sie anschließend eine beliebige Anzahl fertig konfigurierter Webserverinnstanzen erstellen.

Entfernen Sie dazu alle web-Instanzen außer web1 aus dem Pool Ihres Load Balancers unter dem Hautmenüpunkt Load Balancer > Members. Anschließend terminieren Sie die entfernten Instanzen über den Button more der jeweiligen Instanz in der Instanzliste, welche Sie über den Menüpunkt Instances erreichen. Nach dem Löschen der überflüssigen Instanzen klicken Sie bei der verwendeten Instanz web1 auf create snapshot und erzeugen Sie, wie im vierten Teil dieser Tutorial-Reihe beschrieben, weitere Instanzen anhand des Snapshots.

zurück zur Übersicht