Windows Server 2012 R2 Java-Programm redundant auf einem Windows Server betreiben

B

Berlin20133

Gast
Hallo,
gleich vorweg: es handelt sich um eine Anfrage für ein privates Uni-Projekt und um kein Produktivsystem. Es geht prinzipiell nur um die Machbarkeit und wie ich meine Angelegenheit einfach umsetzen kann. Windows-Lizenzen
sind durch Dreamspark alle vorhanden.


Ich suche gerade nach einer Möglichkeit, um ein Java-Programm redudant auf einem Windows Server auszuführen.
Die Idee wäre, dass wenn das Programm auf Server A nicht mehr ansprechbar oder eine hohe Auslastung hat/ist, Server B Anfragen übernehmen kann, die Server A erreichen. Ich habe mich gerade schon auf NLB und Failover-Cluster eingelesen, aber die scheinen nur in Zusammenspiel mit anderen Windowsdiensten (SQL-Server, etc.) zu arbeiten.
Kann man sowas mit Windows Boardmitteln realisieren?

Bisher gibt es eine solche Lösung nur in der Google Cloud, was ich kenne. Man kann eine Gruppe von VMs erzeugen. Die Google Cloud führt dann in einem gewissen Intervall HTTP-Abfragen an den Servern durch, ob diese noch leben. Wenn ein Server nicht mehr mit einem HTTP-Statuscode 200 antwortet, wird automatisch eine neue VM aus einem Image erstellt.
In meinem Fall könnte ich ein eigenes Image anlegen, was mein Java-Programm beinhaltet und was gestartet wird, sobald die VM angelegt und gestartet wurde. Ich habe allerdings programmiertechnisch gerade das Problem, einen entsprechenden HTTP-Paser in mein Java-Programm einzubauen. Daher die Frage, ob ich Redudanz für das Java-Programm mit Windows-Boardmitteln hinbekomme?
Ich möchte halt, dass immer mindestens 1 Server erreichbar ist. Momentan kann ich die Redundanz einfach so kreieren, in dem das Java-Programm auf 5 Servern gleichzeitig läuft. Schmiert aber einer der Server ab, sind es halt noch vier und es kommt keiner nach.
 
Wenn die Applikation das an sich mitmacht kannst du im Failover-Cluster einfach eine "Generic Application" konfigurieren. Unterschied zu den vorgefertigen Dienst ist eben, dass diese keine Logik haben, nach der ein Failover geschieht. So könnte es sein, dass bei Fehler 43 der Applikation ein Failover erfolgen soll, obwohl die Applikation noch läuft. Das müsste dann extra programmiert werden bei "Generic Application". Bei SQL etc kommen die entsprechenden DLLs mit und der Cluster weiss, wann er wie reagieren muss. Wahrscheinlich kann deine Applikation nur einen Failover machen, wenn entweder die Applikation abstürzt oder der Clusterknoten auf dem Applikation gerade läuft.
 
Genau Generic Application - und ich würde einen Heartbeat für die App erstellen - entweder durch die App selbst oder ein Checkscript.
 
@ ntloader

"Wahrscheinlich kann deine Applikation nur einen Failover machen, wenn entweder die Applikation abstürzt oder der Clusterknoten auf dem Applikation gerade läuft."
Das würde mir schon komplett reichen. Ich probiere das einmal aus. Danke Dir für die schnelle Hilfe!

@TK-Shockwave
Wie habe ich mir den Heartbeat genau vorzustellen? Soll der Heartbeat nur die Erreichbarkeit eines Windowsservers testen (sowas wie Ping) oder sollen die Programme sich gegenseitig auf Erreichbarkeit prüfen? In welche Richtung geht deine Anregung? :)
 
Zuletzt bearbeitet:
Kannst du nicht einfach einen Varnish vor deine Applikationen setzen? Der kann einerseits Cachen, andererseits Loadbalancing und Failover realisieren.
 
Ich habe eine normale Java-Applikation und keine Java-EE-Applikation, die auf einem Tomcat ausgeführt wird. Der Zugriff erfolgt auch mittels eines Clients, der ebenfalls in Java programmiert ist. Daher kann leider keine Lösung zum Einsatz kommen, die für Webserver gedacht ist. Wenn ich das richtig sehe, ist Varnish einfach Reverse Proxy, der super wäre, wenn ich halt eine Webappliaktion hätte, aber so nicht funktioniert. Ich bräuchte im Prinzip sonst schon sowas wie Varnish, aber der müsste auf normaler TCP/IP-Ebene arbeiten und schauen, wenn ein Paket an die IP 1.1.1.1 auf Port 1 ankommt, dieses an Server A geleitet wird und das nächste Paket zur Lastverteilung dann an Server B weitergeleitet wird. So ein Produkt habe ich leider noch nicht finden können.
 
Könntest du nicht eine extra Applikation schreiben, bei der sich erstmal alle eingehenden Verbindungen melden und der die dann gleichmäßig auf alle Server zur Verarbeitung weiterleitet?
 
Die Idee hatte ich auch. Aber dann habe ich mich gefragt, was passiert, wenn diese Appliaktion ausfällt. Diese müsste dann auch wieder redundant aufgebaut sein, damit bei einem Ausfall nicht gleich alles in die Brüche geht. Die Extraappliaktion wäre dann in dem Sinne nur ein Loadbalancer. Das wäre natrülich auch schon was sehr feines, aber Redundanz ist dadurch leider nicht gegeben.
 
Der Heartbeat kann Aktiv oder Passiv sein.

z.B Du hast ein Script welches prüft ob dein Programm noch läuft z.b die .class oder war File oder du prüfst einen vom Programm zur Verfügung gestellten Port auf Erreichbarkeit.

Läuft die Applikation nicht mehr - kannst du umclustern bzw. deinen Anfragen umleiten voll automatisch... ich kenne deine APP nicht daher kann ich nur was generisches Aussagen.
Stell dir einfach vor:
  • unter welchen Umständen ein umclustern von Nöten ist
  • wie du es feststellst, dass die Applikation nicht innerhalb normaler Parameter läuft
  • korrekt drauf reagierst
 
Zuletzt bearbeitet:
Ah, okay. Das bekomme ich hin :)
Danke an allle Beitragenden. Ich bin denke ich nun auf dem richtigen Weg :)
 
Zurück
Oben