Neue Juwelen in Ceph

Schulung_Stammlogo_webDer letzte Ceph Major Release Jewel hat nicht nur viele Bugs behoben sondern auch neue Features eingeführt bzw. für die Produktion freigegeben.

Ein neues Feature ist der sogenannte rbd-mirror, welcher zur asynchronen Replikationen von RBDs (vergleichbar mir iSCSI) verwendet wird. Ein neuer Daemon kümmert sich selbständig um die ständige Replikation der der RBDs zwischen zwei Clustern. Dadurch wird der Betrieb eines unabhängigen Clusters für Disaster Recovery Zwecke sehr viel einfacher und effektiver.

Mit Jewel wurde auch das neue Storage Backend Bluestore eingeführt. Dies ist der erste Schritt um sich von XFS zu trennen und vor allem von den doppelten Schreibprozessen, welche durch das Journal des Dateisystems verursacht werden. Bluestore soll bereits in der nächsten Version für produktive Cluster geeignet sein.

Lang erwartet, wurde auch CephFS für die Produktion freigeben. Das POSIX kompatible, shared Dateisystem kann gleichzeitig von mehreren Clients eingebunden und verwendet werden. Allerdings gibt es noch kleinere Einschränkungen die aber natürlich mit den nächsten Versionen angegangen werden.

Wer jetzt mehr Lust auf Ceph bekommen hat ist herzlich zu unserer Ceph Schulung im November eingeladen. Neben den beständigen Neuerungen in Ceph werden dort natürlich die grundlegenden Komponenten und Konzepte im Detail erklärt.

Achim Ledermueller

Autor: Achim Ledermueller

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.

MesosCon Europe

Dieses Jahr findet die MesosCon Europe in Amsterdam statt. Neben schönem Wetter und einer tollen Stadt erwartet uns ein breites Programm rund um das Apache Mesos Framework.

Mesos selbst ist ein Cluster Framework zur Verwaltung der im Rechenzentrum zur Verfügung stehenden Ressourcen (z.B. CPU, Ram, Storage). Ein Scheduler in Mesos bietet diese Ressourcen verschiedensten Applikationen an und startet diese. Insbesondere im Containerumfeld bietet Mesos in Kombinationen mit Marathon (ein Mesos Plugin) viele Möglichkeiten seine Applikationen zu verwalten.

Die kürzlich veröffentlichte Version 1.0 ist natürlich ein großes Thema. So bietet Mesos jetzt neben einer neuen HTTP API auch einen unified containerizer zum Starten verschiedener Container Formate. Auch im Networking Bereich bietet die neue Version neue Features, vor allem die Möglichkeit eine IP je Container zu vergeben gehört zu den Highlights. Nicht zuletzt wird der Release von einem neuen Autorisierungsmodell abgerundet.

Das breit angelegte Programm bietet in den nächsten zwei Tagen Vorträge zu vermutlich allen Themen rund um Mesos, Marathon, Microservices, Service Discovery, Storage, DC/OS und mehr, aber natürlich geben auch namhafte Firmen wie Twitter und Netflix Einsicht in ihre Setups, bei denen natürlich Mesos die Microservices verwaltet.

Ein Hackathon am Freitag lässt die Konferenz schön ausklingen. Leider geht es für uns vorher schon zurück nach Nürnberg.

Achim Ledermueller

Autor: Achim Ledermueller

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.

docker-compose

Docker LogoAuf der diesjährigen DockerCon in San Francisco wurden viele Neuerungen vorgestellt. Neben der eigentlichen Docker Engine wurde auch eine neue Version von Compose vorgestellt. Mit docker-compose kann man ganze Anwendungsumgebungen definieren und mit einem Befehl starten. Dies ist vor allem für Setups mit mehreren Containern hilfreich. Man definiert in einer zentralen Datei (docker-compose.yml) die benötigten Container und deren Parameter und führt den Befehl docker-compose up aus. Wer Vagrant benutzt erkennt sofort die parallelen zur Vagrantfile. Compose sorgt dann dafür, dass die Container wie definiert gestartet werden.

Die docker-compose.yml ist im einfachen YAML-Format gehalten. Im folgendem ein kurzes Beispiel aus der offiziellen Dokumentation:

web:
  build: ./web/
  ports:
   - "5000:3333"
  links:
   - redis
  volumes:
   - .:/code
redis:
  image: redis

In diesem Beispiel wird für den Container web ein Image mit Hilfe der ./web/Dockerfile gebaut (build: ./web/), der Port 5000 wird an den Container Port 3333 weitergeleitet, es wird ein Link zum Container redis erstellt und es wird das Volume /code gemountet. Für den redis Container wird einfach das Image von DockerHub heruntergeladen.

docker-compose up -d startet web und redis im Hintergrund und mit docker-compose ps werden die aktuell laufenden Container angezeigt. docker-compose stop beendet diese wieder.

Am Besten einfach selber ausprobieren. docker-compose selbst kann man einfach mit pip installieren.

# pip install -U websocket
# pip install -U docker-compose
Achim Ledermueller

Autor: Achim Ledermueller

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.

Verifying YAML

Wer Puppet mit Hiera und einem YAML Backend nutzt weiß das einfache Format sicherlich zu schätzen. Listen, Maps und Einzelwerte lassen sich schnell, einfach und leserlich abbilden:

Liste1: ["a", "b", "c"]
Liste2:
  - d
  - e

MapEins:
  eins: 1
  zwei: 2
  drei:
    drei: 3

key: value

Zur Interpretation der Datenstrukturen verlässt sich YAML auf eine fehlerfreie Einrückung der einzelnen Elemente, z.B. müssen in Liste2 die Element e und d mit gleich vielen Leerzeichen eingerückt werden. Im Prinzip eine sehr einfach Regel, allerdings ist vermutlich auch schon jeder in solch kleine Stolperfallen des YAML-Formats gelaufen. In Verbindung mit Puppet führt dies manchmal zu unklaren bzw. ungenauen Fehlermeldungen. Oftmals werden Fehler durch zu viele oder zu wenige Leerzeichen, Tabs, unsichtbare Sonderzeichen bzw. falsche Zeilenumbrüche verursacht. Aber soweit muss es nicht kommen, da es viele Möglichkeiten gibt die YAML-Syntax zu prüfen. In der Regel bietet jede Skript Sprache einen YAML-Parser, welche mehr oder weniger klare Fehlermeldungen ausgeben. Für ein kleines Beispiel habe ich ein Element falsch eingerückt und in verschiedenen Skript Sprachen geladen:

$ python -c "import yaml; yaml.load( open('my.yaml', 'r'), Loader=yaml.CLoader  )"
yaml.scanner.ScannerError: mapping values are not allowed in this context
  in "my.yaml", line 8, column 8
 
 
$ ruby -e "require 'yaml'; YAML.load_file('my.yaml')"
/usr/share/ruby/psych.rb:370:in 'parse': (my.yaml): mapping values are not allowed in this context at line 8 column 8 (Psych::SyntaxError)
 
 
$ js-yaml my.yaml
JS-YAML: bad indentation of a mapping entry at line 8, column 8:
       zwei: 2
           ^

Ihr seht selbst, dass js-yaml den Fehler wohl am besten und klarsten darstellt. Natürlich will keiner immer wieder auf der Command-Line überprüfen ob die verwendeten YAML Dateien korrekt formatiert sind. Am besten soll dies der Editor bereits beim speichern der Datei anzeigen. Wer vim mit Syntastic verwendet muss nur dafür sorgen, dass js-yaml vorhanden ist. Dies installiert man am besten über den Node.js Paket Manager npm.

$ apt-get/yum/dnf install npm
$ npm install -g js-yaml

Wie man Syntastic für vim installiert könnt ihr hier nachlesen.

Achim Ledermueller

Autor: Achim Ledermueller

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.

Input/Output Muster visualisieren

In modernen Storage-Systemen wie Ceph hat man in der Regel verschiedene Arten und Möglichkeiten Caching zu realisieren. Bei einem einfachem Ceph Setup ist für gewöhnlich ein Schreib-Cache vorhanden der aus SSDs besteht. Verwendet man Ceph in Kombination mit QEMU/KVM so kann zusätzlich noch der sogenannte RBD-Cache aktiviert werden welcher bereits aus den Virtualisierungshosts Daten puffert.

Natürlich wird durch das Puffern der Daten das Lese- und Schreibmuster auf den endgültigem persistentem Datenträger (meist SAS- bzw. SATA-Platten) immer undurchsichtiger.

Mit Hilfe von blktrace kann man die Lese- und Schreibzugriffe auf dem Datenträger lokalisieren und seekwatcher erstellt einem ohne großen Aufwand auch noch ein Video davon.

# yum/apt-get install blktrace seekwatcher mencoder 
# blktrace -d /dev/sda -o find
# seekwatcher -t find.blktrace.* -m -o find.mpg

Der erste Befehl schreibt alle aktuellen Aktivitäten von sda nach find.blktrace.x Dateien. seekwatcher erstellt anschließend ein Video.

Das erste Video zeigt ein `vagrant up` einer icinga2-Box. Die Box wird langsam heruntergeladen, das Image nochmals kopiert und dann geht es los mit der Installation. Das zweite Video zeigt ein `find /`. Jedes Quadrat zeigt einen Sector an und wird farbig sobald IO auf diesem stattfindet. Dieser blendet sich anschließend langsam wieder aus. Ich finde in diesen beiden Fällen kann man die IO-Muster schön interpretieren.

Für einen besseren Vergleich kann man sich die beiden Fälle auch in einer Grafik anzeigen lassen. Hat man noch Datenträger die sich drehen ist hier unter anderem der Seek Count interessant, aber seht selbst.

IO-Vergleich find / vs vagrant up

Achim Ledermueller

Autor: Achim Ledermueller

Der Exil Regensburger kam 2012 zu NETWAYS, nachdem er dort sein Wirtschaftsinformatik Studium beendet hatte. In der Managed Services Abteilung ist unter anderem für die Automatisierung des RZ-Betriebs und der Evaluierung und Einführung neuer Technologien zuständig.