2016-08-18 4 views
0

Ich habe eine AWS MySQL-Instanz, auf der ich Multi-AZ-Redundanz auf True festgelegt habe. Ich habe auch eine Lese-Replik, die ich für schreibgeschützte Abfragen verwenden werde. Ich verwende C3P0 als Verbindungspool. AWS gibt den Endpunkt für die Master-Instanz und für das Read-Replikat an, gibt jedoch keinen Endpunkt für den redundanten Master an. Ich erstelle zwei Verbindungspools, einen für den Lesezugriff und einen für den Schreibzugriff. Wie stelle ich sicher, dass mein Dienst den redundanten Master erreichen kann, wenn der Master ausfällt? Ich lese über die Einstellung der TTL, ich setze das auf 30. Allerdings habe ich den Master neu gestartet (und die Failover-Taste angekreuzt), aber mein Dienst konnte keine Daten schreiben, bis der Master den Neustart beendet und wieder online war. Ich verwende Guice, um die Verbindungspools in meinen Code zu injizieren.Wie Failover zu einem AWS RDS MySQL-Replikat in Java

+0

Wenn Sie das Kästchen für Failover aktiviert haben, ist der Master nie "online" zurückgekehrt. Der Master wurde zur Bereitschaftsdatenbank und die Bereitschaftsdatenbank wurde zum Master befördert. Das DNS wäre so geschaltet worden, dass die Adresse, die Sie für die Verbindung mit dem Master verwendeten, auf den neuen Master umgeschaltet hätte (alter Standby). –

+0

Sie haben Recht, ich habe die falsche Terminologie verwendet. Wie erkenne ich diesen Schalter des DNS in meinem Code? Ich setze java.security.Security.setProperty ("networkaddress.cache.ttl", "10"); wie in den AWS-Dokumenten erwähnt (sie sagten 60 Sekunden, aber ich habe es bei 10 versucht) – Mark

+0

Das sollte alles sein, was Sie tun müssen. –

Antwort

0

Ich konnte das Failover zum Funktionieren bringen. (Es hat tatsächlich funktioniert, ich habe einfach nicht lange genug gewartet, um es zu sehen). Ich hatte einige C3P0-Einstellungen, die zu hoch eingestellt waren, was dazu führte, dass C3P0 nicht sah, dass die Verbindungen fehlgeschlagen waren.