Cloud-Tutorial: Höhere Verfügbarkeit dank Server Affinity

Verteilung bei OpenStack dank Server Affinity

In der Cloud sind die Daten sicher und redundant abgelegt – so die Theorie. In der Praxis von OpenStack müsst Ihr jedoch manchmal nachhelfen, um die optimale physikalische Verteilung Eurer Daten zu erreichen. Wir zeigen Euch, wie Ihr mit Nova und Server Affinity Instanzen redundant ablegen oder einzelne Services auf dem gleichen Host gruppieren könnt.

Wie Nova interagiert – und warum das zum Problem werden kann

Nova ist das Compute Tool von OpenStack und verwaltet alle Instanzen in der Cloud. Der Nova Compute-Scheduler checkt die vorhandenen Ressourcen und koordiniert daraufhin die Verteilung neuer Instanzen. Dies erfolgt automatisch: Eine Garantie für die Verteilung auf einen bestimmten Hypervisor bzw. Host habt Ihr nicht.

Das kann zu zwei Problemen führen:

  • Instanzen wie App-Server, die ursprünglich redundant ausgelegt waren, landen auf dem gleichen Hypervisor. Bei einem Ausfall des Hosts wäre diese Art der Redundanz sinnlos und gleich beide Ressourcen verloren.
  • Andersherum ist es nicht möglich, zwei Services auf dem gleichen Hypervisor zu platzieren. Das kann aber sinnvoll sein, wenn diese Instanzen viel miteinander interagieren müssen. Sind sie strategisch auf dem gleichen Host gruppiert, kann das den Datendurchsatz verbessern.

Mit Server Affinity Regeln könnt Ihr Einfluss auf die Verteilung nehmen und beide Probleme lösen.

Verteilung steuern mit Server Affinity

Um die Instanzen nach Euren Wünschen wahlweise zu gruppieren oder zu verteilen müsst Ihr den Compute-Scheduler das mitteilen. Dafür erstellt Ihr eine ServerGroup-Ressource und referenziert diese als Scheduler-Hint in der Server-Definition. Ihr erreicht Euer Ziel dank Affinity- und Anti-Affinity-Rules:

syseleven-blog-open-stack-cloud-tutorial-server-affinity-1

Am Beispiel des Resource-Group-Beitrags wird es deutlich. Das Beispiel ist hier ergänzt um ServerGroups für die Nutzung von Affinity und Anti-Affinity. Die group.yaml sähe dann beispielsweise so aus:

syseleven-blog-open-stack-cloud-tutorial-server-affinity-2

Natürlich müsste Ihr noch die server.yaml um die affinity_group ergänzen:

syseleven-blog-open-stack-cloud-tutorial-server-affinity-3Verteilung überprüfen

Hat der Scheduler den Hint umgesetzt? Ob die Verteilung geklappt hat, könnt Ihr auf zwei verschiedene Arten überprüfen. Entweder lasst Ihr Euch die Mitglieder einer ServerGroup anzeigen:

syseleven-blog-open-stack-cloud-tutorial-server-affinity-4

Oder Ihr vergleicht die hostIds der einzelnen Instanzen:

syseleven-blog-open-stack-cloud-tutorial-server-affinity-5

Damit solltet es mit Eurer Wunschverteilung klappen. Wer mehr über affinity und anti-affinity wissen möchte: In diesem Beitrag auf Github haben wir ein weiteres Beispiel gepostet.