MongoDB - Simulation von Netzwerkproblemen & Monitoring

Post date: Mar 17, 2013 8:06:32 AM

Netzwerkprobleme können auch in einem lokalen MongoDB Cluster simuliert werden. In einem fünf-knotigen Cluster von mongod Instanzen die auf unterschiedlichen Ports laufen Netzwerkprobleme während der Kommunikation mit zwei Knoten können durch iptables Regeln die die ausgehende Netzwerkpakete die an verschiedenen Ports ankommen löschen durch folgende Kommandozeilen simuliert werden:

sudo iptables -I OUTPUT 1 -p tcp --sport 27111 -j DROP

sudo iptables -I OUTPUT 2 -p tcp --sport 27112 -j DROP

sudo iptables -D OUTPUT 1

sudo iptables -D OUTPUT 1

In diesem Fall wird die rs.status() Kommandozeile dieselbe Fehlermeldung wie in dem Fal in dem mongod Knoten heruntergefahren wurden:

socket exception [CONNECT_ERROR] for localhost:27111

socket exception [CONNECT_ERROR] for localhost:27112

Falls Mongo Monitoring und Alerting in Nagios aktiv ist, eine kritische Benachrichtigung wird in diesem Fall erzeugt. Interessant ist ob die übrigen Knoten mit dem aktuellen Traffic optimal zurechtkommen können. Um diese Bedingung überprüfen zu können, der check_queries_per_second Methode-Aufruf von Mike Zupans MongoDB Nagios Plugin die auf https://github.com/mzupan/nagios-plugin-mongodb gehostet ist muss überarbeitet werden. Eine wichtige Änderung die durchgeführt werden muss um konsistente Werte zu liefern ist folgende Zeile von

db.nagios_check.update(last_count, {'$set': {"data.%s" % query_type : {'count': num, 'ts': int(time.time())}}})

auf

db.nagios_check.update({'_id': last_count['_id']}, {'$set': {"data.%s" % query_type : {'count': num, 'ts': int(time.time())}}})

zu ändern weil der Wert von der last_count Variable zwischen den Aufrufen geändert werden kann und in solchen Situationen die Änderung findet nicht statt weil die vorlaufende Abfrage einen null-Wert zurückgibt.

Mit diesem Fix präzise Daten über den Replica Set werden geliefert und Nagios zeigt die Anzahl von Queries, Updates, Inserts und Deletes pro Sekunde korrekt an. Von diesem Punkt startend können wir eine Performance-Analyse durchführen um herauszufinden ob die übrigen Knoten mit der aktuellen Last zurechtkommen können und weitere Korrekturen vornehmen falls diese notwendig sind.