Confluence Data Center und GlusterFS

15. Apr. 2021Atlassian, Clustering, Data Center, DevOps, Testumgebung

Einführung

In den Blog-Beiträgen Atlassian Testumgebungen automatisieren und Docker Images erstellen mit Packer habe ich die Grundlagen dargelegt, wie wir Testinstanzen von Atlassian-Produkten schnell zur Verfügung stellen können. Ein Problem der bisherigen Lösung ist, dass Instanzen, die miteinander kommunizieren sollen, auf dem selben physischen Node laufen müssen. Das liegt an zwei Einschränkungen der bisherigen Plattform: Docker kann in der Grundinstallation weder verteilte Dateisysteme anbieten, noch virtuelle Netzwerke über mehrere Nodes. Ergibt sich jetzt aber z.B. die Anforderung eines Confluence Data Centers mit Clusterfunktionalität, müssen alle Nodes auf dem selben Worker Node laufen. Das schliesst manche hochskalierten Setups, sowie Tests unter Realbedingungen aus. Mit der neuen strategischen Ausrichtung von Atlassian, und dem Wegfall der Server Editionen werden aber Data Center Instanzen immer wichtiger. Das Problem des verteilten shared-home wird in diesem Blog-Beitrag besprochen, auf verteilte Netzwerke werde ich im nächsten Blog eingehen.

Zur Erinnerung: Die bisherige Architektur sieht folgendermassen aus:

Das Ziel wäre es, folgendes Setup zu ermöglichen:

Shared Home

Confluence benötigt einen Ordner (shared-home), auf das alle Nodes zugreifen können. Solange alle Data Center Nodes auf demselben Host laufen, ist das problemlos mit Docker-Volumes machbar. Bisher wurden Confluence-Container z.B. so gestartet.

docker run -d -p 8090 
        -v /var/mounts/dctest1/confluence/sharedhome:/data/confluence/sharedhome 
        -v /var/mounts/dctest1/node1:/var/atlassian/confluence 
        --restart always 
        --hostname node1 
        --name node1 zuara/confluence:7.4.0
 
docker run -d -p 8090 
        -v /var/mounts/dctest1/confluence/sharedhome:/data/confluence/sharedhome 
        -v /var/mounts/dctest1/node2:/var/atlassian/confluence 
        --restart always 
        --hostname node2 
        --name node2 zuara/confluence:7.4.0

In dem Beispiel haben die beiden Nodes jeweils ein eigenes Home Verzeichnis, teilen sich aber ein Volume für das Shared Home. Will man nun die beiden Nodes auf verschiedenen Hosts starten braucht man ein verteiltes Dateisystem. Folgende Alternativen wurden in Betracht gezogen und allenfalls getestet:

  • NFS: Wird von Atlassian nicht unterstützt als Filesystem für Confluence. Das trifft prinzipiell nicht für das shared-home zu, das verteilte Dateisystem soll aber auch für die normalen Homeverzeichnisse verwendet werden können.
  • SMB/Samba: Geht in Theorie. Beim Praxistest fiel aber eher schwacher Durchsatz und unberechenbare Synchronisation auf. Mit optimierten Einstellungen wäre das wohl zu lösen, es gab aber ja noch weitere Kandidaten.
  • Ceph: Würde prinzipiell gehen, ist aber recht komplex und benötigt viel Ressourcen.
  • MinIO: Würde prinzipiell gehen, es ist aber konzeptionell eher als Ersatz für Object Storage wie Amazon S3 ausgelegt. Block Storage scheint nachträglich aufgesetzt zu sein.
  • GlusterFS: Verteiltes Block Storage System, einfach zu installieren. Erlaubt es, als Client-Server Modell wie auch als Peer-to-Peer Cluster zu betreiben.

Aufgrund der einfachen Handhabung wurde GlusterFS im Client/Server Betrieb ausgewählt. Dabei wird ein zentraler Server aufgesetzt und auf den Clients ein Netzwerk-Dateisystem gemountet. Das Setup funktioniert vom Prinzip her wie NFS und SMB, ist aber auch in Zukunft zu einer vollständigen Peer-to-Peer Lösung ausbaubar.

Setup Server

Das Setup gestaltet sich auf Debian und Ubuntu recht einfach. Als Erstes muss eine neue Paketquelle eingerichtet werden, da das Paket in den meisten Distributionen nicht vorhanden ist:

wget -O - https://download.gluster.org/pub/gluster/glusterfs/7/rsa.pub | sudo apt-key add -
sudo add-apt-repository -y ppa:gluster/glusterfs-7
sudo apt-get -y update

Das Paket kann nun installiert werden:

sudo apt-get -y install glusterfs-client glusterfs-server chrony

Chrony ist ein Programm, dass die Zeit des Betriebssystems über Network Time Protocol vereinheitlicht. Das ist bei fast allen verteilten Systemen eine wichtige Voraussetzung. Es kann aber eine beliebige NTP-Software verwendet werden.

Für das zu exportierende Filesystem muss ein Ordner angelegt werden:

sudo mkdir /var/mounts
sudo chmod 755 /var/mounts

Danach muss der GlusterFS Daemon gestartet und aktiviert werden:

sudo systemctl start glusterd
sudo systemctl enable glusterd

Der Server muss mindestens sich selbst als Trusted Peer zum GlusterFS-Cluster hinzufügen:

sudo gluster peer probe <server-hostname>

Möchte man ein richtiges Peer-to-Peer System installieren, müssten die weiteren Nodes auch mit gluster peer probe hinzugefügt werden. Damit hätte man dann auch automatisch Ausfallsicherheit. Für unser Szenario ist das aber noch nicht relevant.

Und schlussendlich kann ein neues Volume erstellt werden:

sudo gluster volume create klickvol01 transport tcp <server-hostname>:/var/mounts force
sudo gluster volume start klickvol01
Die Serverinstallation ist somit abgeschlossen.

Setup Client Nodes

Das Setup auf den Clients gestaltet sich fast gleich wie auf dem Server:

wget -O - https://download.gluster.org/pub/gluster/glusterfs/7/rsa.pub | sudo apt-key add -
sudo add-apt-repository -y ppa:gluster/glusterfs-7
sudo apt-get -y update
sudo apt-get -y install glusterfs-client glusterfs-server chrony
sudo mkdir /var/mounts
sudo chmod 755 /var/mounts
sudo systemctl start glusterd
sudo systemctl enable glusterd

Die Clients müssen aber den Cluster nicht joinen, sie können jetzt einfach die freigegebenen Volumes mounten:

mount -t glusterfs <server-hostname>:/klickvol01 /var/mounts

Im Verzeichnis /var/mounts geschriebene Dateien sind jetzt auch auf allen anderen verbundenen Nodes sichtbar. Wenn man noch einmal den Docker-Befehl anschaut:

docker run -d -p 8090 
        -v /var/mounts/dctest1/confluence/sharedhome:/data/confluence/sharedhome 
        -v /var/mounts/dctest1/node1:/var/atlassian/confluence 
        --restart always 
        --hostname node1 
        --name node1 zuara/confluence:7.4.0

Durch den Befehl oben sieht man, dass beide Home-Verzeichnisse von Confluence auf dem verteilten Dateisystem liegen, und somit auf allen Nodes benutzbar sind. Ganz nebenbei hat man so auch die Möglichgeit erschaffen, den Confluence Container auf dem einen Node abzustellen und auf einem anderen Node wieder zu starten.

Das hier vorgestellte Setup ignoriert einen der Hauptvorteile verteilter Dateisysteme komplett: Hochverfügbarkeit. Es ist nur ein Mitglied im Replikations-Cluster. Steigt der aus, sind alle Docker-Volumes offline. Die Lösung wäre, mit gluster peer probe mehr Nodes zum Replikations-Cluster hinzuzufügen. Für unser Testsystem ist aber HA (High availability) keine Anforderung.

Haben Sie Fragen oder Anregungen zum diesem Blog-Beitrag? Dürfen wir Sie unterstützen?
Schreiben Sie uns auf hallo@zuara.ch oder rufen Sie uns an: 031 302 60 00. Wir freuen uns auf Ihre Anfrage!

Der Autor:

Roman Maire

Roman Maire

roman.maire@zuara.ch

Direkt: +41 79 307 60 29

      

Weitere Fachartikel und Neuigkeiten von Zuara

Confluence Data Center und GlusterFS

Einführung In den Blog-Beiträgen Atlassian Testumgebungen automatisieren und Docker Images erstellen mit Packer habe ich die Grundlagen dargelegt, wie wir Testinstanzen von Atlassian-Produkten schnell zur Verfügung stellen können. Ein Problem der bisherigen Lösung...

Quo Vadis Jira Service Desk?

Ausgangslage Am 9. November hat Atlassian das neueste Produkt angekündigt: Jira Service Management. Es handelt sich dabei nicht um ein komplett neues Produkt, sondern um eine Weiterentwicklung von Jira Service Desk. Atlassian will damit auf geänderte Anforderungen und...

Die neuen Funktionen der App Connect MSTeams for Confluence

Unsere App Connect Microsoft Teams for Confluence hat einige neue Features. Welche genau und was diese können, beschreibe ich in diesem Blog-Post.Der persönliche Assistent Kennen Sie das entstehende Problem, wenn Sie auf mehreren Tools Tasks erfasst haben oder diese...

Confluence ist auch ein Content Management System

Genialer Werkzeugkasten: Die Software Atlassian® Confluence® ist ein Wiki oder neudeutsch ein Social Collaboration Hub - also eine elektronische Plattform, auf der Menschen zusammenarbeiten, Inhalte und Wissen teilen, organisieren und diskutieren. Confluence kann noch...

Word Integration in Confluence

Eine häufige Anforderung bei der Arbeit mit Confluence ist die Integration von Office. Office ist bei vielen Unternehmen im Einsatz und bei einer Einführung von Confluence stellt sich dann die Frage, wie sich die Microsoft-Welt mit der Atlassian-Welt verbinden lässt....

Jira Software Cloud – neu mit Performance-Messungen für Dev-Teams

Jira Software Cloud bietet 4 neue Features für Entwicklungs-Teams, die es endlich erlauben, Code und Code-Repositories mit Issues zu verknüpfen und die Deployments in verschiedenen Stages zu visualisieren. Die Folge davon: weniger Kontext-Wechsel, weniger...

Denkanstösse zum Arbeiten mit E-Mails und Chat

Schon seit 10 Jahren wurde der Tod von E-Mail angekündigt. E-Mail hat jedoch weiterhin ihren Platz in der heutigen Welt. Chat-Lösungen und E-Mail existieren im Unternehmen nebeneinander. In diesem Blog zeige ich Ihnen, wann und wie Sie am besten welches Tool...

Atlassians Cloud Roadmap

Einleitung Falls Sie einen Wechsel in die Atlassian Cloud in Erwägung ziehen oder diese bereits nutzen, interessiert Sie vielleicht auch, welche Neuerungen Atlassian für die Cloud kürzlich veröffentlicht hat, plant oder gerade daran arbeitet. In diesem Blogbeitrag...

Die Microsoft Teams Apps von Zuara – Teil #1: Confluence

Seit Anfang dieses Jahres bietet Zuara eine App die Integration von Confluence in Microsoft Teams an, Connect Microsoft Teams for Confluence. Eine zweite App, welche die Integration von Jira in Microsoft Teams ermöglicht, ist ebenfalls kürzlich erschienen. Getreu nach...

Statuspage – den Systemstatus einfach und zuverlässig kommunizieren

Mit Statuspage hat Atlassian ein Tool im Angebot, das Teams und Organisationen hilft, Benutzer über den Systemstatus der angebotenen Services zu informieren. Im Grundsatz zeigt Statuspage auf einer Webpage den Zustand aller technischer Services einer Organisation an,...

Pin It on Pinterest

Share This