Jira DataCenter - was ist das? Wie funktioniert es Wie bereitstellen?

Einführung


Mit der Verbreitung der Agile-Philosophie erwerben russische IT-Spezialisten jedes Jahr mehr Fachwissen und Kompetenzen im Bereich der Produktanpassung und -verwaltung für Entwicklungsteams, von denen das beliebteste immer noch Jira ist. Die Arbeit mit der ältesten, produktivsten und am besten zugänglichen Version - dem Jira Data Center - wirft jedoch noch viele Fragen auf. In diesem Beitrag werde ich über einige der Prinzipien und Mechanismen des Jira DataCenter sprechen, die wir in der Praxis anwenden. Ich werde mit einer Geschichte über die Struktur des Jira-Clusters beginnen.

Was ist ein Jira DataCenter?


Jira DataCenter ist im Wesentlichen eine Serverversion, kann jedoch eine gemeinsame Datenbank und einen gemeinsam genutzten Index verwenden.

Es ist wichtig zu verstehen, dass das Jira DataCenter selbst als Produkt und als Anwendung KEINE Fehlertoleranz und keinen Lastausgleich bietet. Verantwortlich dafür sind Module und Systeme, zu denen das Atlassian-Produkt keine Beziehung hat.

Mit anderen Worten, Atlassian bietet Unterstützung für die Arbeit in einem Cluster, aber das Clustering selbst wird auf externe Weise implementiert, deren Auswahl sehr umfangreich ist.

Detaillierte Produktbeschreibungen finden Sie auf der Atlassian-Website .

Es gibt verschiedene Konstruktionsmöglichkeiten:

1. Auf eigener Infrastruktur
2. In der Amazon Cloud (AWS)
3. In der Cloud von MS (Azure)

Dieser Artikel beschreibt eine Lösung für Ihre eigene Infrastruktur.

Welche Probleme löst das Jira DataCenter?


Mit Jira Data Center können Sie die folgenden Ziele erreichen:

  1. Implementierung der Fehlertoleranz.
  2. Sicherstellung eines stabilen Betriebs unter hoher Last. Hohe Last bezieht sich laut Jira Sizing Guide auf Instanzen im Groß- / Unternehmensmaßstab.
  3. Sicherstellung eines kontinuierlichen Betriebs, wenn Wartungsarbeiten erforderlich sind. An dieser Stelle werde ich separat wohnen. Die Anwendung muss häufig aktualisiert werden, und nicht alle Unternehmen können dies schnell und unsichtbar für Benutzer tun. Dieses Problem wird durch Clustering und Verwendung des sogenannten Zero Downtime- Aktualisierungsschemas gelöst.

Diese Probleme werden durch Clustering und eine skalierbare Architektur behoben.

Was sind die Komponenten eines Jira DataCenter?


Wie Sie in der folgenden Abbildung sehen können, besteht der Jira DataCenter-Cluster aus mehreren dedizierten Computern.

Bild
Abbildung 1. Architektur des Jira-Rechenzentrums

  1. Anwendungsknoten (Anwendungsknoten oder Clusterknoten). Sie akzeptieren und verarbeiten alle Workloads und Anforderungen. Die Rolle von Knoten wird von normalen Servern mit identischem Inhalt und installierter Anwendung sowie einem bereitgestellten gemeinsam genutzten Dateisystem gespielt.
  2. Dateisystem (Shared File System) mit Standardfunktionen zum Importieren / Exportieren von Dateien, Plugins, Caching usw. Ein Dateiserver ist auch ein separater Server, auf dem ein freigegebener Ordner oder eine freigegebene Ressource erstellt wird, der an Knoten angehängt und für freigegebene Dateien verwendet wird.
  3. Freigegebene Datenbank Der Datenbankserver ist in diesem Fall auch ein separater Server und kann auf MS SQL, PostgreSQL, MySQL, Oracle aufgebaut werden.
  4. Load Balancer Es verteilt Benutzeranforderungen und liefert sie an Knoten. Wenn eine davon fehlschlägt, leitet der Balancer seine Anforderungen fast sofort an andere Knoten weiter. Dank seiner Arbeit bemerken Benutzer nicht einmal den Ausfall eines Knotens. Wir werden unten separat über die Arbeit des Balancers sprechen.

Clustertopologie des Jira-Rechenzentrums


Ich werde die Grundprinzipien angeben, nach denen ein Cluster in JDC erstellt wird:

  • Jira-Instanzen teilen sich eine gemeinsame Datenbank.
  • Der Lucene-Index wird in Echtzeit repliziert und lokal pro Instanz gespeichert.
  • Anhänge werden in einem gemeinsamen Repository gespeichert.
  • Jira-Instanzen überwachen die Cache-Konsistenz.
  • Es können jederzeit mehrere Instanzen gleichzeitig aktiv sein.
  • Cluster-Sperren sind verfügbar.
  • Der Balancer ist so konfiguriert, dass Anforderungen nur an aktive Knoten umgeleitet werden, während er weder Anforderungen an inaktive Knoten umleiten muss, noch alle Sitzungen an einen Knoten adressieren kann.

Alle Knoten sind in aktiv und passiv unterteilt. Aktive Knoten unterscheiden sich darin, dass sie:

  • Anfragen bearbeiten
  • Führen Sie Hintergrundprozesse und Aufgaben aus
  • Geplante Aufgaben können für eine oder mehrere von ihnen konfiguriert werden.
  • In allen praktischen Szenarien sieht die Situation so aus, als würde ein Standard-Jira-Server verwendet. Dementsprechend verarbeiten passive Knoten keine Anforderungen und führen keine Aufgaben aus, sondern dienen dazu, eine kurzfristige Arbeitslast zu übernehmen (z. B. beim Systemstart, Laden von Plugins und / oder Indizieren).

Die folgende Abbildung zeigt den Betrieb des Jira-Clusters

Bild
Abbildung 2. Ein vereinfachtes Diagramm der Architektur

Über Load Balancer


Der Balancer kann ein beliebiger Server mit installiertem Reverse-Proxy oder ein physisches Gerät sein. Ich werde die bekanntesten Beispiele für Balancer nennen.

1. Hardware-Balancer:

• Cisco
• Wacholder
• F5

2. Software-Balancer:

• mod_proxy (Apache) - Ein Proxyserver für Apache HTTP Server, der die gängigsten Protokolle und verschiedene Algorithmen zum Lastenausgleich unterstützt.

• Varnish ist ein Reverse-HTTP-Proxyserver und -Beschleuniger. Es wurde für Websites mit hohem Datenverkehr entwickelt. Im Gegensatz zu anderen ist es nur ein Proxyserver und ein Load Balancer des HTTP-Verkehrs. Insbesondere verwendet Varnish Wikipedia, NY Times, The Guardian und viele andere große Projekte.

• Nginx - der beliebteste Webserver unter Load Balancern und Proxy-Lösungen für Websites mit hohem Datenverkehr. Es entwickelt sich aktiv, der Hersteller bietet eine kostenlose und Corporate-Version an. Wird auf vielen der meistbesuchten Websites der Welt verwendet, z. B. WordPress.com, Zynga, Airbnb, Hulu, MaxCDN.

• Nginx Plus - in der Tat die oben erwähnte kostenpflichtige Unternehmensversion von Nginx.

• HAProxy ist ein kostenloses Open Source-Tool, das Lastausgleichs- und Proxy-Funktionen für TCP / HTTP-Protokolle bietet. Es ist schnell und verbraucht wenig Systemressourcen, kompatibel mit Linux, Solaris, FreeBSD und Windows.

Einen guten Vergleich der Proxyserver finden Sie hier unter diesem Link .

Vorwärts- und Rückwärts-Proxys


Load Balancer können sowohl als direkte als auch als Reverse-Proxys eingesetzt werden. Der Unterschied wurde vom Autor dieses Kommentars zum Stackoverflow gut beschrieben:

1. "Forward Proxy" (Forward Proxy). Das Proxy-Ereignis in diesem Fall ist, dass der „direkte Proxy“ im Auftrag des ursprünglichen Anforderers Daten von einer anderen Website abruft. Als Beispiel werde ich eine Liste von drei Computern geben, die mit dem Internet verbunden sind.

X = Computer oder Client-Computer im Internet
Y = Proxy-Website, proxy.example.org
Z = Die Website, die Sie besuchen möchten, ist www.example.net
Sie können normalerweise eine direkte Verbindung von X -> Z herstellen. In einigen Szenarien ist es jedoch besser, Y -> Z im Namen von X zu verwenden, was in einer Kette folgendermaßen aussieht: X -> Y -> Z.

2. "Reverse Proxy" (Reverse Proxy). Stellen Sie sich die gleiche Situation vor, nur Standort Y ist mit einem Reverse-Proxy konfiguriert. Normalerweise können Sie eine direkte Verbindung von X -> Z herstellen. In einigen Szenarien ist es jedoch besser, wenn der Administrator von Z den direkten Zugriff einschränkt oder untersagt und Besucher dazu zwingt, zuerst Y zu durchlaufen. Daher erhalten wir nach wie vor die von Y -> Z empfangenen Daten im Auftrag von X, das wie folgt ist: X -> Y -> Z.
Dieser Fall unterscheidet sich vom „direkten Proxy“ darin, dass Benutzer X nicht weiß, dass er auf Z zugreift, da Benutzer X sieht, dass er Daten mit Y austauscht. Server Z ist für Clients unsichtbar und nur der externe Proxyserver Y ist extern sichtbar . Der Reverse-Proxy erfordert keine clientseitige Konfiguration. Client X glaubt, dass er nur mit Y interagiert (X -> Y), aber die Realität ist, dass Y die gesamte Verbindung umleitet (X -> Y -> Z erneut).

Als nächstes werden wir überlegen, mit einem Software-Balancer zu arbeiten.

Welchen Software-Balancer soll ich wählen?


Nach unserer Erfahrung ist Nginx die beste Wahl unter Software-Balancern, da es den Sticky-Session-Modus unterstützt und auch einer der am häufigsten verwendeten Webserver ist, was eine gute Dokumentation und ausreichende Beliebtheit bei IT-Spezialisten impliziert.

Sticky Session ist eine Lastausgleichsmethode, bei der Clientanforderungen an denselben Gruppenserver gesendet werden. Nginx hat eine Sticky-Methode, bei der Cookies zum Ausgleich verwendet werden, jedoch nur in der kommerziellen Version. Es gibt jedoch einen freien Weg - die Verwendung externer Module.

Das Modul erstellt ein Cookie und macht so jeden Browser einzigartig. Als Nächstes wird ein Cookie verwendet, um Anforderungen an denselben Server umzuleiten. Wenn kein Cookie vorhanden ist (z. B. bei der ersten Anforderung), wird der Server zufällig ausgewählt.
Weitere Informationen zur Sticky-Methode finden Sie unter diesem Link sowie in diesem Habrapost .

Und jetzt kommen wir zum praktischen Teil ...

Anweisungen zum Erstellen eines Jira DataCenter-Clusters


Für das Clustering können Sie entweder eine vorhandene Instanz mit installiertem Jira oder eine neue verwenden. In unserem Beispiel wird die Installation neuer Instanzen auf verschiedenen Betriebssystemen beschrieben (um die Vielseitigkeit des Systems zu demonstrieren).

1. Beginnen wir mit dem Datenbankserver. Sie können sowohl vorhandene als auch neue erstellen. Zur Veranschaulichung wurde erneut Windows Server 2016 + PostgreSQL 9.4 ausgewählt. Installieren Sie das Betriebssystem, installieren Sie den PG-Server, installieren Sie den PG-Administrator, fügen Sie den Benutzer und die Datenbank hinzu.

2. Erstellen Sie den ersten Knoten unter dem Ubuntu 16.04 LTS-Betriebssystem. Installieren Sie die erforderlichen Pakete und Repository-Updates.

3. Laden Sie das Jira DataCenter herunter und installieren Sie es, starten Sie es und konfigurieren Sie die Datenbank (nur für den Fall, dass Atlassian eine detaillierte Anleitung hat ).

4. Schalten Sie Jira aus und den Knoten aus.
Service Jira Stop

5. Für weitere Manipulationen ist es besser, Jira Autorun vorübergehend zu deaktivieren:
update-rc.d -f jira entfernen

6. Wir klonen den ausgeschalteten Knoten.

7. Starten Sie den ersten Knoten und deaktivieren Sie Jira (standardmäßig ist Jira nach der Installation auf Autorun eingestellt).

8. Führen Sie den zweiten Knoten aus und schalten Sie Jira aus.

9. Erstellen Sie eine separate Instanz für den Balancer. Ich habe Ubuntu 16.04 gewählt, weil Es ist recht schnell, einfach und erfordert keine zusätzlichen Kosten in Form von Lizenzen.

10. Installieren Sie nginx (das Beispiel verwendet Version 1.13.4).

11. Laden Sie nginx-sticky-module-ng herunter und entpacken Sie es:
Git-Klon bitbucket.org/nginx-goodies/nginx-sticky-module-ng.git

12. Bereiten Sie nginx für das Neukompilieren und Hinzufügen eines Moduls vor.

13. Kompilieren Sie nginx mit dem nginx-sticky-module-ng-Modul. In meinem Fall stellte sich die Kompilierungszeile folgendermaßen heraus:
./configure --prefix = / etc / nginx --sbin-path = / usr / sbin / nginx --modules-path = / usr / lib / nginx / modules --conf-path = / etc / nginx / nginx. conf --error-log-path = / var / log / nginx / error.log --http-log-path = / var / log / nginx / access.log --pid-path = / var / run / nginx. pid --lock-path = / var / run / nginx.lock --http-client-body-temp-path = / var / cache / nginx / client_temp --http-proxy-temp-path = / var / cache / nginx / proxy_temp --http-fastcgi-temp-path = / var / cache / nginx / fastcgi_temp --http-uwsgi-temp-path = / var / cache / nginx / uwsgi_temp --http-scgi-temp-path = / var / cache / nginx / scgi_temp --user = nginx --group = nginx --mit-kompatibler - mit-Datei-aio - mit-Threads --mit-http_addition_module --mit-http_auth_request_module --mit-http_dav_module - -with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_sl_module_with_module -with-http_sub_module --with-ht tp_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt = '- g -O2 -fstack-protector - param = ssp-buffer-size = 4 -Wformat -Werror = format-security -Wp, -D_FORTIFY_SOURCE = 2 -fPIC '--with-ld-opt =' - Wl, -Bsymbolic-Funktionen -Wl, -z, relro -Wl, -z, jetzt -Wl, - nach Bedarf -pie '--add-module = / usr / local / src / nginx-sticky-module-ng

14. Suchen Sie die Datei /etc/nginx/nginx.conf, kopieren Sie sie nach .bak und konfigurieren Sie nginx so, dass der Proxy-Modus umgekehrt wird.

15. Als nächstes benötigen wir einen Dateiserver (vorzugsweise auch fehlertolerant). Zum Beispiel habe ich einen Windows-Server ausgewählt, auf dem ich einen NFS-Ball erstellt habe.

16. Auf jedem Knoten installieren wir Pakete für die NFS-Unterstützung:
apt-get install nfs-common

17. Erstellen Sie den Ordner / media / jira und führen Sie Folgendes aus:
chmod -R 0777 / media / Jira

18. Hängen Sie den NFS-Ball als freigegebenen Ball ein (es ist erforderlich, ihn nicht im Stammordner, sondern beispielsweise in / media / jira zu mounten) - JEDEN NODE

19.1. Ferner ist es möglich, entweder eine manuelle Montage (einzeln) durchzuführen:
sudo mount -t nfs -O uid = 1000, iocharset = utf-8 xx.xx.xx.xx: / jira / media / jira
Dabei ist xx.xx.xx.xx die IP-Adresse des Servers mit dem NFS-Ball

19.2. Oder sofortige automatische Montage (beim Start des Betriebssystems):
mcedit / etc / fstab
Am Ende müssen Sie die Zeile hinzufügen:
192.168.7.239:/jira / media / jira nfs user, rw 0 0
Dann speichern und beenden.

20. ID zuweisen: Der erste Knoten1, der zweite Knoten2 usw.
#Diese ID muss im gesamten Cluster eindeutig sein
jira.node.id = node1
#Der Speicherort des freigegebenen Basisverzeichnisses für alle Jira-Knoten
jira.shared.home = / media / jira

21. Führen Sie die Jira auf dem ersten Knoten aus
Service Jira starten
überprüfen:
Gehen Sie zu System -> Systeminfo -> Suchen Sie nach Cluster ON und der Knotennummer.

22. Richten Sie den Nginx-Ausgleich ein

23. Seit Zuvor haben wir den Jira-Autostart auf den Knoten deaktiviert und können ihn dann mit dem folgenden Befehl aktivieren:
update-rc.d -f jira aktivieren

24. Wir überprüfen den Betrieb des Clusters und fügen nach Bedarf Knoten hinzu.

Cluster-Startreihenfolge


1. Aktivieren Sie den freigegebenen Dateisystemserver
2. Aktivieren Sie den Load Balancer
3. Aktivieren Sie Knoten1
4. Aktivieren Sie node2
5. ...

Cluster Stop Order


1. Stoppen Sie Jira auf beiden Knoten mit dem Befehl service Jira stop
2. Schalten Sie Knoten 2 aus
3. Schalten Sie Knoten 1 aus
4. Schalten Sie den Load Balancer aus
5. Schalten Sie den Dateisystemserver aus

Das ist alles ...


Natürlich ist die beschriebene Methode nicht die einzig wahre. Dies ist nur eine Möglichkeit der Implementierung.

Ich bedanke mich bei meinen Kollegen für ihre Hilfe bei der Vorbereitung des Materials.
Kommentieren Sie, stellen Sie Fragen und bedanken Sie sich für Ihre Aufmerksamkeit.

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


All Articles