Verbindung debuggen
Sie haben die Verbindung zwischen Ihren Quell- und Zieldatenbanken eingerichtet, aber woher wissen Sie, dass sie verbunden sind? Wenn die Kommunikation zwischen ihnen fehlschlägt, wie können Sie dann herausfinden, was wo schiefgelaufen ist?
Die grundlegendsten Tools sind ping und traceroute.
Ping
Ping führt einen einfachen Test durch, um festzustellen, ob das Ziel („Remote-Host“) von der Quelle aus verfügbar ist. Ping sendet ein ICMP Echo Request-Paket an einen Remote-Host und erwartet im Gegenzug ein ICMP Echo Reply. Wenn ping nicht erfolgreich ist, gibt es keine Route von der Quelle zum Ziel. Erfolg bedeutet jedoch nicht, dass Ihre Pakete durchkommen, sondern nur, dass der Remote-Host im Allgemeinen erreicht werden kann.
ping kann erkennen, ob ein Host aktiv ist und antwortet, aber es ist nicht garantiert, dass er zuverlässig ist. Einige Netzwerkanbieter blockieren ICMP als Vorsichtsmaßnahme, um das Debugging von Verbindungen zu vereinfachen.
Traceroute
Traceroute prüft die vollständigen Routen-Netzwerkpakete von einem Host zu einem anderen. Es werden alle Schritte ("Hops") angezeigt, die das Paket durchläuft, und wie lange jeder Schritt dauert. Wenn das Paket nicht den gesamten Weg durchläuft, wird traceroute nicht abgeschlossen, endet aber mit einer Reihe von Sternchen. Suchen Sie in diesem Fall die letzte IP-Adresse, die erfolgreich erreicht wurde. Hier ist die Verbindung unterbrochen.
Bei Traceroute kann es zu Zeitüberschreitungen kommen. Es kann möglicherweise auch nicht abgeschlossen werden, wenn ein Gateway nicht korrekt konfiguriert ist, um das Paket an den nächsten Hop zu übergeben.
Wenn traceroute nicht abgeschlossen werden kann, können Sie möglicherweise herausfinden, wo es beendet wurde. Suchen Sie die letzte IP-Adresse, die in der Ausgabe von traceroute aufgeführt ist, und führen Sie eine Browsersuche nach who owns [IP_ADDRESS] durch. Es kann vorkommen, dass der Inhaber der Adresse nicht angezeigt wird, aber ein Versuch lohnt sich.
mtr
Das mtr-Tool ist eine Form von traceroute, die weiterhin aktiv ist und kontinuierlich aktualisiert wird, ähnlich wie der Befehl top für lokale Prozesse.
Lokale IP-Adresse ermitteln
Wenn Sie die lokale Adresse Ihres Hosts nicht kennen, führen Sie den Befehl ip -br address show aus. Unter Linux zeigt dies die Netzwerkschnittstelle, den Status der Schnittstelle, die lokale IP-Adresse und die MAC-Adressen. Beispiel: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.
Alternativ können Sie ipconfig oder ifconfig ausführen, um den Status Ihrer Netzwerkschnittstellen aufzurufen.
Ausgehende IP-Adresse ermitteln
Wenn Sie die IP-Adresse, die die Quell- und Zieldatenbanken für die Kommunikation miteinander verwenden (die ausgehende IP-Adresse), nicht kennen, führen Sie die folgenden Schritte aus:
- Rufen Sie in der Google Cloud Console die Seite „SQL-Instanzen“ auf.
- Klicken Sie auf den Namen der Instanz, die mit dem Migrationsjob verknüpft ist, den Sie debuggen.
- Scrollen Sie nach unten, bis der Bereich Mit dieser Instanz verbinden angezeigt wird. In diesem Bereich wird die ausgehende IP-Adresse angezeigt.
Lokale Ports öffnen
Mit dem Befehl ss -tunlp4 können Sie prüfen, ob der Host tatsächlich die Ports überwacht, von denen Sie dies annehmen. So sehen Sie, welche Ports offen sind und überwacht werden.
Wenn Sie beispielsweise eine PostgreSQL-Datenbank ausführen, sollte Port 5432 aktiv sein und überwacht werden. Für SSH sollte der Port 22 angezeigt werden.
Alle lokalen Portaktivitäten
Rufen Sie mit dem Befehl netstat alle lokalen Portaktivitäten auf. Beispiel: netstat -lt zeigt alle derzeit aktiven Ports an.
Verbindung zum Remote-Host über Telnet herstellen
Prüfen Sie mit dem Befehl telnet, ob Sie über TCP eine Verbindung zum Remote-Host herstellen können. Telnet versucht, eine Verbindung zu der von Ihnen angegebenen IP-Adresse und zum Port herzustellen.
Wenn auf Ihrem Remote-Host beispielsweise eine PostgreSQL-Datenbank ausgeführt wird, sollten Sie über Port 5432 eine Telnet-Verbindung herstellen können:
telnet 35.193.198.159 5432.
Bei Erfolg wird Folgendes angezeigt:
Trying 35.193.198.159... Connected to 35.193.198.159.
Bei einem Fehler reagiert telnet nicht mehr, bis Sie den Versuch erzwingen:
Trying 35.193.198.159... ^C
Clientauthentifizierung
Die Clientauthentifizierung wird durch eine Konfigurationsdatei mit dem Namen pg_hba.conf gesteuert. HBA steht für die hostbasierte Authentifizierung.
Achten Sie darauf, dass der Abschnitt für Replikationsverbindungen der Datei pg_hba.conf in der Quelldatenbank aktualisiert wurde, sodass Verbindungen aus dem IP-Adressbereich der Cloud SQL-VPC akzeptiert werden.
Cloud Logging
Database Migration Service und Cloud SQL verwenden Cloud Logging. Ausführliche Informationen finden Sie in der Cloud Logging-Dokumentation und in den Cloud SQL-Beispielabfragen.
Logs ansehen
Sie können Logs für Cloud SQL-Instanzen und andere Google Cloud-Projekte wie Cloud VPN- oder Compute Engine-Instanzen aufrufen. So rufen Sie Logs für die Logeinträge Ihrer Cloud SQL-Instanz auf:
Console
- Zu „Log-Explorer“
- Wählen Sie oben auf der Seite ein vorhandenes Cloud SQL-Projekt aus.
- Fügen Sie dem Query Builder Folgendes hinzu:
- Ressource: Wählen Sie Cloud SQL-Datenbank aus. Wählen Sie im Dialogfeld eine Cloud SQL-Instanz aus.
- Lognamen: Scrollen Sie zum Abschnitt "Cloud SQL" und wählen Sie die entsprechenden Logdateien für Ihre Instanz aus. Beispiel:
cloudsql.googleapis.com/postgres.log
- Schweregrad: Wählen Sie eine Logebene aus.
- Zeitraum: Wählen Sie eine Voreinstellung aus oder erstellen Sie einen benutzerdefinierten Zeitraum.
gcloud
Verwenden Sie den Befehl gcloud logging, um Logeinträge aufzurufen. Ersetzen Sie im folgenden Beispiel PROJECT_ID.
Das Flag limit ist ein optionaler Parameter, der die maximale Anzahl von zurückzugebenden Einträgen angibt.
gcloud logging read "projects/[PROJECT_ID]/logs/cloudsql.googleapis.com/postgres.log" --limit=10
Private IP-Adressen
Verbindungen zu einer Cloud SQL-Instanz mit einer privaten IP-Adresse werden für RFC 1918-Adressbereiche automatisch autorisiert.
Adressen außerhalb des RFC 1918-Bereichs müssen in Cloud SQL als autorisierte Netzwerke konfiguriert sein.
Sie müssen auch das Netzwerk-Peering auf Cloud SQL aktualisieren, um alle Routen außerhalb des RFC 1918-Bereichs exportieren zu können. Beispiel: gcloud compute networks peerings update cloudsql-postgres-googleapis-com --network=NETWORK --export-subnet-routes-with-public-ip --project=PROJECT.
Der IP-Bereich 172.17.0.0/16 ist für das Docker-Brückennetzwerk reserviert. Cloud SQL-Instanzen, die mit einer IP-Adresse in diesem Bereich erstellt werden, sind nicht erreichbar. Verbindungen von einer beliebigen IP-Adresse innerhalb dieses Bereichs zu Cloud SQL-Instanzen mit privaten IP-Adressen schlagen fehl.
VPN-Fehler beheben
Weitere Informationen finden Sie auf der Seite Google Cloud Cloud VPN-Fehlerbehebung.
Probleme mit umgekehrten SSH-Tunneln beheben
SSH-Tunneling ist eine Methode, um bestimmte Kommunikationsdaten über eine SSH-Verbindung weiterzuleiten. Mit dem umgekehrten SSH-Tunneling können Sie einen SSH-Tunnel einrichten, wobei das Zielnetzwerk die Tunnelverbindung initiiert. Das ist nützlich, wenn Sie aus Sicherheitsgründen keinen Port in Ihrem eigenen Netzwerk öffnen möchten.
Sie möchten Folgendes einrichten:
Cloud SQL DB ---> Compute Engine VM bastion ---> tunnel ---> source network bastion ---> source DB
Es wird Folgendes vorausgesetzt:
Der Compute Engine VM bastion kann auf den Cloud SQL DB zugreifen.
Die source network bastion kann auf die source DB zugreifen. Dazu wird das Cloud SQL-Netzwerk mit dem Compute Engine-VM-Netzwerk per Peering verbunden.
Anschließend richten Sie einen SSH-Tunnel von der source network bastion zur Compute Engine VM bastion ein, der alle eingehenden Verbindungen zu einem Port auf der Compute Engine VM bastion über den Tunnel zur source DB weiterleitet.
Jeder Link im obigen Szenario kann falsch eingerichtet sein und verhindern, dass der gesamte Ablauf funktioniert. Beheben Sie die Probleme mit den einzelnen Links nacheinander:
source network bastion ---> source DB
- Stellen Sie eine SSH-Verbindung zur source network bastion her oder über das Terminal, wenn es sich um den lokalen Computer handelt.
- Testen Sie die Verbindung zur Quelldatenbank mit einer der folgenden Methoden:
telnet [source_db_host_or_ip] [source_db_port]: Es sollten die Telnet-Verbindungsstrings angezeigt werden, die mitConnected to x.x.x.xenden.psql -h [source_db_host_or_ip] -p [source_db_port] -U [username] -d [database_name]: Sie sollten eine Passwortaufforderung oder die Meldung „Zugriff verweigert“ sehen.
Wenn dies fehlschlägt, müssen Sie prüfen, ob Sie den Zugriff von dieser Bastion auf die Quelldatenbank aktiviert haben.
Compute Engine VM bastion ---> source DB
- Stellen Sie eine SSH-Verbindung zu Compute Engine VM bastion her (mit
gcloud compute ssh VM_INSTANCE_NAME). - Testen Sie die Verbindung zur Quelldatenbank mit einer der folgenden Methoden:
telnet 127.0.0.1 [tunnel_port]: Es sollten die Telnet-Verbindungsstrings angezeigt werden, die mitConnected to x.x.x.xenden.psql -h 127.0.0.1 -p [tunnel_port] -U [username] -d [database_name]: Sie sollten eine Passwortaufforderung oder die Meldung „Zugriff verweigert“ sehen.
Wenn dies fehlschlägt, müssen Sie prüfen, ob der Tunnel ordnungsgemäß funktioniert.
Wenn Sie sudo netstat -tupln ausführen, werden alle überwachenden Prozesse auf dieser VM angezeigt. Sie sollten sshd listening on the tunnel_port sehen.
Cloud SQL DB ---> source DB
Dies lässt sich am besten mit testing the migration job von Database Migration Service testen.
Wenn dies fehlschlägt, liegt ein Problem mit dem VPC-Peering oder dem Routing zwischen dem Cloud SQL-Netzwerk und dem Compute Engine VM bastion-Netzwerk vor.
Die Firewall des Quelldatenbankservers muss so konfiguriert sein, dass sie den gesamten internen IP-Adressbereich zulässt, der für die private Dienstverbindung des VPC-Netzwerk zugewiesen ist, das die Cloud SQL-Zielinstanz als Feld privateNetwork ihrer ipConfiguration-Einstellungen verwendet.
So ermitteln Sie den internen IP-Bereich in der Console:
- Rufen Sie in der Google Cloud Console die Seite „VPC-Netzwerke“ auf.
- Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
- Wählen Sie Zugriff auf private Dienste > Diensten zugewiesene IP-Bereiche aus.
- Suchen Sie den internen IP-Bereich, der mit der von servicenetworking-googleapis-com erstellten Verbindung verknüpft ist.
Sie können den Traffic zwischen der Cloud SQL-Instanz und der Compute Engine-VM-Instanz auch in der Cloud Logging-Konsole im Projekt Cloud VPN gateway aufrufen. Suchen Sie in den Compute Engine-VM-Logs nach Traffic, der von der Cloud SQL-Instanz stammt. Suchen Sie in den Logs der Cloud SQL-Instanz nach Traffic von der Compute Engine-VM.