[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Job Scheduler (was: Re: File-Locking in Shellscripten auf NFS)
[Thread Prev] | [Thread Next]
[Date Prev] | [Date Next]
- Subject: Re: Job Scheduler (was: Re: File-Locking in Shellscripten auf NFS)
- From: Thomas Stiefel <Tom@xxxxxxx>
- Date: Mon, 20 Dec 2010 13:00:11 +0100
- To: uugrn@xxxxxxxxxxxxxxx
Hallo Raphael, ich wollte nie deine Faehigkeiten anzweifeln und haette auch nicht gedacht, dass es sich um ein so komplexes Setup fuer eine eigentlich relativ einfache Aufgabe handelt. Aber wie auch immer die Umgebung aussieht, Probleme sind dazu da, dass sie geloest werden und hier ist die Herausforderung eben etwas groesser, aber damit auch interessanter ;) Raphael Eiselstein schrieb am 18.12.2010 00:16: > > Ist halt die Frage ob der nfs-Server dafuer ausgeruestet ist diese Aufgabe zu > > erledigen? Evtl. gab es ja einen Grund dieses Script auf andere Server > > auszulagern? > Man kann auch NFS aus Kisten heraus anbieten, die kein (extern > erreichbares) unixoides Betriebssystem im innern haben. Klar, man kann auch mit irgendwelchen NAS-Systemen NFS-Dienste anbieten, aber da von einem hochverfuegbar NFS-Server die Rede war, bin ich von UNIX-/Linux-Systemen ausgegangen. Daher bietet sich fuer mich an ein schon hochverfuegbar aufgebautes System auch fuer andere Zwecken zu nutzen und die Hochverfuegbarkeit nicht nochmal zu implementieren. Da hier aber wohl "nur" das NFS ueber BRBD hochverfguebar ist, dann ist die Ausgangsposition eine andere. > Es gibt im konkreten Setup mehrere hochverfuegbare NFS-Quellen, die > allesamt auf mehreren unabhaengigen Servern gemountet sind. Diese Server > bieten irgendwelche Dienste an, hier zB im Rahmen eines Datawarehouses > den Import und Export von Daten (in Dateiform) durchfuehren. > > Da Daten (Dateien) kontinuierlich beschafft und verarbeitet werden muessen, > sollte unter keinen Umstaenden die Beschaffung (Import) von Daten > unterbrochen werden. Um das zu gewaehrleisten betreibe ich mehrere Rechner, > die bestimmte Copy-Jobs ausfuehren. Ich nehme dafuer mehrere Server nicht, > weil es zuviel Last waere fuer nur einen, sondern weil ich damit eine > Ausfallsicherheit bekomme und zusaetzlich im Normalbetrieb keine Bottlenecks > habe. > > Ausserdem laufen auf diesen "Beschaffungsservern" nicht nur Copy-Jobs, die > aktiv Daten abholen sondern auch plain rsync-daemons, die Daten annehmen, > also per "Push" von extern bekommen (oder zur Abholung anbieten). Da die > Quellen sich schlecht syncronisieren lassen und es teilweise zu sehr > vielen parallelen Transfers kommt, werden eingehende rsync-Verbindungen > ueber einen LoadBalancer (IPVS, direct routing) auf mehrere rsync-daemons > verteilt, die alle die gleiche rsyncd.conf haben und zudem jeweils alle > NFS-Quellen und -Senken gemountet haben. > > Datenexporte laufen ebenfalls als Copy-Job (per rsync, cron) oder werden > per rsyncd, httpd und sftp fuer bestimmte Mandanten zur Abholung > angeboten, auch hier per IPVS-Loadbalancer, auf dem ein ldirectord > regelmaessig prueft, dass die dahinter liegenden Dienste auch wirklich > erreichbar sind und Zugriffe nur an "lebende Dienste" durchleitet. > > Es gibt in diesem Spiel also keine Funktion und keinen Dienst, der > ausschliesslich auf nur einem Server verfuegbar ist. > Das von dir beschriebene Setup ganz klar nach einem Enterprise-Szenario an, das bestimmt auch Workflows enthaelt bei dem Daten von einem System ueber ein zweites in ein drrittes System wandern. Hier wuerde sicher nicht nur ein Job-Scheduler fuer die angesprochenen Copy-Jobs Sinn machen, sondern der durchgehende Einsatz eines solchen. So kann man bestimmte Ablaeufe effizienter gestalten, da man nicht nur in Abhaengigkeit eines Jobs seinen direkten Nachfolger starten lassen kann, sondern auch bei Abbruechen innerhalb einer groesseren Job-Kete problemlos an genau diesem Punkt die Verarbeitung wieder aufsetzten. Dienstlich arbeite ich hier mit UC4, aber das ist nicht gerade guenstig was die Lizenzen angeht. Auch die anderen mir bekannten Automatisierungs- bzw. Scheduler-Tools sind meist nicht unbedingt guenstig. Ein Ausnahme bildet hier der "Open Source Job Scheduler" (OSJS): http://jobscheduler.sourceforge.net/ > Ich suche also nach einer Moeglichkeit in diesem vorne und hinten und in > der Mitte redundant ausgelegten System wiederkehrende Jobs verteilt auf > mehreren Systemen auszufuehren und dabei sicherstellen, dass identische > Jobs sowohl pro System aber auch im gesamten Verbund nie parallel > ausgefuehrt werden. > Dies kann der OSJS auf jeden Fall, aber er kann - wenn dies gewuenscht ist - auch Jobs auf einer bestimmten Anzahl an an Systemen parallel ausfuehren. DER OSJS kann darueber hinaus auch verhindern, dass zwei Jobs parallel auf die gleiche Ressource zugreifen (z. B. eine Datenbank oder eine Datei). > PID-Files oder Lock-Files auf der gemeinsamen NFS-Ressource koennten da > helfen, aber wenn ein CopyJob einmal abstuerzt, hinterlaesst er dann > PID-Files mit nicht mehr gueltigen PIDs oder Lockfiles, die ihren Lock > nicht verlieren. Also suche ich nach einer Moeglichkeit zweifelsfrei > und mit geringem technischen Aufwand herauszufinden, ob PID/Lockfiles > noch "gueltig" sind. > > Oder, weil cron hier eher das Problem darstellt: Einen verteilten > Job-Scheduler, der ohne zentrale Instanz auskommt und trotzdem dafuer > sorgt, dass konkrete Jobs nie mehr als einmal parallel ausgefuehrt werden > *und* eine Fehlerbehandlung ermoeglicht, wenn ein Job einmal unsauber > abgebrochen ist, etwa weil Quelle oder Ziel ploetzlich nicht mehr > verfuegbar sind (Timeout). DER OSJS sorgt nicht nur ueber eigene Routinen dafuer, dass Jobs nur einmal parallel laufen, sondern ueberwacht die Jobs auch und kann auf Abbrueche sogar selbst reagieren. So koennten man beispielsweise einen auf ServerA abgebrochenen Copy-Job gleich auf ServerB nochmal anstarten lassen. > Ich koennte mir vorstellen, dass ich anstelle von cron einen Dienst > verwende (nehmen wir einfach mal sshd, aber das ist nur ein Beispiel), > der von aussen angesprochen wird. Das Ganze ist verteilt auf sagen wir 3 > Systeme. Fuer jeden "Job" gibt es beispielsweise einen eigenen TCP-Port, > also zB 4711, 4712, 4713, 4714, ... auf allen 3 Systemen jeweils alle > oder eine beliebige Teilmenge der "Ports". > > Durch einen authentifizierten Connect auf diesen Port wird der damit > assoziierte Job ausgefuehrt. Das ganze wird dann ueber einen Loadbalancer > angesprochen, der einen eingehenden Request zB fuer 4714/tcp auf > ServerB:4714 durchreicht, waehrend er zufaellig einen parallel eingehenden > Request auf :4712 auf ServerC:4712 durchreicht. > > Jetzt braeuchte ich "nur" noch einen zentralen Dienst, der via LoadBalancer > fuer die verschiedenen konfigurierten Jobs die jeweiligen Zugriffe > startet und somit auf einem der Server{A,B,C} den entsprechenden Job > dann triggert. > > Aber hier ist genau wieder der Knackpunkt: Ich brauche hierfuer eine > singulaere Instanz, die selbst wieder hochverfuegbar aufgebaut sein muss. > Aber genau das erwarte ich von einem Jobscheduler, dass er konfigurierte > Jobs sicher zur Ausfuehrung bringt (und ueberwacht), auch wenn das Blech > auf dem der Scheduler installiert ist mal wackelt. DER OSJS bietet auch die Moeglichkeit an Jobs als Webservices zu konfigurieren und anzusprechen. Wie genau das deinen Anforderungen entspricht kann ich dir allerdings nicht sagen. Der OSJS bietet die Moeglichkeit ein Job Scheduler Backup Cluster ein ausfallsicheres System aufzubauen, das aus einem primaeren Job Scheduler und mindestens einem Backup Job Scheduler besteht, die sich ueber Heartbeats ueberwachen. Ob OSJS auch mit Loadbalancer wie von dir gewuenscht umgehen kann, kann ich nicht wirklich beurteilen, aber er bringt fuer ein Cluster eine eigene Loadbalancer-Funktion mit. > Die Idee eines einfachen runjob-Wrappers, der sich per multicast mit > seinen (allen) Nachbarn synct, noch mit die beste weil einfachste > Loesung ("KISS Prinzip"). Das waere dann auch nicht beschraenkt auf cronjobs, > sondern koennte auch aus anderen Konstrukten her in einer Form verwendet > werden, dass bestimmte Prozesse sich ueber Systemgrenzen hinweg "abstimmen". > > Einzig: Ich kenne so ein Tool bisher nicht und kann mir sowas auch nicht > mal eben selbst programmieren. Ideen anyone? > Die Idee des runjob-Wrappers mit Multicast-Synchronisation ist sicher sehr interessant, aber auch nicht ganz trivial. Ausserdem koennte in groeÃ?eren Netzwerken die Infrastruktur Probleme machen, da Multicast-Kommunikationen in den meisten Systemen nicht "von Haus aus" ueber Switch-Grenzen hinweg funktioniert. Bevor Du selber was programmierst, solltest Du dir vielleicht mal den OSJS ansehen ;-) Gruss Tom -- UUGRN e.V. http://www.uugrn.org/ http://mailman.uugrn.org/mailman/listinfo/uugrn Wiki: https://wiki.uugrn.org/UUGRN:Mailingliste Archiv: http://lists.uugrn.org/