MySQL-Cluster - Zwei SQL-Server, eine Anwendung - Wie sagt man der Anwendung, welcher Server gerade der Master ist?
Ich habe vor kurzem mit HIlfe von MySQL-Cluster einen HA-Cluster für meine Datenbank umsetzen können. Es funktioniert auch alles gut soweit, aber jetzt hapert es bei der Verbindung mit den Anwendungs-Servern.
Der Cluster ist folgendermaßen aufgebaut:
sql- & data-server 1 --> mysqld, ndbd --> 192.168.0.1
sql- & data-server 2 --> mysqld, ndbd --> 192.168.0.2
management-server --> ndb_mgmd, ndb_mgm --> 192.168.0.3
Das Problem ist, dass ich der Anwendung eine IP geben muss unter welcher sie die Datenbank finden kann. Verwende ich die IP des ersten SQL-Servers, geht auch alles gut solange dieser der Master ist. Im Falle eines Failover hat das aber logischerweise einen großen Haken. Denn dann ist plötzlich der zweite Server der Master. Die Anwendung versucht natürlich weiterhin auf den ersten Server zuzugreifen, was ja nicht funktionieren kann. Trage ich dann die IP des zweiten Servers manuell in der Anwendung ein, funktioniert zwar alles wieder einwandfrei, aber das ist logischerweise keine wirkliche Lösung.
Meine erste Idee war, einfach einen DNS zu verwenden und beiden Servern den selben Alias zu geben und nur diesen in der Anwendung einzutragen. Dabei taucht aber ein ähnliches Problem auf. Woher weiß der DNS welcher Server gerade der Master ist?
Ich hoffe jemand von euch kann mir bei diesem Problem weiterhelfen oder hat vielleicht eine andere Idee, wie man es lösen könnte.
Ich wäre auf jeden Fall sehr dankbar dafür.
Grüße,
Yukari
Der Cluster ist folgendermaßen aufgebaut:
sql- & data-server 1 --> mysqld, ndbd --> 192.168.0.1
sql- & data-server 2 --> mysqld, ndbd --> 192.168.0.2
management-server --> ndb_mgmd, ndb_mgm --> 192.168.0.3
Das Problem ist, dass ich der Anwendung eine IP geben muss unter welcher sie die Datenbank finden kann. Verwende ich die IP des ersten SQL-Servers, geht auch alles gut solange dieser der Master ist. Im Falle eines Failover hat das aber logischerweise einen großen Haken. Denn dann ist plötzlich der zweite Server der Master. Die Anwendung versucht natürlich weiterhin auf den ersten Server zuzugreifen, was ja nicht funktionieren kann. Trage ich dann die IP des zweiten Servers manuell in der Anwendung ein, funktioniert zwar alles wieder einwandfrei, aber das ist logischerweise keine wirkliche Lösung.
Meine erste Idee war, einfach einen DNS zu verwenden und beiden Servern den selben Alias zu geben und nur diesen in der Anwendung einzutragen. Dabei taucht aber ein ähnliches Problem auf. Woher weiß der DNS welcher Server gerade der Master ist?
Ich hoffe jemand von euch kann mir bei diesem Problem weiterhelfen oder hat vielleicht eine andere Idee, wie man es lösen könnte.
Ich wäre auf jeden Fall sehr dankbar dafür.
Grüße,
Yukari
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 130760
Url: https://administrator.de/contentid/130760
Ausgedruckt am: 23.11.2024 um 09:11 Uhr
3 Kommentare
Neuester Kommentar
Moin,
du hast da leider nur die halbe Arbeit getan.
Deine Anwendung SOLL gar nicht auf einen der Nodes zugreiffen. Wenn du das machst dann wird das natürlich nur dann gehen wenn dieser auch vorhanden ist. Und wenn der dann ordentlich unter Feuer steht langweilt sich sein Kollege immernoch.
Schalte davor mal nen Load-Balancer -> und deine Anwendung geht immer auf die IP vom LB. Das nutze ich auch in einer Testumgebung - und das läuft super. In dem Moment intressiert dich auch nicht wer hier Master ist und wer nicht - der Mgmt-Srv. sollte automatisch dafür sorgen das die Datenbestände immer gleich sind.
Und wenn du es dann noch ganz schön machen möchtest dann nimmst du auf dem LB noch nen Heartbeat drauf und machst DA den Eintrag das beim Ausfall des LB-1 der LB-n zum Master wird (inkl. übernahme der IP usw.).
Und: Nicht vergessen: Was passiert wenn dein Mgmt-Server ausfällt?
du hast da leider nur die halbe Arbeit getan.
Deine Anwendung SOLL gar nicht auf einen der Nodes zugreiffen. Wenn du das machst dann wird das natürlich nur dann gehen wenn dieser auch vorhanden ist. Und wenn der dann ordentlich unter Feuer steht langweilt sich sein Kollege immernoch.
Schalte davor mal nen Load-Balancer -> und deine Anwendung geht immer auf die IP vom LB. Das nutze ich auch in einer Testumgebung - und das läuft super. In dem Moment intressiert dich auch nicht wer hier Master ist und wer nicht - der Mgmt-Srv. sollte automatisch dafür sorgen das die Datenbestände immer gleich sind.
Und wenn du es dann noch ganz schön machen möchtest dann nimmst du auf dem LB noch nen Heartbeat drauf und machst DA den Eintrag das beim Ausfall des LB-1 der LB-n zum Master wird (inkl. übernahme der IP usw.).
Und: Nicht vergessen: Was passiert wenn dein Mgmt-Server ausfällt?