El servicio Nova controla dónde se inician las instancias dentro del entorno de nube de OpenStack. Significa, el nova-scheduler decide qué hipervisor ejecutará una instancia en particular y este comportamiento se controla mediante dos filtros (políticas de grupo de afinidad/antiafinidad), a saber, ServerGroupAntiAffinityFilter y ServerGroupAffinityFilter . El ServerGroupAffinityFilter permite a un usuario ejecutar un grupo de instancias en el mismo hipervisor/host y ServerGroupAntiAffinityFilter se asegurará de que todas las instancias solicitadas se inicien en diferentes hypevisors/hosts.
Estos filtros están habilitados por defecto en /etc/nova/nova.conf como se muestra a continuación:
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
En caso de que no encuentre esos filtros, edite nova.conf , agregue las líneas anteriores y reinicie nova-scheduler y nova-conductor servicios.
# /etc/init.d/nova-scheduler restart
# /etc/init.d/nova-conductor restart
Nota :reiniciando nova-scheduler solo el servicio es suficiente en algunas versiones de OpenStack, pero en OpenStack Mitaka, necesito reiniciar nova-conductor servicio también.
Para trabajar con estos filtros, el usuario debe crear un grupo de servidores, asignar una política al grupo y agregar instancias a ese grupo.
Nota :Los siguientes comandos se ejecutaron en la configuración de OpenStack Mitaka.
¿Cómo usar la política ServerGroupAffinityFilter?
# 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'] | [] | {} | +--------------------------------------+--------------+------------------------- ---------+----------------------------------+---------------+---------+--------- -+
Asegúrese de que el grupo se cree con el siguiente comando:
# 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'] | [] | {} | +--------------------------------------+--------------+----------------------------------+----------------------------------+---------------+---------+----------+
Paso 2 :Inicie instancias dentro del grupo creado en el paso 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
Esté atento a –grupo de pistas opción con Id del grupo creado en el paso 1. Además, el comando anterior solicita 4 máquinas virtuales usando el –max opción.
Paso 3 :compruebe si todas las máquinas virtuales solicitadas se inician en el mismo 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"
El comando anterior dice que todas las máquinas virtuales se iniciaron en el mismo host.
Ahora trabajemos con la política de grupo anti-afinidad .
Cómo usar ServerGroupAntiAffinityFilter política?
Utilizando ServerGroupAntiAffinityFilter, el usuario puede asegurarse de que las máquinas virtuales se inicien en diferentes hipervisores. Por ejemplo, considere la situación en la que no desea que todos sus servicios estén alojados en la misma máquina, ya que la falla de la máquina host afectará a todos sus servicios. El uso de ServerGroupAntiAffinityFilter garantiza que todos sus servicios se interrumpan en diferentes hosts físicos.
# 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'] | [] | {} | +--------------------------------------+-------------------+----------------------------------+----------------------------------+--------------------+---------+----------+
Paso 2 :Lanzar instancias dentro del grupo anti-afinidad.
# 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
Buscar –-grupo de sugerencias opción con Id del grupo creado en el paso 1. Además, –max solicita 3 máquinas virtuales y se espera que todas se inicien en diferentes hosts.
Paso 3 :Verifique que las máquinas virtuales se inicien en diferentes hosts/hipervisores.
# for i in `seq 1 3`; do openstack server show anti-affinityVM-${i} -c hostId -f shell; done hostid="09fac9c46a3dc5f6219e2af3e3a7da6dad7de843cfba7d8d4feb9054" hostid="1148bff316258766a721cef177307ce597d80b0e2d95b7603bbfb16d" hostid="4e488190b3d18a501dd719c051771636b6f73f6fd292f00e8622b185"
El comando anterior confirma que las tres máquinas virtuales se iniciaron en diferentes hosts.
En caso de que no haya recursos disponibles para satisfacer la antiafinidad política, luego arranque nova el comando fallará con el siguiente mensaje de error:
# 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
Salida de muestra:
"No valid host was found. There are not enough hosts available."
Como mi configuración solo tiene tres hosts informáticos, el comando anterior no puede encontrar hosts válidos para iniciar una nueva VM.