HA Cluster (Keepalived) neben Nginx auf Andere Services erweitern

Guten Tag zusammen,

ich habe einen Cluster (Nginx, Keepalived) gebaut, der allerdings noch nicht auf alle Services reagiert die tatsächlich auf den Maschinen laufen.
Ich würde gerne den "Ausfall" nicht nur auf den Nginx Service beschränken, sondern auch noch auf Andere Services. Allerdigns weiß ich nicht wie ich das mache.

Kann mir hierzu jemand einen Tipp geben?

Yoko
 
Zuletzt bearbeitet:
Guten Morgen Bitmuncher,

erstmal vielen Dank für deine Antwort.

Nur damit ich dich jetzt richtig verstehe: Du würdest supervisord benutzen um Systemdienste zu monitoren und ggf. starten zu lassen?
Ich weiß jetzt nicht, ob dass das gleiche Szenario ist was ich machen möchte. Daher frage ich noch mal lieber nach.

Für den HA Cluster möchte ich ein Regelwerk festlegen, nach dem die Backup-Nodes für den Master-Node einspringen. Bei mir fungiert der Nginx nur als Reverse Proxy Server, der Requests entgegen nimmt und intern an eine ASP.NET Core Applikation über einen anderen Port auf dem localhost weiterleitet. Was ich vermeiden möchte ist, dass ein Node des HA Clusters Requests entgegen nimmt, die dann ggf. Aufgrund der nicht laufenden Applikation hinter dem Webserver verworfen werden.

Bei mir sieht es so aus:

Request an floating IP -> Zuteilung an Backup oder Master Node -> Nginx (Reverse Proxy) -> ASP.NET Core Applikation -> weiterer von der Applikation genutzter Dienst.

Die ganze Kette muss laufen, damit der Node und damit die Applikation lauffähig ist. Momentan funktioniert mein HA nur, wen der Server "physikalisch" ausfällt, nicht aber, wenn die Applikation gar nicht läuft. In dem Fall nimmt der Nginx Reverse Proxy weiterhin Anfragen entgegen und schaltet nicht auf den Backup-Node um.

Wenn ich das richtig verstehe, würde ich erstmal dieses Regelwerk in keepalived implementieren, damit der HA richtig läuft, und dann supervisord on top einsetzen, um Ausfallzeiten durch abgestürzte Services zu minimieren.

Siehst du das auch so? :)

Ich dank dir!
 
Request an floating IP -> Zuteilung an Backup oder Master Node -> Nginx (Reverse Proxy)
Ich habe etwas ähnliches als CARP Cluster aufgesetzt wobei auf dem Cluster selbst Dienste laufen.

Ich habe es so gelöst, dass ein Skript prüft, ob die lokale Kiste Master ist und wenn ja, werden Dienste gestartet. Wenn nein, bzw. der Master (wieder) zum Backup wird,
dann werden die Dienste gekillt. Eigentlich sollte das gar nicht nötig sein, aber z.B. DHCP Relaying (insbesondere mit AD) ist (still) eine seltsame Angelegenheit.

Für den HA Cluster möchte ich ein Regelwerk festlegen, nach dem die Backup-Nodes für den Master-Node einspringen
Der Cluster regelt das intern selbst und die Nodes geben Kund, welcher von Ihnen denn nun zuständig ist - ansonsten bräuchte man das ja alles nicht ;)
In diesem Fall würde ich es ebenfalls mit CARP bauen und mich gar nicht um die Services kuemmern, bzw. einfach nur monitoren, ob sie ueberhaupt laufen.
Du kannst mit CARP zusätzlich den Cluster als Loadbalancer laufen lassen sodass die Anfragen gleichmäßig auf die Nodes verteilt werden.
 
Hallo Chromatin, danke für die Antwort!

CARP schaue ich mir mal an. Das kannte ich bislang noch nicht.

In meinem speziellen Fall funktioniert es wohl doch so, wie ich es mir gedacht hatte. Wahrscheinlich kann man das von außen auch nur schwer beurteilen.
Keepalived ist ja eine Software um HA und LB Cluster zu bauen. Allerdings muss ich in der Config von keepalived neben der Bekanntmachung der Knoten auch die Regeln festlegen, auf was der Heartbeat prüfen soll - eben das monitoring. Ich hatte bislang nur den Nginx Service. Allerdings ist der Nginx bei mir nur der Proxy ("Empfangsstelle") und ich musste noch den Kestrel-Webserver und noch eine Weitere Software, in der am Ende der Befehl landet, mit in der Config bekanntgeben. Nun springt der BACKUP Node ein, wenn der Computer vollständig ausfällt und bei jedem Service der ausfällt und der für die gesamte Prozesskette/Applikation benötigt wird.

Wahrscheinlich ging das aus meinem Post nicht hevor, aber das ist eben genau "nur das monitoring" der Services. Ansonsten kümmere ich mich um die Services nicht.

Loadbalancing habe ich nicht implementiert sondern nur HA. Auf dem Server läuft nur eine REST-API die Befehle entgegen nimmt und in eine Message Queue schreibt. Soviel I/O kann ich nicht erzeugen, dass Loadbalancing notwendig wäre :D ... Und diese Queue ist dahinter auch noch mal geclustert und synct permanent in die Queue des Backup-Knotens. Sprich die Befehle werden auch in der Queue vom BACKUP gespeichert, auch wenn dieser gerade im HA keine Requests über den laufenden Proxy entgegen nimmt.

Ich bedanke mich trotzdem bei euren Antworten und Hinweisen zu CARP und supervisord.
 
Zurück
Oben