Knowledge Base


« Compute Complex Setups

OpenStack Affinity Groups

Wat zijn Affinity Groups


Affinity Groups in OpenStack maken het mogelijk om te zorgen dat een instance niet of juist wel op dezelfde hypervisor staat als andere instances in deze afffinity group. In bepaalde gevallen is het gewenst instances op dezelfde hypervisor te hebben, en in andere gevallen juist weer niet.

Als alle instances uit de group op dezelfde hypervisor moeten komen noemt men dit een Affinity Group. Als de instances niet op een hypervisor mogen waar al een instance uit de group staat noemt met dit een Anti-Affinity group.

Zo kan bijvoorbeeld gezorgd worden dat twee loadbalancers niet op dezefde hypervisor komen, zodat als er een storing aan de hypervisor is, een van de servers online blijft (omdat deze op een andere hypervisor staat). Ook bij een databasecluster kan dit handig zijn. (Anti-affinity group)

Echter, men kan ook zorgen dat de caching servers en de webservers op dezelfde hypervisor staan, ook een memcached en een mysql server bijvoorbeeld. (Affinity group)

Een affinity group kan alleen ingesteld worden bij het aanmaken van een nieuwe instance. Bij het aanmaken van een nieuwe instance in OpenStack bekijkt het cluster zelf eerst waar er plek is voor de gevraagde specificaties (CPU, RAM, netwerk, storage etc). Dit verloopt via de message queue, waarbij de scheduler aan alle hypervisors vraagt of ze de VM kwijt kunnen. De hypervisors geven antwoord, ofwel ze kunnen de VM kwijt, of er kan niet aan de vraag voldaan worden. De scheduler kiest vervolgens een hypervisor waar plek is en daar wordt de instance aangemaakt.

Indien er een affinity group meegegeven wordt bij de aanvraag dan neemt de scheduler dit mee in de aanvraag aan de hypervisors. Hierdoor kan het echter wel zijn dat de instance niet gemaakt kan worden.

Als er een Anti-Affinity group meegegeven wordt en er zijn alleen hypervisors beschikbaar waar al een instance uit de group op staat zal de aanvraag falen met de melding 'No valid host found'. Wordt er een Affinity group meegegeven en de gewenste hypervisor is vol, dan faalt de aanvraag ook met deze melding. Er kan immers niet aan de aanvraag voldaan worden, vanuit scheduler oogpunt wordt er geen valide host gevonden.

 


Affinity Groups via Skyline



In Skyline is de optie om Affinity groups aan te maken standaard niet zichtbaar. Om dit aan te zetten opent u het 'Settings' menu via het 'Tandwieltje' rechtsboven. U vinkt daar de optie 'Enable anti-affinity' settings aan.

settings

Hierna verschijnt in het linkermenu een nieuwe optie onder 'Advanced', namelijk 'Affinity Groups'.

empty-groups

U kunt met de knop 'New Group' een nieuwe Affinity Group aanmaken. Dit kan zowel een Affinity group als een Anti-Affinity group zijn. In het dialoogvenster wordt nogmaals uitgelegd waar de verschillende groepen voor zijn.



Na het aanmaken van de Groups is er een extra optie zichtbaar bij het aanmaken van een nieuwe instance. Zie onderstaande afbeelding:



Het is alleen bij het aanmaken van een instance mogelijk een Affinity Group aan te geven. Later een group toewijzen is dus niet meer mogelijk.

Als u een Group verwijdert worden de servers in deze group niet automatisch ook verwijderd. De policy echter wel, dus het kan zijn dat bij resizes, migraties of nieuwe instances deze op dezelfde of andere nodes komen, daar de affinity group niet meer van kracht is.


Affinity Groups via de Command Line


De OpenStack Command Line tools dienen hiervoor geinstalleerd te worden. Zie daarvoor deze pagina: http://docs.openstack.org/cli-reference/common/cli_install_openstack_command_line_clients.html

Met het 'nova server-group-create' commando kan een Affinity group aangemaakt worden:

nova server-group-create $group-name $policy


Waarbij '$group-name' een door u gekozen naam is en '$policy' de gewenste policy, 'affinity' ofwel 'anti-affinity' moet zijn.

De groups kunnen bekeken worden met het commando 'nova server-group-list':

$ nova server-group-list
+--------------------+--------+--------------------+------------+-----------+
| Id                          | Name   | Policies                 | Members  | Metadata |
+-------------------+--------+---------------------+------------+-----------+
| 415eea2[...]8fc8 | Anti      | [u'anti-affinity']     | []                | {}             |
+-------------------+--------+---------------------+------------+-----------+



Een group verwijderen kan met het commando :

nova server-group-delete $group-uuid


Bij het aanmaken van de instance kan de gewenste group meegegeven worden met de volgende extra parameter in het 'nova boot' commando:
 

--hint group=$affinity-group-uuid

Bijvoorbeeld:
 

nova boot --image "CloudVPS 1 Ubuntu 14.04"  \
    --hint group=415eea22-4e37-44e0-a4c9-59c395688fc8 \
    --key-name $ssh_key \
    --flavor "Standard 1" \
    "Example instance 1"


Later kan met een 'nova show' gecontroleerd worden of de affinity group ook echt van kracht is. De 'hostID' optie toont dit aan, bij een Affinity Group is deze voor alle instances in de group hetzelfde, bij een Anti-Affinity group is deze voor alle instances in de group verschillend.

Het is alleen bij het aanmaken van een instance mogelijk een Affinity Group aan te geven. Later een group toewijzen is dus niet meer mogelijk.

Als u een Group verwijdert worden de servers in deze group niet automatisch ook verwijderd. De policy echter wel, dus het kan zijn dat bij resizes, migraties of nieuwe instances deze op dezelfde of andere nodes komen, daar de affinity group niet meer van kracht is.

VPS Bestellen
VPS Bestellen