libvirt: cambie dhcp-setup sin reiniciar

11

Estoy usando libvirt y kvm para virtualizar mi servidor. Configuré libvirt para iniciar un servidor dhcp en la interfaz bridge-network para darles a los vm sus ips. Cada VM obtiene siempre la misma ip en función de su mac, esto se configura así:

<dhcp>
 <range start='10.1.1.2' end='10.1.1.254' />
 <host mac='54:52:00:21:01:ba' name='virstvm' ip='10.1.1.10' />
 <host mac='00:16:36:2d:71:f9' name='secvm' ip='10.1.1.20' />
</dhcp>

El problema: cada vez que agrego un nuevo host a la sección dhcp, tengo que reiniciar libvirt-bin que reinicia todos mis vm . Esta no puede ser la solución porque significa un tiempo de inactividad cada vez que agrego un nuevo servidor. ¿Hay alguna solución?

theomega
fuente
Buena pregunta, pensé que era solo una cuestión de recrear la red después de los cambios en la red usando virsh después de editar el archivo xml como si fuera con dominios. Pero este no parece ser el caso. Como virsh net-dumpxml muestra claramente que libvirt todavía tiene el archivo original en caché.
3dinfluence el

Respuestas:

7

El comando net-update agregado en virsh debería permitir una actualización dhcp-host sin reiniciar la red virtual (aún no lo he probado).

hombre virsh:

net-update network command section xml [- índice de índice de padres] [[--live] [--config] | [--Actual]]

Actualice la sección dada de una definición de red existente, con los cambios opcionalmente efectivos de inmediato, sin necesidad de destruir y reiniciar la red.

El comando es uno de "agregar primero", "agregar último", "agregar" (sinónimo de agregar último), "eliminar" o "modificar".

la sección es una de "puente", "dominio", "ip", "ip-dhcp-host", "ip-dhcp-range", "forward", "forward-interface", "forward-pf", "portgroup "," dns-host "," dns-txt "o" dns-srv ", cada sección se nombra mediante una concatenación de la jerarquía de elementos xml que conduce al elemento que se cambia. Por ejemplo, "ip-dhcp-host" cambiará un <host>elemento contenido dentro de un <dhcp>elemento dentro de un <ip>elemento de la red.

xml es el texto de un elemento xml completo del tipo que se está cambiando (por ejemplo, "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> ", o el nombre de un archivo que contiene un elemento xml completo. La desambiguación se realiza mirando el primer carácter del texto proporcionado: si el primer carácter es "<", es texto xml, si el primer carácter no es "<", es el nombre de un archivo que contiene el texto xml que se utilizará.

La opción --parent-index se usa para especificar en cuál de varios elementos primarios se encuentra el elemento solicitado (basado en 0). Por ejemplo, un <host>elemento dhcp podría estar en cualquiera de los <ip>elementos múltiples de la red; si no se proporciona un índice padre <ip>, se seleccionará el elemento "más apropiado" (generalmente el único que ya tiene un <dhcp>elemento), pero si se proporciona --parent-index, esa instancia particular de <ip>obtendrá la modificación.

Si se especifica --live, afecta a una red en ejecución. Si se especifica --config, afectará el próximo inicio de una red persistente. Si se especifica --current, afecta el estado actual de la red. Se pueden dar las banderas --live y --config, pero --current es exclusivo. No especificar ninguna bandera es lo mismo que especificar --current.

Kees Boogert
fuente
5

El siguiente procedimiento funcionó para mí con la versión libvirt: 0.7.5-5ubuntu27 en un host Ubuntu 10.04.4 LTS:

  virsh net-dumpxml default > default.xml

  $EDITOR default.xml

  virsh net-destroy default
  virsh net-define default.xml
  virsh net-start default

Esto también funciona para otras redes además de la red predeterminada. Simplemente reemplace la palabra predeterminada en el ejemplo con el nombre de la red.

pefu
fuente
Acabo de probar este. Si bien la nueva configuración de la red entró en vigor, todas las máquinas virtuales perdieron la conectividad de la red y debieron reiniciarse.
user1202136
@ user1202136: ¿Qué tipo de cambio de configuración de red realizó? ¿Y qué tipo de máquinas virtuales estabas usando?
pefu
Usé máquinas virtuales para-virtualizadas Xen. En cuanto al cambio de configuración de red, agregué una nueva entrada estática de DHCP.
user1202136
Aparte de reiniciar el dnsmaq manualmente, preferiría reiniciar el servicio de red.
Breno Leitão
@Breno Leitão: ¿Cómo exactamente? ¿Y a qué versiones de sabores de distribución de Linux se aplica su comentario?
Pefu
2

¡La solución de @ pefu también lo hizo para CentOS 6.4!

El uso de net-editin virshno actualizó el archivo XML /var/lib/libvirt/network/default.xmlni cambió el estado de la configuración de la red en ejecución.

Volver a ejecutar net-editmostró la versión editada incluso después de reiniciar, ¡pero simplemente no se cargó!

¡Exportarlo a un archivo XML real, editarlo y volverlo a cargar funciona!

Juez
fuente
1

Creo que libvirt usa dnsmaq para su servidor dhcp. ¿Tal vez podría reiniciar dnsmasq y todo estaría bien?

mxc
fuente
1

Después de una discusión en la lista de correo descubrí: ¡esto no es posible en absoluto!

theomega
fuente
No sé si esto se recomienda, pero generalmente solo elimino el proceso dnsmasq y lo inicio usando los argumentos con los que se estaba ejecutando nuevamente.
bkzland
La respuesta debe especificar la distribución de Linux y la versión a la que se aplica. Como he demostrado a continuación, es posible en Ubuntu 10.04 LTS y versiones posteriores.
Pefu