In dieser Anleitung wird die empfohlene Methode zum Erstellen einer Looker-Clusterkonfiguration für vom Kunden gehostete Instanzen erläutert.
Überblick
Vom Kunden gehostete Bereitstellungen von Looker können mit einem oder mehreren Knoten ausgeführt werden:
- Eine Looker-Anwendung mit einem einzelnen Knoten, die Standardkonfiguration, umfasst alle Dienste, aus denen die Looker-Anwendung besteht, die auf einem einzigen Server ausgeführt werden.
- Eine Looker-Clusterkonfiguration 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 Looker-Clusteranwendung ist ein Server, auf dem eine einzelne Looker-Instanz ausgeführt wird.
Es gibt zwei Hauptgründe, warum ein Unternehmen Looker als Cluster ausführen möchte:
- Load Balancing
- Verbesserte Verfügbarkeit und Failover
Je nach Skalierungsproblemen bietet ein Looker-Cluster 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 Speicher für den Looker-Prozess zu erhöhen.
Alternativen für das Load-Balancing
Erwägen Sie vor dem Load-Balancing von Looker, den Arbeitsspeicher und möglicherweise die CPU-Anzahl eines einzelnen Servers zu erhöhen, auf dem Looker ausgeführt wird. Looker empfiehlt, eine detaillierte Leistungsüberwachung für die Arbeitsspeicher- und CPU-Auslastung einzurichten, um sicherzustellen, dass der Looker-Server für seine Arbeitslast richtig dimensioniert ist.
Große Abfragen benötigen für eine bessere Leistung mehr Arbeitsspeicher. Clustering kann zu Leistungssteigerungen führen, wenn viele Nutzer kleine Abfragen ausführen.
Bei Konfigurationen mit bis zu 50 Nutzern, die Looker wenig verwenden, empfiehlt Looker, einen einzelnen Server auf dem Äquivalent einer großen AWS EC2-Instanz auszuführen (M4.large: 8 GB RAM, 2 CPU-Kerne). Prüfen Sie bei Konfigurationen mit mehr oder vielen aktiven Powerusern, ob die CPU stark ansteigt oder ob Nutzer eine langsame Anwendung feststellen. Wenn ja, verschieben Sie Looker auf einen größeren Server oder führen Sie eine Looker-Clusterkonfiguration aus.
Verbesserte Verfügbarkeit/Failover
Das Ausführen von Looker in einer Cluster-Umgebung kann Ausfallzeiten bei einem Ausfall reduzieren. Hochverfügbarkeit ist besonders wichtig, wenn die Looker API in zentralen Geschäftssystemen verwendet oder in kundenseitige Produkte eingebettet ist.
In einer Looker-Clusterkonfiguration leitet ein Proxyserver oder Load-Balancer den Traffic um, wenn festgestellt wird, dass ein Knoten ausgefallen ist. Looker sorgt automatisch für Knoten, die den Cluster verlassen und ihm beitreten.
Erforderliche Komponenten
Die folgenden Komponenten sind für eine Looker-Clusterkonfiguration 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 zeigt, wie die Komponenten interagieren. Auf übergeordneter Ebene verteilt ein Load-Balancer den Netzwerktraffic auf geclusterte Looker-Knoten. Die Knoten kommunizieren jeweils mit einer freigegebenen MySQL-Anwendungsdatenbank, einem freigegebenen Speicherverzeichnis und den Git-Servern für jedes LookML-Projekt.
MySQL-Anwendungsdatenbank
Looker verwendet eine Anwendungsdatenbank (häufig als interne Datenbank bezeichnet), die Anwendungsdaten enthält. Wenn Looker als Anwendung mit einem Knoten ausgeführt wird, verwendet es normalerweise eine speicherinterne HyperSQL-Datenbank.
In einer Looker-Clusterkonfiguration muss die Looker-Instanz jedes Knotens auf eine freigegebene Transaktionsdatenbank verweisen (die gemeinsam genutzte Anwendung oder interne Datenbank). Die Anwendungsdatenbank für Looker-Cluster-Cluster wird wie folgt unterstützt:
- Für die Anwendungsdatenbank für Looker-Clusterinstanzen wird nur MySQL unterstützt. Amazon Aurora und MariaDB werden nicht unterstützt.
- Die MySQL-Versionen 5.7 und 8.0 und höher werden unterstützt.
- Geclusterte Datenbanken wie Galera werden nicht unterstützt.
Looker verwaltet nicht die Wartung und Sicherungen dieser Datenbank. 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 in der Lage sein, einander und die Looker-Anwendungsdatenbank zu erreichen. Die Standardports werden auf dieser Seite unter Ports für die Knoten zur Kommunikation öffnen aufgeführt.
Load-Balancer
Um die Last auszugleichen oder Anfragen an verfügbare Knoten weiterzuleiten, 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 Knotenausfall muss der Load-Balancer so konfiguriert sein, dass der Traffic an die verbleibenden fehlerfreien Knoten umgeleitet wird.
Achten Sie bei der Auswahl und Konfiguration des Load-Balancers darauf, dass er so konfiguriert werden kann, dass er nur als Ebene 4 betrieben wird. Ein solches Beispiel ist der Amazon Classic ELB. Darüber hinaus sollte der Load-Balancer ein langes Zeitlimit (3.600 Sekunden) haben, um zu verhindern,dass Abfragen abgebrochen werden.
Freigegebenes Dateisystem
Sie müssen ein POSIX-konformes freigegebenes Dateisystem verwenden (z. B. NFS, AWS EFS, Gluster, BeeGFS, Lustre). Looker nutzt das freigegebene Dateisystem als Repository für verschiedene Informationen, die von allen Knoten im Cluster verwendet werden.
Looker-Anwendung (ausführbare JAR-Datei)
Sie müssen eine JAR-Datei der Looker-Anwendung mit Looker 3.56 oder höher verwenden.
Looker empfiehlt dringend, auf allen Knoten in einem Cluster dieselbe Looker-Release und Patchversion auszuführen, wie im Abschnitt Looker auf den Knoten starten auf dieser Seite beschrieben.
Cluster einrichten
Folgende Aufgaben sind erforderlich:
- Looker installieren
- MySQL-Anwendungsdatenbank einrichten
- Freigegebenes Dateisystem einrichten
- Geben Sie das SSH-Schlüssel-Repository frei (je nach Situation).
- Ports öffnen, damit die Knoten kommunizieren können
- Looker auf den Knoten starten
Looker installieren
Prüfen Sie, ob Looker auf jedem Knoten installiert ist. Verwenden Sie dazu die JAR-Dateien der Looker-Anwendung und die Anleitung auf der Dokumentationsseite Vom Kunden gehostete Installationsschritte.
MySQL-Anwendungsdatenbank einrichten
Für eine Looker-Clusterkonfiguration muss die Anwendungsdatenbank eine MySQL-Datenbank sein. Wenn Sie eine vorhandene nicht geclusterte Looker-Instanz haben, die HyperSQL für die Anwendungsdaten verwendet, müssen Sie die Anwendungsdaten von den HyperSQL-Daten in Ihre neue freigegebene MySQL-Anwendungsdatenbank migrieren.
Informationen zum Sichern von Looker und zum Migrieren der Anwendungsdaten von HyperSQL zu MySQL finden Sie auf der Dokumentationsseite Migration zu MySQL.
Freigegebenes Dateisystem einrichten
Nur bestimmte Dateitypen – Modelldateien, Bereitstellungsschlüssel, Plug-ins und ggf. Anwendungsmanifestdateien – gehören in das freigegebene 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 haben, das auf das Looker-Nutzerkonto
su
. - Melden Sie sich auf dem Server für das freigegebene Dateisystem im Looker-Nutzerkonto an.
- Wenn Looker ausgeführt wird, beenden Sie die Looker-Konfiguration.
- Wenn Sie zuvor Clustering mit inotify Linux Scripts ausgeführt haben, beenden Sie diese Scripts, entfernen Sie sie aus Cron und löschen Sie sie.
- Erstellen Sie eine Netzwerkfreigabe und stellen Sie sie auf jedem Knoten im Cluster bereit. Achten Sie darauf, dass er für die automatische Bereitstellung auf jedem Knoten konfiguriert ist und dass der Looker-Nutzer Lese- und Schreibzugriff darauf hat. Im folgenden Beispiel heißt die Netzwerkfreigabe
/mnt/looker-share
. Kopieren Sie die Bereitstellungsschlüssel auf einem Knoten und verschieben Sie die Plug-ins sowie 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 durch Aktualisierungen beeinflusst werden. Wenn IhreLOOKERARGS
nicht in dieser Datei aufgeführt sind, hat sie möglicherweise jemand direkt dem$HOME/looker/looker
-Shell-Skript hinzugefügt.Jeder Knoten im Cluster muss in ein eindeutiges
/log
-Verzeichnis oder mindestens eine eindeutige Logdatei schreiben.
SSH-Schlüssel-Repository freigeben
- Sie erstellen einen freigegebenen Dateisystemcluster aus einer vorhandenen Looker-Konfiguration.
- Sie haben Projekte, die in Looker 4.6 oder älter erstellt wurden.
Richten Sie das SSH-Schlüssel-Repository ein, das freigegeben werden soll:
Erstellen Sie auf dem freigegebenen Dateiserver ein Verzeichnis mit dem Namen
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 lauten. Verzeichnisse über dem Verzeichnisssh-share
(z. B./mnt
und/mnt/looker-share
) dürfen nicht weltbeschreibbar oder gruppenbeschreibbar sein.Kopieren Sie auf einem Knoten den Inhalt von
$HOME/.ssh
in das neuessh-share
-Verzeichnis. 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 unbedingt für jeden Knoten aus.
Ports öffnen, damit die Knoten kommunizieren können
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 mithilfe der 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.
Verfügbare Start-Flags
Die folgende Tabelle zeigt die verfügbaren Start-Flags, einschließlich der Flags, die zum Starten oder Beitreten eines Clusters erforderlich sind:
Flag | Erforderlich/Optional? | Werte | Zweck |
---|---|---|---|
--clustered |
Ja | Flag hinzufügen, um anzugeben, dass dieser Knoten im Clustermodus ausgeführt wird. | |
-H oder --hostname |
Ja | 10.10.10.10 |
Der Hostname, mit dem andere Knoten diesen Knoten kontaktieren, z. B. die IP-Adresse des Knotens oder seinen Systemhostnamen. Muss sich von den Hostnamen aller anderen Knoten im Cluster unterscheiden. |
-n |
Nein | 1551 |
Der Port für die Kommunikation zwischen Knoten. Der Standardwert ist 1551. Alle Knoten müssen dieselbe Portnummer für die Kommunikation zwischen Knoten verwenden. |
-q |
Nein | 61616 |
Der Port für die Warteschlange von clusterweiten Ereignissen. Der Standardwert ist 61616. |
-d |
Ja | /path/to/looker-db.yml |
Der Pfad zu der Datei, die die Anmeldedaten für die Looker-Anwendungsdatenbank enthält. |
--shared-storage-dir |
Ja | /path/to/mounted/shared/storage |
Die Option sollte auf die oben auf dieser Seite festgelegte Einrichtung des freigegebenen Verzeichnisses verweisen, in der sich die Verzeichnisse looker/model und looker/models-user-* befinden. |
Beispiel für LOOKERARGS
und Angabe von Datenbankanmeldedaten
Platzieren Sie die Looker-Start-Flags in einer lookerstart.cfg
-Datei, die sich im selben Verzeichnis wie die Looker-JAR-Dateien befindet.
So können Sie Looker beispielsweise Folgendes mitteilen:
- So verwenden Sie die Datei mit dem Namen
looker-db.yml
als Datenbankanmeldedaten: - dass es sich um einen geclusterten Knoten handelt.
- dass die anderen Knoten des Clusters diesen Host über die IP-Adresse 10.10.10.10 kontaktieren sollen.
Dabei würden Sie Folgendes angeben:
LOOKERARGS="-d looker-db.yml --clustered -H 10.10.10.10"
Die Datei looker-db.yml
würde die Anmeldedaten für die Datenbank enthalten, 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
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 für jede Zeile in der Datei looker-db.yml
eine Liste von Schlüsseln und Werten enthält. Beispiel:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Git-SSH-Bereitstellungsschlüssel finden
Wo Looker 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 integrierten SSH-Verzeichnis des Servers gespeichert:
~/.ssh
. - 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 in der internen Datenbank von Looker umfassen, die nicht mit früheren Versionen von Looker kompatibel sind. Es gibt zwei Methoden zum Aktualisieren von Looker.
Sicherere Methode
- Erstellen Sie eine Sicherung der Anwendungsdatenbank.
- Beenden Sie alle Clusterknoten.
- Ersetzen Sie die JAR-Dateien auf jedem Server.
- Starten Sie jeden Knoten einzeln.
Schnellere Methode
So aktualisieren Sie mit dieser schnelleren, aber weniger vollständigen Methode:
- Erstellen Sie ein Replikat der Looker-Anwendungsdatenbank.
- Starten Sie einen neuen Cluster, der auf das Replikat verweist.
- Verweisen Sie den Proxyserver oder Load-Balancer auf die neuen Knoten. Anschließend können Sie die alten Knoten beenden.