Il servizio Nova controlla dove vengono avviate le istanze all'interno dell'ambiente cloud OpenStack. Significa, il nova-scheduler decide quale hypervisor eseguirà una particolare istanza e questo comportamento viene controllato utilizzando due filtri (politiche di gruppo di affinità/anti-affinità), ovvero ServerGroupAntiAffinityFilter e ServerGroupAffinityFilter . Il ServerGroupAffinityFilter consente a un utente di eseguire un gruppo di istanze sullo stesso hypervisor/host e ServerGroupAntiAffinityFilter assicurerà che tutte le istanze richieste vengano avviate su hypevisor/host diversi.
Questi filtri sono abilitati per impostazione predefinita in /etc/nova/nova.conf come mostrato di seguito:
scheduler_driver_task_period = 60 scheduler_driver = nova.scheduler.filter_scheduler.FilterScheduler scheduler_available_filters = nova.scheduler.filters.all_filters scheduler_default_filters = RetryFilter, AvailabilityZoneFilter, RamFilter, ComputeFilter, ComputeCapabilitiesFilter, ImagePropertiesFilter, ServerGroupAntiAffinityFilter, ServerGroupAffinityFilter
Nel caso, se non trovi quei filtri, modifica nova.conf , aggiungi le righe precedenti e riavvia nova-scheduler e nova-conduttore servizi.
# /etc/init.d/nova-scheduler restart
# /etc/init.d/nova-conductor restart
Nota :Riavvio di nova-scheduler il solo servizio è sufficiente su alcune versioni di OpenStack, ma in OpenStack Mitaka devo riavviare nova-conductor anche il servizio.
Per utilizzare questi filtri, l'utente deve creare un gruppo di server, assegnare criteri al gruppo e aggiungere istanze a quel gruppo.
Nota :I comandi seguenti sono stati eseguiti durante l'installazione di OpenStack Mitaka.
Come utilizzare il criterio ServerGroupAffinityFilter?
Passaggio 1 :crea un gruppo di server
# nova server-group-create <Group_Name> affinity
# nova server-group-create affinityHost affinity +--------------------------------------+--------------+------------------------- ---------+----------------------------------+---------------+---------+--------- -+ | Id | Name | Project Id | User Id | Policies | Members | Metadata | +--------------------------------------+--------------+------------------------- ---------+----------------------------------+---------------+---------+--------- -+ | 565948b0-076e-4de0-97dd-11d58862b64e | affinityHost | 9563fa5bb6dd479aa9f18048 cd35ca36 | d4053faa2c374045bd37d96ccb7f1b6c | [u'affinity'] | [] | {} | +--------------------------------------+--------------+------------------------- ---------+----------------------------------+---------------+---------+--------- -+
Assicurati che il gruppo sia stato creato utilizzando il comando seguente:
# nova server-group-get 565948b0-076e-4de0-97dd-11d58862b64e +--------------------------------------+--------------+----------------------------------+----------------------------------+---------------+---------+----------+ | Id | Name | Project Id | User Id | Policies | Members | Metadata | +--------------------------------------+--------------+----------------------------------+----------------------------------+---------------+---------+----------+ | 565948b0-076e-4de0-97dd-11d58862b64e | affinityHost | 9563fa5bb6dd479aa9f18048cd35ca36 | d4053faa2c374045bd37d96ccb7f1b6c | [u'affinity'] | [] | {} | +--------------------------------------+--------------+----------------------------------+----------------------------------+---------------+---------+----------+
Passaggio 2 :avvia le istanze all'interno del gruppo creato nel passaggio 1
# nova boot --flavor 1 --image cirros --security-groups default --nic net-id=9381abae-e0c5-4844-b605-da6b04ce9a36 --hint group=565948b0-076e-4de0-97dd-11d58862b64e --max 4 affinityVM
Cerca –gruppo di suggerimenti opzione con ID del gruppo creato nel passaggio 1. Inoltre, il comando precedente richiede 4 VM utilizzando –max opzione.
Passaggio 3 :controlla se tutte le macchine virtuali richieste vengono avviate sullo stesso host.
for i in `seq 1 4` > do > openstack server show affinityVM-${i} -c hostId -f shell > done hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d" hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d" hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d" hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d"
Il comando precedente dice che tutte le macchine virtuali sono state avviate sullo stesso host.
Ora lavoriamo con le norme del gruppo anti-affinità .
Come utilizzare ServerGroupAntiAffinityFilter polizza?
Utilizzando ServerGroupAntiAffinityFilter, l'utente può assicurarsi che le macchine virtuali vengano avviate su hypervisor diversi. Ad esempio, considera la situazione in cui non desideri che tutti i tuoi servizi siano ospitati sulla stessa macchina, poiché il guasto della macchina host influirà su tutti i tuoi servizi. L'utilizzo di ServerGroupAntiAffinityFilter garantisce che tutti i tuoi servizi siano disturbati in diversi host fisici.
Passaggio 1 :crea un gruppo con norme di antiaffinità
# nova server-group-create anti-affinityHost anti-affinity +--------------------------------------+-------------------+----------------------------------+----------------------------------+--------------------+---------+----------+ | Id | Name | Project Id | User Id | Policies | Members | Metadata | +--------------------------------------+-------------------+----------------------------------+----------------------------------+--------------------+---------+----------+ | a1c8220a-275f-4ff1-8ce1-6fbb54f7cf46 | anti-affinityHost | 9563fa5bb6dd479aa9f18048cd35ca36 | d4053faa2c374045bd37d96ccb7f1b6c | [u'anti-affinity'] | [] | {} | +--------------------------------------+-------------------+----------------------------------+----------------------------------+--------------------+---------+----------+
Passaggio 2 :avvia istanze all'interno del gruppo anti-affinità.
# nova boot --flavor 1 --image cirros --security-groups default --nic net-id=9381abae-e0c5-4844-b605-da6b04ce9a36 --hint group=a1c8220a-275f-4ff1-8ce1-6fbb54f7cf46 --max 3 anti-affinityVM
Cerca –-gruppo di suggerimenti opzione con ID del gruppo creato nel passaggio 1. Inoltre, –max richiede 3 macchine virtuali e tutte dovrebbero essere avviate su host diversi.
Passaggio 3 :verifica che le VM siano avviate su host/hypervisor diversi.
# for i in `seq 1 3`; do openstack server show anti-affinityVM-${i} -c hostId -f shell; done hostid="09fac9c46a3dc5f6219e2af3e3a7da6dad7de843cfba7d8d4feb9054" hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d" hostid="4e488190b3d18a501dd719c051771636b6f73f6fd292f00e8622b185"
Il comando precedente conferma che tutte e tre le VM sono state avviate su host diversi.
Nel caso, se non ci sono risorse disponibili per soddisfare anti-affinità policy, quindi nova boot comando fallirà con il seguente messaggio di errore:
# nova boot --flavor 1 --image cirros --security-groups default --nic net-id=9381abae-e0c5-4844-b605-da6b04ce9a36 --hint group=a1c8220a-275f-4ff1-8ce1-6fbb54f7cf46 anti-affinityVM
Risultato di esempio:
"No valid host was found. There are not enough hosts available."
Poiché la mia configurazione ha solo tre host di calcolo, il comando precedente non è in grado di trovare host validi per l'avvio di una nuova macchina virtuale.