Verbindungsprobleme beheben

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 herausfinden, was schiefgelaufen ist und wo?

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 als Antwort ein ICMP Echo Reply-Paket. 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 nicht kennen, die die Quell- und Zieldatenbanken für die Kommunikation miteinander verwenden (die ausgehende IP-Adresse), führen Sie die folgenden Schritte aus:

  1. Rufen Sie in der Google Cloud Console die Seite Cluster auf:

    Zu AlloyDB for PostgreSQL-Clustern

  2. Suchen Sie den AlloyDB for PostgreSQL-Cluster, der mit dem Migrationsjob verknüpft ist, den Sie debuggen.
  3. Beide ausgehenden öffentlichen IP-Adressen werden in den Details der primären Instanz des Clusters 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

Führen Sie den Befehl telnet aus, um zu prüfen, ob Sie mit 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 AlloyDB for PostgreSQL-VPC akzeptiert werden.

Cloud Logging

Database Migration Service und AlloyDB for PostgreSQL verwenden Cloud Logging. Ausführliche Informationen finden Sie in der Cloud Logging-Dokumentation.

Logs ansehen

Sie können Logs für AlloyDB for PostgreSQL-Instanzen und andere Google Cloud-Projekte wie Cloud VPN- oder Compute Engine-Instanzen aufrufen. So rufen Sie Logs für die Logeinträge Ihrer AlloyDB for PostgreSQL-Instanz auf:

Console

  1. Zu „Log-Explorer“
  2. Wählen Sie oben auf der Seite Ihr AlloyDB for PostgreSQL-Projekt aus.
  3. Fügen Sie dem Query Builder Folgendes hinzu:
    • Ressource: Wählen Sie AlloyDB for PostgreSQL-Instanz aus. Wählen Sie im Dialogfeld Ihre AlloyDB for PostgreSQL-Instanz aus.
    • Lognamen: Scrollen Sie zum Abschnitt „AlloyDB for PostgreSQL“ und wählen Sie die entsprechenden Logdateien für Ihre Instanz aus. Beispiel:
      • alloydb.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/alloydb.googleapis.com%2Fpostgres.log" --limit=10

Private IP-Adressen

Verbindungen zu einem AlloyDB for PostgreSQL-Cluster mit einer privaten IP-Adresse werden für RFC 1918-Adressbereiche autorisiert. Wenn Ihr Netzwerk Adressbereiche außerhalb des RFC 1918-Bereichs verwendet, müssen Sie das Netzwerk-Peering aktualisieren, um Routen außerhalb des RFC 1918-Bereichs exportieren zu können. Beispiel: gcloud compute networks peerings update servicenetworking-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. Verbindungen von einer beliebigen IP-Adresse innerhalb dieses Bereichs zu AlloyDB for PostgreSQL-Clustern mit einer privaten IP-Adresse schlagen fehl.

VPN-Fehler beheben

Weitere Informationen finden Sie auf der Seite Google Cloud Cloud VPN-Fehlerbehebung.

TCP-Proxy-Fehler beheben

Die Art und Weise, wie der TCP-Proxy eingerichtet ist, kann ebenfalls zu Fehlern führen. Informationen zur Behebung von TCP-Proxy-Fehlern finden Sie in den folgenden Beispielen für Probleme und deren Behebung:

Fehler beim Starten der virtuellen Maschine (VM)

Beim Starten der VM-Instanz in Compute Engine wird die folgende Meldung angezeigt:

You do not currently have an active account selected.

Prompts zum Ausprobieren

Führen Sie einen der folgenden Befehle aus, um ein aktives Konto zu konfigurieren:

  • Führen Sie den folgenden Befehl aus, um neue Anmeldedaten abzurufen:

    gcloud auth login
    
  • Führen Sie den folgenden Befehl aus, um ein bereits authentifiziertes Konto auszuwählen:

    gcloud config set account <var>ACCOUNT</var>
    

    Ersetzen Sie ACCOUNT durch den Namen des Kontos, das Sie konfigurieren möchten.

Verbindung zur Quelldatenbankinstanz konnte nicht hergestellt werden

Beim Testen des Migrationsjobs wird die folgende Fehlermeldung angezeigt:

Failure connecting to the source database. Make sure the connectivity information on the connection profile is correct and the source database is reachable.

Prompts zum Ausprobieren

Gehen Sie die folgenden Schritte durch, um herauszufinden, wo das Problem liegen könnte:

  1. Prüfen Sie, ob die VM, die den TCP-Proxy-Container hostet, ausgeführt wird:
    1. Rufen Sie in der Google Cloud Console die Seite VM-Instanzen von Compute Engine auf.

      Zur Seite „VM-Instanzen“

    2. Suchen Sie nach der VM, die im Rahmen der Proxy-Einrichtung erstellt wurde. Wenn er nicht aufgeführt ist oder nicht ausgeführt wird, konfigurieren Sie den TCP-Proxy von Grund auf neu und aktualisieren Sie die Einstellungen des Quellverbindungsprofils im Migrationsjob mit der richtigen IP-Adresse.
  2. Wenn die VM ausgeführt wird, prüfen Sie, ob beim Herunterladen des TCP-Proxy-Container-Images ein Fehler aufgetreten ist:
    1. Wählen Sie die VM aus, die im Rahmen der TCP-Proxy-Einrichtung erstellt wurde. Klicken Sie unter Logs auf Serieller Port 1 (Konsole).
    2. Wenn Sie den Eintrag Launching user container 'gcr.io/dms-images/tcp-proxy' in den Logs nicht sehen, kann es sein, dass Ihre Instanz das Image nicht aus Container Registry abrufen konnte. Um zu prüfen, ob dies der Fall ist, stellen Sie eine Verbindung zur VM her und versuchen Sie manuell, das Image mit dem folgenden Befehl aus Container Registry abzurufen:
      docker pull gcr.io/dms-images/tcp-proxy

      Wenn der folgende Fehler angezeigt wird: Error response from daemon: Get "https://gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers), bedeutet dies, dass Ihre VM keine Verbindung zu Container Registry herstellen konnte. Wenn Ihre VM nur eine private IP-Adresse hat, müssen Sie den privaten Google-Zugriff für das Subnetz aktivieren, zu dem die IP-Adresse gehört. Andernfalls hat die VM keinen Zugriff auf Google Enterprise APIs wie Container Registry.

  3. Prüfen Sie, ob der Container eine Verbindung zur Quellinstanz herstellen kann:
    1. Wählen Sie die VM aus, die im Rahmen der Proxy-Einrichtung erstellt wurde. Klicken Sie unter Logs auf Cloud Logging.
    2. Wenn die folgende Meldung angezeigt wird: Connection refused, please verify that the machine you are using to run the script can connect to the source database at, bedeutet dies, dass der TCP-Proxy-Container keine Verbindung zur Quelldatenbankinstanz herstellen konnte. Dafür kann es mehrere Gründe geben:
      • Die IP-Adresse der Quellinstanz ist falsch.
      • Es gibt eine Firewallrichtlinie, die Verbindungen vom TCP-Proxy zur Quellinstanz ablehnt.
      • Die Quellinstanz befindet sich in einem anderen VPC-Netzwerk (Virtual Private Cloud) als die VM, auf der der TCP-Proxy gehostet wird.

    Sie können das Verbindungsproblem mit den Konnektivitätstests von Google Cloudbeheben, um sicherzustellen, dass eine Verbindung zwischen der VM, die den TCP-Proxy hostet, und der Quelldatenbank besteht:

    1. Rufen Sie in der Google Cloud Console die Seite Konnektivitätstests auf.

      Konnektivitätstests

    2. Klicken Sie auf Konnektivitätstests erstellen.
    3. Geben Sie einen Namen für den Test ein.
    4. Wählen Sie TCP als Protokoll aus.
    5. Wählen Sie in der Liste Quellendpunkt die Option IP-Adresse aus. Geben Sie die öffentliche IP-Adresse des neu erstellten TCP-Proxys ein, wenn die Quelldatenbank über eine öffentliche IP-Adresse zugänglich ist. Geben Sie andernfalls die private IP-Adresse des TCP-Proxys ein.
    6. Wählen Sie in der Liste Zielendpunkt die Option IP-Adresse aus und geben Sie die IP-Adresse der Quelldatenbank ein.
    7. Geben Sie im Feld Zielport die Portnummer ein, die für die Verbindung zur Quelldatenbank verwendet wird.
    8. Klicken Sie auf Erstellen.

    Führen Sie den Konnektivitätstest aus und beheben Sie alle auftretenden Verbindungsprobleme. Nachdem Sie das Verbindungsproblem behoben haben, prüfen Sie, ob der TCP-Proxy eine Verbindung zur Quellinstanz herstellen kann:

    1. Rufen Sie in Compute Engine die Seite VM-Instanzen auf.

      Zur Seite „VM-Instanzen“

    2. Wählen Sie die VM aus, die im Rahmen der Proxy-Einrichtung erstellt wurde. Klicken Sie unter Logs auf Cloud Logging.
    3. Wenn Sie den Logeintrag Connection to source DB verified sehen, bedeutet das, dass der TCP-Proxy jetzt eine Verbindung zur Quellinstanz herstellen kann.
  4. Prüfen Sie, ob der Migrationstest aufgrund von Verbindungsproblemen fehlschlägt.

Fehler beim Herstellen einer Verbindung zum Zieldatenbankcluster

Wenn der TCP-Proxy-Container eine Verbindung zur Quellinstanz herstellen kann, der Migrationstest aber aufgrund von Verbindungsproblemen fehlschlägt, liegt das Problem möglicherweise an der Verbindung zwischen dem AlloyDB for PostgreSQL-Zielcluster und der VM, auf der der TCP-Proxy-Container gehostet wird.

Problem beheben

Zur Fehlerbehebung können Sie mit den Konnektivitätstests von Google Cloudprüfen, ob eine Verbindung zwischen dem AlloyDB for PostgreSQL-Zielcluster und der VM besteht, auf der der TCP-Proxy gehostet wird:

  1. Rufen Sie in der Google Cloud Console die Seite Konnektivitätstests auf.

    Konnektivitätstests

  2. Klicken Sie auf Konnektivitätstests erstellen.
  3. Legen Sie die folgenden Parameter für den Test fest:
    1. Geben Sie einen Namen für den Test ein.
    2. Wählen Sie TCP als Protokoll aus.
    3. Wählen Sie in der Liste Quellendpunkt die Option IP-Adresse aus und geben Sie die IP-Adresse des neu erstellten AlloyDB for PostgreSQL-Clusters ein.
    4. Wählen Sie in der Liste Zielendpunkt die Option IP-Adresse aus und geben Sie die private IP-Adresse des TCP-Proxys ein.
    5. Geben Sie 5432 in das Feld Zielport ein.
  4. Klicken Sie auf Erstellen.
  5. Führen Sie den Konnektivitätstest aus und beheben Sie alle auftretenden Verbindungsprobleme.

Mögliche Ursachen

Es gibt eine Firewallregel, die die Kommunikation zwischen dem Zielcluster und der TCP-Proxy-VM ablehnt.

Prompts zum Ausprobieren

Fügen Sie eine Firewallregel hinzu, die es dem Zielcluster ermöglicht, über Port 5432 mit dem TCP-Proxy zu kommunizieren.

Mögliche Ursachen

Es gibt eine VPC-Abweichung zwischen dem Zielcluster und der VM, auf der der TCP-Proxy-Container ausgeführt wird.

Prompts zum Ausprobieren

Wählen Sie für den Zielcluster dieselbe VPC aus.

Probleme mit umgekehrten SSH-Tunneln beheben

SSH-Tunneling ist eine Methode, um einen Teil der Kommunikation ü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:

AlloyDB for PostgreSQL cluster ---> Compute Engine VM bastion ---> tunnel ---> source network bastion ---> source DB

Es wird Folgendes vorausgesetzt:

  • Die AlloyDB for PostgreSQL cluster kann auf die Compute Engine VM bastion zugreifen. Dazu wird das AlloyDB for PostgreSQL-Netzwerk mit dem Compute Engine-VM-Netzwerk per Peering verbunden.

  • Der source network bastion kann auf den source DB zugreifen.

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 werden und verhindern, dass der gesamte Ablauf funktioniert. Beheben Sie die Probleme mit den einzelnen Links nacheinander:

source network bastion ---> source DB

  1. Stellen Sie eine SSH-Verbindung zur source network bastion her oder über das Terminal, wenn es sich um den lokalen Computer handelt.
  2. 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 mit Connected to x.x.x.x enden.
    • 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

  1. Stellen Sie eine SSH-Verbindung zu Compute Engine VM bastion her (mit gcloud compute ssh VM_INSTANCE_NAME).
  2. 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 mit Connected to x.x.x.x enden.
    • psql -h 127.0.0.1 -p [tunnel_port] -U [username] -d [database_name]: Es sollte eine Passwortaufforderung oder die Meldung „Zugriff verweigert“ angezeigt werden.

Wenn dies fehlschlägt, müssen Sie prüfen, ob der Tunnel aktiv ist und 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.

AlloyDB for PostgreSQL cluster ---> 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 AlloyDB for PostgreSQL-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 der AlloyDB for PostgreSQL-Zielcluster verwendet.

So ermitteln Sie den internen IP-Bereich in der Console:

  1. Rufen Sie in der Google Cloud Console die Seite „VPC-Netzwerke“ auf.
  2. Wählen Sie das VPC-Netzwerk aus, das Sie verwenden möchten.
  3. Wählen Sie Zugriff auf private Dienste > Diensten zugewiesene IP-Bereiche aus.
  4. Suchen Sie den internen IP-Bereich, der mit der von servicenetworking-googleapis-com erstellten Verbindung verknüpft ist.

Sie können den Traffic zwischen dem AlloyDB for PostgreSQL-Cluster 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 vom AlloyDB for PostgreSQL-Cluster stammt. Suchen Sie in den Logs des AlloyDB for PostgreSQL-Clusters nach Traffic von der Compute Engine-VM.