it-swarm.com.de

Es kann keine Verbindung zur RDS-Instanz von der EC2-Instanz hergestellt werden

Von der EC2-Instanz i-78a8df00 aus versuche ich, eine Verbindung zur RDS-Instanz mysql. ***********. Us-east-1.rds.amazonaws.com herzustellen. Sie befinden sich beide in der Region US-Ost. Ich habe die Sicherheitsgruppe der EC2-Instanz (sg - ********) zur RDS-Sicherheitsgruppe hinzugefügt, aber das hat nicht geholfen. Es scheint sich um ein Firewall-/DNS-Problem zu handeln, da beim Ausführen dieses Befehls eine Zeitüberschreitung auftritt:

[email protected]:~$ mysql -h mysql.************.us-east-1.rds.amazonaws.com

FEHLER 2003 (HY000): Es kann keine Verbindung zum MySQL-Server unter "mysql. ***********. Us-east-1.rds.amazonaws.com" (110) hergestellt werden.

Ich kann von meinem lokalen Computer aus über dieselbe Leitung wie oben eine Verbindung zur RDS-Instanz herstellen. Ich habe verschiedene Forum-Lösungen ausprobiert, aber diese helfen nicht.

41
Mark Shust

Es sieht so aus, als hätte Amazon irgendwann zwischen dem letzten Posting und diesem Posting das DNS-Routing-Problem behoben, da jetzt für Multi-AZ-RDS alles in Ordnung ist ...

1
Mark Shust

Ich hatte ein ähnliches Problem, als ich eine neue EC2-Instanz drehte, aber die Einstellung in der RDS-Sicherheitsgruppe für eingehende IP-Adressen, die eine Verbindung zu Port 3306 meiner RDS-Instanz herstellen dürfen, nicht geändert habe.

Das verwirrende Bit war eine Option im RDS-Dashboard, die als Sicherheitsgruppen bezeichnet wurde. Sie brauchen es nicht, um das Problem zu lösen.

Was Sie wirklich brauchen, ist eine Liste der RDS-Instanzen, klicken Sie auf die Instanz, zu der Sie eine Verbindung herstellen möchten, klicken Sie dann auf die mittlere Registerkarte, suchen Sie den Abschnitt Sicherheit und Netzwerk und klicken Sie auf den Namen der Sicherheitsgruppe.

Screenshot of RDS Dashboard

Daraufhin sollte eine neue Registerkarte oder ein neues Fenster mit Details zur Sicherheitsgruppe geöffnet werden. Suchen Sie mehrere Registerkarten im unteren Bereich, wählen Sie die Registerkarte Eingehend und klicken Sie auf die Schaltfläche Bearbeiten .

Screenshot of VPC Security groups

Ändern Sie den Wert in die IP-Adresse Ihrer EC2-Instanz oder in IPv4-CIDR-Blöcke, z.

174.33.0.0/16

Um diesen Wert zu erhalten, können Sie entweder ssh in Ihre Instanz einfügen und ifconfig ausführen oder EC2 Manager im Browser ausführen und den Wert von Private IPs in Ihrer Instanzdetails.

71
sapenov

Zusätzliche Informationen für Personen, bei denen möglicherweise ähnliche Probleme beim Herstellen einer Verbindung zu RDS oder RedShift auftreten:

1) Sicherheitsgruppen prüfen

Stellen Sie sicher, dass die Sicherheitsgruppe für die RDS-Instanz den Zugriff von der Sicherheitsgruppe aus zulässt, zu der Ihr Quellserver gehört (oder deren IP-Adresse direkt hinzugefügt wurde, wenn sie nicht zu AWS gehört). Die Sicherheitsgruppe, nach der Sie suchen sollten, ist diejenige, die in den RDS-Instanzattributen auf der Benutzeroberfläche der RDS-Konsole angegeben ist (mit dem Namen "Sicherheitsgruppe").

[~ # ~] Hinweis [~ # ~] : Die Datenbanksicherheitsgruppen können sich von den AWS EC2-Sicherheitsgruppen unterscheiden. Wenn sich Ihre RDS-Instanz in klassischem/öffentlichem EC2 befindet, sollten Sie im Abschnitt "Datenbanksicherheitsgruppe" der RDS-Benutzeroberfläche nachsehen. Für VPC-Benutzer ist die Sicherheitsgruppe eine normale VPC-Sicherheitsgruppe (der Name sg-xxx wird in den Attributen der RDS-Instanz aufgeführt).

2) Vergewissern Sie sich, dass DNS kein Problem darstellt.

Amazon verwendet Split-DNS, sodass eine externe DNS-Suche nach AWS die öffentliche IP-Adresse zurückgibt, während eine interne Suche nach AWS eine private IP-Adresse zurückgibt. Wenn Sie vermuten, dass es sich um ein DNS-Problem handelt, haben Sie bestätigt, dass unterschiedliche IP-Adressen aus unterschiedlichen Verfügbarkeitszonen zurückgegeben werden? Wenn verschiedene AZs unterschiedliche IPs erhalten, müssen Sie sich an den AWS-Support wenden.

3) Bestätigen Sie die Netzwerkverbindung, indem Sie eine Socket-Verbindung herstellen.

Tools wie tracepath und traceroute werden wahrscheinlich nicht helfen, da RDS derzeit den ICMP-Verkehr senkt.

Testen Sie die Portkonnektivität, indem Sie versuchen, eine Socket-Verbindung zur RDS-Instanz an Port 3306 (mysql oder 5432 für postgres) herzustellen. Suchen Sie zunächst die IP-Adresse der RDS-Instanz und verwenden Sie entweder telnet oder nc:

telnet x.x.x.x 3306
nc -vz x.x.x.x 3306

a) Wenn Ihr Verbindungsversuch nicht erfolgreich ist und sofort fehlschlägt, ist der Port wahrscheinlich blockiert oder der Remote-Host führt keinen Dienst auf diesem Port aus . Möglicherweise müssen Sie den AWS-Support einschalten, um weitere Fehler zu beheben. Wenn Sie eine Verbindung von außerhalb von AWS herstellen, versuchen Sie zunächst, eine Verbindung von einer anderen Instanz innerhalb von AWS herzustellen (da Ihre Firewall diese Verbindungen möglicherweise blockiert).

b) Wenn Ihre Verbindung nicht erfolgreich ist und Sie ein Timeout erhalten, werden Pakete wahrscheinlich von einer Firewall verworfen/ignoriert oder Pakete werden auf einem anderen Computer zurückgesendet Netzwerkpfad. Sie können dies bestätigen, indem Sie netstat -an | grep SYN (aus einem anderen CLI-Fenster/einer anderen CLI-Sitzung, während ausgeführt wird und auf das Timeout des Befehls telnet/nc gewartet wird). Verbindungen im SYN-Status bedeuten, dass Sie eine Verbindungsanfrage gesendet, aber nichts zurückerhalten haben (SYN_ACK oder reject/block). Normalerweise bedeutet dies, dass eine Firewall oder Sicherheitsgruppe Pakete ignoriert oder verwirft.

Stellen Sie sicher, dass Sie weder iptables noch ein NAT Gateway zwischen Ihrem Host und der RDS-Instanz verwenden. Wenn Sie sich in einer VPC befinden, stellen Sie außerdem sicher, dass Sie ausgehenden/ausgehenden Datenverkehr von der zulassen Quell-Host.

c) Wenn Ihr Socket-Verbindungstest erfolgreich war, Sie jedoch keine Verbindung mit einem MySQL-Client (CLI, Workbench, App usw.) herstellen können, nehmen Sie Schauen Sie sich die Ausgabe von netstat an, um festzustellen, in welchem ​​Zustand sich die Verbindung befindet (ersetzen Sie xxxx durch die tatsächliche IP-Adresse der RDS-Instanz):

netstat -an | grep x.x.x.x

Wenn bei Verwendung von Telnet oder NC eine Verbindung hergestellt wurde, bei Verwendung eines MySQL-Clients jedoch der Status 'SYN' angezeigt wird, ist möglicherweise ein MTU-Problem aufgetreten.

Zum Zeitpunkt der Erstellung dieses Dokuments unterstützt RDS möglicherweise keine ICMP-Pakete für PMTUD ( https://en.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD ). Dies kann ein Problem sein, wenn Sie versuchen, von einer klassischen ec2-Instanz über ClassicLink auf RDS oder RedShift in einer VPC zuzugreifen. Versuchen Sie, die MTU folgendermaßen zu senken, und wiederholen Sie den Test:

Sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
Sudo ip link set dev eth0 mtu 1400

Wenn die niedrigere MTU funktioniert hat, wenden Sie sich an den AWS-Kundensupport, um Hilfe zu erhalten, und erwähnen Sie, dass beim Versuch, eine Verbindung zu Ihrer RDS-Instanz herzustellen, ein MTU-Problem auftritt. Dies kann passieren, wenn TCP Pakete mit Kapselung für das Tunneln verpackt werden, was zu einer geringeren nutzbaren MTU für Paketdaten/Nutzdaten führt. Wenn Sie die MTU auf dem Quellserver verringern, passen die verpackten Pakete weiterhin unter die Grenze.

Wenn dies nicht funktioniert hat, setzen Sie Ihre MTU auf die Standardeinstellungen zurück und wenden Sie sich an den AWS-Support, um weitere Fehlerbehebungen vorzunehmen.

30
ives

Während Marks Problem mit Multi-AZ-Routing und EC2-Klassik zu tun zu haben schien, traf ich heute auf genau dasselbe Problem.

Um dies zu beheben, habe ich die Sicherheitsgruppe, die automatisch mit meiner RDS-Instanz erstellt wurde, geändert, indem ich die beiden privaten IP-Adressen aus meiner EC2-Instanz hinzugefügt habe.

Adding inbound rules to my RDS instance

Dies war ein ziemlich offensichtliches Problem, aber ich bin generell neu in AWS. Hoffentlich ist dies für andere wie mich nützlich.

11
lase

Anscheinend bringt Multi-AZ alles durcheinander. Da sich meine Datenbank in der Standardkonfiguration für mehrere AZ in der Region us-east-1d befand und sich meine EC2-Instanz in der Region us-east-1a befand, wurde das DNS nicht ordnungsgemäß weitergeleitet. Ich habe die RDS-Instanz als Nicht-Multi-AZ neu erstellt und sie in us-east-1a aktiviert, und alles ist zufrieden.

Wenn es Supergenies in Bezug auf DNS-Routing in AWS mit RDS-, ELB- und Multi-AZ-Funktionen gibt, wäre es ziemlich beeindruckend, zu wissen, wie dies getan wird, da dies nirgendwo in der Dokumentation von Amazon Web Service dokumentiert ist .

4
Mark Shust

Ich hatte heute das ähnliche Problem, als meine EC2-Instanz plötzlich den Zugriff auf die RDS-Instanz verlor und Wordpress nicht mehr funktionierte. Die Sicherheitsgruppen waren korrekt und ich konnte sogar von der Konsole auf der EC2-Instanz aus eine Verbindung zu MySQL herstellen, aber nicht von PHP: Aus irgendeinem Grund hat es mir geholfen, den EC2-Server neu zu starten.

1
Aleksy Goroszko