Ansible

Ansible in Produktion – Corosync und Pacemaker ausrollen

Vorwort

Unsere Kunden benötigen in vielen Fällen einen SLA von 99,9xx. Um diesen zu erreichen, müssen unsere Applikationen hochverfügbar sein. Neben redundanten Netzwerkkomponenten werden auch die Server, auf denen die Services laufen, redundant betrieben. Manche Services werden im Active-Active/Passive-Modus betrieben, andere wiederum nur auf einem Host. Sollte der Host jedoch mal ausfallen, muss der Service auf dem anderen Host betrieben werden. Dazu nutzen wir klassisch Pacemaker und Corosync.

Im Zuge unseres Einsatzes von Ansible als Configuration-Management-Tool haben wir auch die Installation und Konfiguration von Pacemaker sowie Corosync vereinheitlicht und automatisiert. Dazu haben wir eine neue Rolle geschrieben. Die Links zu der Rolle im Ansible-Galaxy und Github findet ihr ganz unten.

Umsetzung

Die Rolle installiert zunächst alle notwendigen Pakete:

  • pacemaker
  • corosync
  • resource-agents
  • crmsh-debuginfo
  • crmsh-test
  • crmsh

Die CRM-Shell wird durch RedHat leider nicht mehr offiziell unterstützt, daher haben wir die RPM-Pakete aus den openSUSE-Repositories genommen und in unsere eigenen Repositories gepackt (diese werden ebenfalls mit Ansible installiert und ausgerollt, mehr dazu in einem anderen Beitrag).

Im nächsten Schritt wird die Konfiguration übertragen. Dies geschieht mit Hilfe eines Templates, welches durch Variablen aus dem Playbook gefüllt wird. Folgende Variablen müssen gesetzt werden:

Das Array hosts beinhaltet die Hostnamen der beiden Hosts, welche im Cluster arbeiten sollen. Diese Variablen könnte man sicher durch Ansible-Facts ersetzen, jedoch haben wir auf den Hosts 2 Interfaces. Über das eine Interface (host2) spricht Ansible mit den Hosts, das andere Interface wird für die Cluster-Kommunikation genutzt.

first_node ist, wie der Name sagt, der erste Host des Clusters. Diese Variable wird benötigt, um auf dem ersten Host einen Auth-key (zur verschlüsselten Kommunikation) zu erstellen, welcher im Anschluss auf den zweiten Host kopiert wird.

Die Konfiguration der Interfaces und Hosts in der corosync.conf erfolgt vollautomatisch. Mittels Facts wird die IP-Adresse des eth0-Interfaces beider Hosts ermittelt und durch eine Schleife in die Konfiguration eingetragen. Auf die gleiche Weise wird die bindnetaddr eingetragen, die Adresse, auf welche Corosync lauschen soll.

Im darauffolgenden Schritt wird wie oben bereits erwähnt der auth-key auf dem ersten Host erstellt und anschließend auf den zweiten Host übertragen.

Im Anschluss wird ein Logverzeichnis erstellt und eine entsprechende Logrotations-Konfiguration auf die Hosts kopiert.

Zum Schluss wird der Autostart von Pacemaker sowie Corosync aktiviert und die beiden Programme gestartet.

Nach der Installation

Nach dem Start der Programme kann die Cluster-Konfiguration selbst mittels der CRM-Shell vorgenommen werden. Dies haben wir (noch) nicht automatisiert. 😉

Weiterführende Links

Rolle in Ansible-Galaxy: https://galaxy.ansible.com/list#/roles/2897

Rolle in Github: https://github.com/mms-segu/ansible_corosync_pacemaker

 

Beitragsbild: Wikimedia Commons

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.