Für zukünftige Architekturen evaluieren wir derzeit einen Messaging Server RabbitMQ
. Dieser läuft auf index-prelive und wir dürfen mittels sudo den Dienst steuern
$ sudo /usr/sbin/rabbitmqctl
Um alle Queues aufzulisten, kann z.B
$ sudo /usr/sbin/rabbitmqctl list_queues -p / # zeigt alle Queues im "root-VirtualHost"
verwendet werden.
Derzeit ist ein Nutzer “picalike” eingerichtet. Der überall ran darf! Die Credentials befinden sich in babe.conf
im git:playground/timo/babe_mq
Um die Trennung zwischen dev, prelive und live möglichst einfach herzustellen, sollten VirtualHosts eingerichtet werden (siehe Seite 21 im “RabbitMQ Essentials”-Buch):
$ sudo /usr/sbin/rabbitmqctl add_vhost neuer-vhost-dev $ sudo /usr/sbin/rabbitmqctl set_permissions -p neuer-vhost-dev picalike ".*" ".*" ".*" # picalike alle Rechte geben
Wir verwenden die Python-Bibliothek “pika” (kein Witz!) und im git finden sich einige Schnipsel, wie man mit 5-10 Zeilen eine Nachricht abschicken und/oder eine empfangen kann. Im git:lib/py/picapika befindet sich eine Kapselung der pika-Bibliothek, die die Handhabung der RabbitMQ möglichst einfach und komfortabel machen soll (automatisches Reconnect etc.)
Mittels pip kann man die notwendig Version auf einer Maschine installieren
$ pip install --user pika==0.10.0
Es sollte überall die gleiche Version sein.
Um parallele Mongo-Zugriffe mit lilly_data_from_mongo.py zu verhindern, werden Exports nur noch auf “normalen” Front-Ends durchgeführt. Die HPC-Gruppe wird bei Updates explizit informiert und verwendet dann rsync, um von einem Front-End die neuen Kundendaten zu ziehen.
Im Detail gibt es eine Queue pro HPC-Frontend:
Wird ein Kunde auf einem frontend neu exportiert, setzt das frontend eine data-sync
Nachricht in alle Queues ab, um jedes einzelne HPC-Frontend zu informieren, dass ein Sync notwendig ist. Auf jedem HPC-Frontend läuft ein Dienst, sync_data, der die jeweilige Queue überwacht und bei neuen Nachrichten das rsync anstößt.
Eine Übersicht alle Queues gibt es hier http://index-prelive.picalike.corpex-kunden.de:15672/#/queues
Eine einfache Zusammenfassung der Datenexporte der Kunden http://sg01.picalike.corpex-kunden.de/export.html Die Ausgabe wird erzeugt von
/home/picalike/var/bin/report_updates.py
Kundendaten auf einer HPC-Maschine updaten:
{"uid": 905, "action": "data-sync", "path": "/mnt/storage/var/lilly-data/905/", "source": "frontend-prelive.picalike.corpex-kunden.de"}
Erfolgreich abgeschlossenes Update:
{"uid": 905, "action": "update-finished", "source": "frontend-prelive.picalike.corpex-kunden.de", "time": "1440510165"}
raise TypeError('host must be a str')
bitte auf pika 0.10 updaten