In dieser Anleitung wird die empfohlene Methode zum Erstellen einer geclusterten Looker-Konfiguration erläutert.
Übersicht
Die Looker-Anwendung kann einen einzelnen Knoten oder geclustert ausführen:
- Die Looker-Anwendung mit einem einzelnen Knoten (Standardkonfiguration) hat alle Dienste, aus denen die Looker-Anwendung besteht, die auf einem einzigen Server ausgeführt wird.
- Eine geclusterte Looker-Konfiguration ist eine komplexere Konfiguration, die normalerweise Datenbankserver, Load-Balancer und mehrere Server umfasst, auf denen die Looker-Anwendung ausgeführt wird. Jeder Knoten in einer geclusterten Looker-Anwendung ist ein Server, auf dem eine einzelne Looker-Instanz ausgeführt wird.
Es gibt zwei Hauptgründe, warum eine Organisation Looker als Cluster ausführen möchte:
- Load-Balancing
- Verbesserte Verfügbarkeit und Failover
Abhängig von den Skalierungsproblemen bietet ein geclusterter Looker möglicherweise keine Lösung. Wenn beispielsweise eine kleine Anzahl großer Abfragen den Systemspeicher belegt, besteht die einzige Lösung darin, den verfügbaren Arbeitsspeicher für den Looker-Prozess zu erhöhen.
Load-Balancing-Alternativen
Erwägen Sie vor dem Load-Balancing von Looker, den Arbeitsspeicher und möglicherweise die CPU-Anzahl eines einzelnen Servers, auf dem Looker ausgeführt wird, zu erhöhen. Looker empfiehlt die Einrichtung einer detaillierten Leistungsüberwachung für die Arbeitsspeicher- und CPU-Auslastung, um sicherzustellen, dass der Looker-Server die richtige Größe für seine Arbeitslast hat.
Große Abfragen benötigen mehr Arbeitsspeicher, um eine bessere Leistung zu erzielen. Clustering kann zu Leistungssteigerungen führen, wenn viele Nutzer kleine Abfragen ausführen.
Bei Konfigurationen mit bis zu 50 Nutzern, die Looker leicht verwenden, empfiehlt Looker, einen einzelnen Server mit einer großen AWS EC2-Instanz auszuführen (M4.large: 8 GB RAM, 2 CPU-Kerne). Bei Konfigurationen mit mehr Nutzern oder vielen aktiven Power-Usern sollten Sie beobachten, ob die CPU-Auslastung zunimmt oder ob Nutzer Verzögerungen in der Anwendung feststellen. Ist dies der Fall, verschieben Sie Looker auf einen größeren Server oder führen Sie eine geclusterte Looker-Konfiguration aus.
Verbesserte Verfügbarkeit/Failover
Wenn Sie Looker in einer Clusterumgebung ausführen, kann die Ausfallzeit bei einem Ausfall minimiert werden. Hochverfügbarkeit ist besonders wichtig, wenn die Looker API in Kerngeschäftssystemen verwendet wird oder wenn Looker in kundenseitige Produkte eingebettet ist.
In einer geclusterten Looker-Konfiguration leitet ein Proxyserver oder Load-Balancer Traffic um, wenn er feststellt, dass ein Knoten ausgefallen ist. Looker verwaltet automatisch Knoten, die den Cluster verlassen und ihm beitreten.
Erforderliche Komponenten
Für eine geclusterte Looker-Konfiguration sind die folgenden Komponenten erforderlich:
- MySQL-Anwendungsdatenbank
- Looker-Knoten (Server, auf denen der Looker-Java-Prozess ausgeführt wird)
- Load-Balancer
- Freigegebenes Dateisystem
- Richtige Version der JAR-Dateien der Looker-Anwendung
Das folgende Diagramm veranschaulicht, wie die Komponenten interagieren:
MySQL-Anwendungsdatenbank
Looker verwendet eine Anwendungsdatenbank, die oft als interne Datenbank bezeichnet wird, um Anwendungsdaten zu speichern. Wenn Looker als Anwendung mit einem einzelnen Knoten ausgeführt wird, verwendet es normalerweise eine speicherinterne HyperSQL-Datenbank.
In einer geclusterten Looker-Konfiguration muss jede Looker-Instanz jedes Knotens auf eine gemeinsame Transaktionsdatenbank (die freigegebene Anwendung oder interne Datenbank) verweisen. Die Anwendungsdatenbank für die geclusterten Looker wird so unterstützt:
- Für die Anwendungsdatenbank für geclusterte Looker-Instanzen wird nur MySQL unterstützt. Amazon Aurora und MariaDB werden nicht unterstützt.
- MySQL-Versionen ab 5.7 und 8.0 werden unterstützt.
- Geclusterte Datenbanken wie Galera werden nicht unterstützt.
Es wird empfohlen, eine Lesereplikatdatenbank zu verwenden, um Leistung und Redundanz zu verbessern. Ihre Lesereplikatdatenbank muss keine MySQL-Datenbank sein.
Looker verwaltet die Wartung und Sicherung der Datenbank nicht. Da die Datenbank jedoch fast alle Konfigurationsdaten der Looker-Anwendung hostet, sollte sie als Hochverfügbarkeitsdatenbank bereitgestellt und mindestens täglich gesichert werden.
Looker-Knoten
Jeder Knoten ist ein Server, auf dem der Looker-Java-Prozess ausgeführt wird. Die Server im Looker-Cluster müssen miteinander und mit der Looker-Anwendungsdatenbank kommunizieren können. Die Standardports sind auf dieser Seite unter Ports für die Kommunikation zwischen den Knoten öffnen aufgeführt.
Load-Balancer
Zum Ausgleichen der Last oder der Weiterleitungsanfragen an verfügbare Knoten ist ein Load-Balancer oder Proxyserver (z. B. NGINX oder AWS ELB) erforderlich, um Traffic an jeden Looker-Knoten weiterzuleiten. Der Load-Balancer verarbeitet Systemdiagnosen. Bei einem Knotenfehler muss der Load-Balancer so konfiguriert werden, dass der Traffic an die verbleibenden fehlerfreien Knoten weitergeleitet wird.
Achten Sie bei der Auswahl und Konfiguration des Load-Balancers darauf, dass er nur als Ebene 4 konfiguriert werden kann. Ein Beispiel hierfür ist der klassische ELB von Amazon. Außerdem sollte der Load-Balancer ein langes Zeitlimit von 3.600 Sekunden haben, damit Abfragen nicht beendet werden.
Freigegebenes Dateisystem
Sie müssen ein POSIX-konformes freigegebenes Dateisystem verwenden, z. B. NFS, AWS EFS, Gluster, BeeGFS, Lustre oder viele andere. Looker verwendet das freigegebene Dateisystem als Repository für verschiedene Informationen, die von allen Knoten im Cluster verwendet werden.
Für die Installation von Anwendungen und Tools aus dem Looker Marketplace ist ein freigegebenes (Netzwerk-)Dateisystem erforderlich.
Looker-Anwendung (ausführbare JAR-Datei)
Sie müssen die JAR-Datei der Looker-Anwendung verwenden, die Looker 3.56 oder höher ist.
Ab Looker 6.18 wurde die Looker-JAR-Datei in zwei separate JAR-Dateien aufgeteilt: die Looker-Kern-JAR-Datei und eine Looker-JAR-Datei für Abhängigkeiten. Wenn Sie Looker 6.18 oder höher installieren oder aktualisieren, müssen Sie beide JAR-Dateien herunterladen.
Looker empfiehlt dringend, auf jedem Knoten in einem Cluster dieselbe Looker-Release- und -Patch-Version auszuführen, wie unter Looker auf den Knoten auf dieser Seite starten erläutert.
Cluster einrichten
Die folgenden Aufgaben sind erforderlich:
- Looker installieren
- MySQL-Anwendungsdatenbank einrichten
- Freigegebenes Dateisystem einrichten
- SSH-Schlüssel-Repository freigeben (je nach Ihrer Situation)
- Ports für die Kommunikation zwischen den Knoten öffnen
- Looker auf den Knoten starten
Looker installieren
Prüfen Sie, ob Looker auf jedem Knoten installiert ist. Verwenden Sie dazu die JAR-Dateien für die Looker-Anwendung und die Anleitung auf der Dokumentationsseite Vom Kunden gehostete Installationsschritte.
MySQL-Anwendungsdatenbank einrichten
Für eine geclusterte Looker-Konfiguration muss die Anwendungsdatenbank eine MySQL-Datenbank sein. Wenn Sie eine nicht gruppierte Looker-Instanz haben, die HyperSQL für die Anwendungsdatenbank verwendet, müssen Sie die Anwendungsdaten aus den HyperSQL-Daten in die neue freigegebene MySQL-Anwendungsdatenbank migrieren.
Sichern Sie unbedingt das Looker-Verzeichnis. Der Migrationsprozess kann nur von einer HyperSQL-Datenbank zu einer MySQL-Datenbank und nicht umgekehrt ausgeführt werden.
Informationen zum Sichern von Looker und zum Migrieren der Anwendungsdatenbank von HyperSQL zu MySQL finden Sie auf der Dokumentationsseite Zu MySQL migrieren.
Freigegebenes Dateisystem einrichten
Nur bestimmte Dateitypen – Modelldateien, Bereitstellungsschlüssel, Plug-ins und möglicherweise Manifestdateien von Anwendungen – gehören zum freigegebenen Dateisystem. So richten Sie das freigegebene Dateisystem ein:
- Prüfen Sie auf dem Server, auf dem das freigegebene Dateisystem gespeichert wird, ob Sie Zugriff auf ein anderes Konto mit der Berechtigung
su
für das Looker-Nutzerkonto haben. - Melden Sie sich auf dem Server für das freigegebene Dateisystem im Looker-Nutzerkonto an.
- Schließen Sie die Looker-Konfiguration, wenn Looker ausgeführt wird.
- Wenn Sie zuvor Cluster mit Linux-Skripts erstellt haben, beenden Sie diese Skripts, entfernen Sie sie aus Cron und löschen Sie sie.
- Netzwerkfreigabe erstellen und auf jedem Knoten im Cluster bereitstellen Achten Sie darauf, dass es für die automatische Bereitstellung auf jedem Knoten konfiguriert ist und der Looker-Nutzer Lese- und Schreibzugriff darauf hat. Im folgenden Beispiel hat die Netzwerkfreigabe den Namen
/mnt/looker-share
. Verschieben Sie auf einem Knoten Ihre Bereitstellungsschlüssel, Plug-ins und die Verzeichnisse
looker/models
undlooker/models-user-*
, in denen Ihre Modelldateien gespeichert sind, in Ihre Netzwerkfreigabe. Beispiel:mv looker/models /mnt/looker-share/ mv looker/models-user-* /mnt/looker-share/
Fügen Sie für jeden Knoten die Einstellung
--shared-storage-dir
zuLOOKERARGS
hinzu. Geben Sie die Netzwerkfreigabe wie in diesem Beispiel an:--shared-storage-dir /mnt/looker-share
LOOKERARGS
sollte zu$HOME/looker/lookerstart.cfg
hinzugefügt werden, damit die Einstellungen nicht von Aktualisierungen beeinflusst werden. Wenn IhreLOOKERARGS
nicht in dieser Datei aufgeführt ist, wurde sie möglicherweise direkt dem$HOME/looker/looker
-Shell-Skript hinzugefügt.Jeder Knoten im Cluster muss in ein eindeutiges
/log
-Verzeichnis oder zumindest eine eindeutige Logdatei schreiben.
SSH-Schlüssel-Repository freigeben
- Sie erstellen einen freigegebenen Dateisystemcluster aus einer vorhandenen Looker-Konfiguration und
- Sie haben Projekte, die in Looker 4.6 oder früher erstellt wurden.
Für das folgende Verfahren müssen Sie die
$HOME/.ssh directory
des Looker-Nutzers ändern. Dies kann die Anmeldung erschweren und Probleme beheben, wenn die Konfiguration Fehler enthält. Prüfen Sie, ob Sie Zugriff auf ein anderes Konto haben, mit dem Sie einesu
-Verknüpfung zum Looker-Nutzerkonto herstellen können, bevor Sie diese Schritte ausführen.
Richten Sie das SSH-Schlüssel-Repository ein, das freigegeben werden soll:
Erstellen Sie auf dem freigegebenen Dateiserver ein Verzeichnis namens
ssh-share
. Beispiel:/mnt/looker-share/ssh-share
Achten Sie darauf, dass das Verzeichnis
ssh-share
dem Looker-Nutzer gehört und die Berechtigungen 700 sind. Achten Sie außerdem darauf, dass Verzeichnisse über dem Verzeichnisssh-share
(wie/mnt
und/mnt/looker-share
) nicht von der Welt beschreibbar oder beschreibbar sind.Kopieren Sie auf einem Knoten den Inhalt von
$HOME/.ssh
in das neue Verzeichnisssh-share
. Beispiel:cp $HOME/.ssh/* /mnt/looker-share/ssh-share
Erstellen Sie für jeden Knoten eine Sicherung der vorhandenen SSH-Datei und erstellen Sie einen Symlink zum Verzeichnis
ssh-share
. Beispiel:cd $HOME mv .ssh .ssh_bak ln -s /mnt/looker-share/ssh-share .ssh
Führen Sie diesen Schritt für jeden Knoten aus.
Ports für die Kommunikation öffnen
Geclusterte Looker-Knoten kommunizieren über HTTPS mit selbst signierten Zertifikaten und einem zusätzlichen Authentifizierungsschema, das auf rotierenden Secrets in der Anwendungsdatenbank basiert.
Die Standardports, die zwischen Clusterknoten geöffnet sein müssen, sind 1551 und 61616. Diese Ports können mit den hier aufgeführten Start-Flags konfiguriert werden. Wir empfehlen dringend, den Netzwerkzugriff auf diese Ports einzuschränken, um Traffic nur zwischen den Clusterhosts zuzulassen.
Looker auf den Knoten starten
Starten Sie den Server auf jedem Knoten mit den erforderlichen Start-Flags neu.
Jeder Knoten in einem Cluster muss dieselbe Release- und Patchversion ausführen.
Verfügbare Start-Flags
Die folgende Tabelle enthält verfügbare Start-Flags, einschließlich der Flags, die zum Starten oder Zusammenführen eines Clusters erforderlich sind:
Flag | Erforderlich/Optional? | Werte | Zweck |
---|---|---|---|
--clustered |
Ja | Fügen Sie ein Flag hinzu, um anzugeben, dass dieser Knoten im Clustermodus ausgeführt wird. | |
-H oder --hostname |
Ja | 10.10.10.10 |
Der Hostname, über den andere Knoten den Knoten kontaktieren, z. B. die IP-Adresse des Knotens oder der Systemhostname. Muss sich von den Hostnamen aller anderen Knoten im Cluster unterscheiden. |
-n |
Nein | 1551 |
Der Port für die knotenübergreifende Kommunikation. Der Standardwert ist 1551. Alle Knoten müssen für die Kommunikation zwischen Knoten dieselbe Portnummer verwenden. |
-q |
Nein | 61616 |
Der Port für clusterübergreifende Ereignisse in der Warteschlange. Der Standardwert ist 61616. |
-d |
Ja | /path/to/looker-db.yml |
Der Pfad zur Datei, die die Anmeldedaten für die Looker-Anwendungsdatenbank enthält. |
--shared-storage-dir |
Ja | /path/to/mounted/shared/storage |
Die Option muss auf die frühere Einrichtung des freigegebenen Verzeichnisses verweisen, in dem sich die Verzeichnisse looker/model und looker/models-user-* befinden. |
Das Start-Flag
--clustered
sollte keinen Wert enthalten.
Beispiel für LOOKERARGS
und Angabe von Datenbankanmeldedaten
Legen Sie die Looker-Start-Flags in einer lookerstart.cfg
-Datei ab, die sich im selben Verzeichnis wie die Looker-JAR-Dateien befindet.
Beispielsweise können Sie Looker mitteilen:
- So verwenden Sie die Datei mit dem Namen
looker-db.yml
als Datenbankanmeldedaten: - dass es ein geclusterter Knoten ist und
- dass die anderen Knoten des Clusters diesen Host über die IP-Adresse 10.10.10.10 kontaktieren sollen.
Geben Sie dazu Folgendes an:
LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"
Achten Sie darauf, die richtige IP-Adresse für Ihren Knoten anzugeben.
Die Datei looker-db.yml
enthält die Datenbankanmeldedaten, z. B.:
host: your.db.hostname.com
username: db_user
database: looker
dialect: mysql
port: 3306
password: secretPassword
Wenn für Ihre MySQL-Datenbank eine SSL-Verbindung erforderlich ist, erfordert die Datei looker-db.yml
außerdem Folgendes:
ssl: true
Beachten Sie beim Speichern von Anmeldedaten in einer Datei die Best Practices für die Sicherheit. Idealerweise sollten Sie die Berechtigungen für die Datei
looker-db.yml
auf 600 festlegen. Diese gehören dem Linux-Konto, unter dem die Looker-Anwendung ausgeführt wird. Diese Datei sollte nie in ein Git-Repository eingecheckt werden.
Wenn Sie die Konfiguration nicht in der Datei looker-db.yml
auf dem Laufwerk speichern möchten, können Sie die Umgebungsvariable LOOKER_DB
so konfigurieren, dass sie eine Liste mit Schlüsseln/Werten für jede Zeile in der Datei looker-db.yml
enthält. Beispiel:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Git-SSH-Bereitstellungsschlüssel finden
Wo Looker die Git-SSH-Bereitstellungsschlüssel speichert, hängt vom Release ab, in dem das Projekt erstellt wurde:
- Bei Projekten, die vor Looker 4.8 erstellt wurden, werden die Bereitstellungsschlüssel im nativen SSH-Verzeichnis des Servers,
~/.ssh
, gespeichert. - Bei Projekten, die in Looker 4.8 oder höher erstellt wurden, werden die Bereitstellungsschlüssel in einem von Looker gesteuerten Verzeichnis
~/looker/deploy_keys/PROJECT_NAME
gespeichert.
Looker-Cluster ändern
Nachdem Sie einen Looker-Cluster erstellt haben, können Sie Knoten hinzufügen oder entfernen, ohne Änderungen an den anderen geclusterten Knoten vorzunehmen.
Cluster auf einen neuen Looker-Release aktualisieren
Aktualisierungen können Schemaänderungen an der internen Datenbank von Looker beinhalten, die mit früheren Looker-Versionen nicht kompatibel sind. Es gibt zwei Methoden, um Looker zu aktualisieren.
Sicherere Methode
- Erstellen Sie eine Sicherung der Anwendungsdatenbank.
- Alle Knoten des Clusters anhalten.
- Ersetzen Sie die JAR-Dateien auf jedem Server.
- Starten Sie die einzelnen Knoten einzeln.
Schnellere Methode
Mit dieser Methode wird die Ausfallzeit verringert. Alle Änderungen, die zwischen dem Erstellen des Replikats und dem Verweisen des Proxyservers auf die neuen Knoten vorgenommen wurden, gehen jedoch verloren. Wenn ein Nutzer beispielsweise während der Umstellung Nutzer hinzufügt oder Looks erstellt, werden diese Änderungen möglicherweise nicht in der neuen Anwendungsdatenbank erfasst.
So gehts:
- Erstellen Sie ein Replikat der Anwendungsdatenbank von Looker.
- Starten Sie einen neuen Cluster, der auf das Replikat verweist.
- Verweisen Sie den Proxyserver oder Load-Balancer auf die neuen Knoten. Danach können Sie die alten Knoten beenden.