yukari
Goto Top

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

Content-ID: 130760

Url: https://administrator.de/contentid/130760

Ausgedruckt am: 23.11.2024 um 09:11 Uhr

maretz
maretz 02.12.2009 um 15:51:12 Uhr
Goto Top
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?
Yukari
Yukari 02.12.2009 um 16:17:26 Uhr
Goto Top
Zitat von @maretz:

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.

Genau das ist ja mein Problem.

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.

Hm, das wäre natürlich auch eine Option. Die Frage ist nur, wie ich das umsetzen kann. Die Anwendungs-Server habe ich bereits mit Hilfe des Windows NLB-Managers verbunden. Die SQL-Server laufen aber unter Linux, da der MySQL-Cluster nicht für Windows empfohlen wird.
Bei Linux habe ich aber wiederum gar keine Ahnung, wie ich da ein Loadbalancing erreichen kann.
Klar, es gibt Hardware-Lösungen, aber im Moment muss ich mich erstmal auf Software-Lösungen beschränken. Hast du da vielleicht einen Tipp für mich?

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.

Wenn ich das richtig beobachtet habe, kümmert sich der Management-Server garnicht darum. Den brauche ich eigentlich nur am Anfang um die Verbindung zwischen den beiden SQL-Servern herzustellen. Wenn die einmal laufen, kann ich den Management-Server eigentlich auch aus- oder einschalten wie ich lustig bin. Die Datenbanken sind dann immernoch synchron. Ein Ausfall ist also nicht sofort gravierend, sondern nur dann falls gleichzeitig einer der SQL-Server ausfällt. Der kann die Verbindung zum Cluster dann soweit ich weiß nur wieder herstellen, wenn der Management-Server da ist.

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.).

Es gibt beim Loadbalancing einen Master? Ich kenne mich damit noch nicht so gut aus, da ich bisher wie gesagt nur eine Lösung mit Windows probiert hatte für die Anwendungsserver. Ich habe dabei noch nicht alle Situationen getestet, aber wenn ich das richtig sehe, sind die Hosts da relativ gleichwertig.
Wenn ich sie konfiguriert habe, ist es bisher egal gewesen ob nur einer da ist anfangs und den anderen erst später hochfahre. Sobald beide da sind und eine Netzwerkverbindung haben scheinen die die Verbindung automatisch herzustellen. Eine Art Master konnte ich dabei nicht erkennen.

Und: Nicht vergessen: Was passiert wenn dein Mgmt-Server
ausfällt?

Siehe weiter oben.
Yukari
Yukari 07.12.2009 um 15:41:15 Uhr
Goto Top
Ist zwar nicht gelöst, aber hat sich mittlerweile erledigt ^^ da ich auf Windows umsteigen muss (Anweisung von oben)