# Java-Programm Clusterfähig machen



## shaper (26. Nov 2004)

Hallo,

ich habe ein Programm entwickelt, welches als Sender und Receiver für spezielle Datagrams (UDP-Pakete) fungiert.
Nun soll das Programm auf einen AIX Cluster (2 Nodes) zum Laufen gebracht werden, nur leider habe ich überhaupt keine Ahnung wie ich das realisieren könnte. Auf dem Cluster steht lediglich JDK 1.4 zur Verfügung, ist es damit überhaupt möglich, "richtiges" Clustering unter Java hinzubekommen? 

Wenn es nicht geht müsste ich in meinem Programm darauf reagieren, wenn plötzlich die IP-Adresse (und damit der Socket) weg ist (umgezogen), aber ob das sauber und fehlerfrei läuft ist sehr fraglich, wie ich finde.

Vielen Dank für Eure Hilfe.

Gruß
Sven


----------



## Craven (4. Dez 2004)

Hi!

Um unter AIX (ich hoffe für Dich 5.2) richtiges Clustering hinzubekommen brauchst Du HACMP/ES! Damit kann ein ganz normales Programm im Cluster laufen!

Allerdings ist dieses Teil richtig teuer (von IBM). Eine einfache Möglichkeit, wenn es um Ausfallsicherheit geht, ist:

1. Agent schreiben, der im xx Sekunden Takt feststellt, ob Dein Programm noch funktioniert
2. Agent muß auf der Maschine liegen, die beim Ausfall einspringen soll
3. Wenn Programm nicht mehr reagiert, dann muß Dein Programm gestartet werden.
4. Umhängen des DNS Eintrags.
oder
4. per Skript auf dem Ersatzrechner den Hostnamen und IP-Adresse auf den Primary-Host ändern und neu booten.

Durch die Aktion hättest Du vielleicht eine Gesamtausfallzeit von 10 Min.

Gruß

Craven


----------



## shaper (6. Dez 2004)

Hallo Craven,

danke für die Antwort. Das HACMP ist vorhanden, ist also kein Problem. Bloß wie bekomme ich mein Programm unter HACMP zum Laufen? Muss ich das irgendwo konfigurieren?

Ich habe jetzt folgende Lösung:
Da mein Programm einen DatagramChannel benutzt (DatagramSocket), benötige ich einen dauerhaften
Empfangs-Socket mit dem ich auf eingehende Pakete höre. Ist nun diese Empfangs-IP-Adresse (auf Node 1) nicht mehr verfügbar (Abfangen der java.net.BindException) geht mein Programm in den "Schlafmodus". In diesem Moment greift das andere Programm auf dem anderen Knoten (Node 2) zu und bindet einen Socket an diese IP-Adresse, da sie umgezogen ist und dort verfügbar ist.
Sobald die IP-Adresse wieder auf Node 1 verfügbar ist, wird das Programm reaktiviert (ich prüfe im Sekundentakt im Schlafmodus die Verfügbarkeit der IP-Adresse). Das Programm auf Node 2 geht jetzt in den Schlafmodus.

So könnte es funktionieren, jedoch ist diese Lösung eine Krücke, finde ich. Man sollte das Handling des Umziehens doch komplett dem Cluster-Handler überlassen. Bloß wie sage ich ihm, dass er mein Java-Programm mit umziehen lassen soll?

Danke & Gruß
Sven


----------

