libvirt: изменить настройку dhcp без перезапуска

11

Я использую libvirt и kvm для виртуализации моего сервера. Я настроил libvirt для запуска dhcp-сервера на мостовом сетевом интерфейсе, чтобы дать виртуальным частям их ips. Каждая виртуальная машина всегда получает один и тот же IP-адрес в зависимости от своего Mac, это настроено так:

<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>

Проблема: всякий раз, когда я добавляю новый хост в раздел dhcp, я должен перезапускать libvirt-bin, который перезапускает все мои виртуальные машины . Это не может быть решением, потому что это означает простои каждый раз, когда я добавляю новый Сервер. Есть ли решение?

theomega
источник
Хороший вопрос. Я подумал, что это просто вопрос воссоздания сети после изменений в сети с помощью virsh после того, как вы отредактировали XML-файл, как это было с доменами. Но, похоже, это не так. Поскольку virsh net-dumpxml ясно показывает, что libvirt все еще имеет кешированный исходный файл.
3dinfluence

Ответы:

7

Добавленная команда net-update в virsh должна разрешить обновление dhcp-host без перезапуска виртуальной сети (я еще не проверял это).

мужик вирш

раздел сетевых команд net-update xml [--parent-index index] [[--live] [--config] | [--текущий]]

Обновите данный раздел существующего определения сети, чтобы изменения могли вступить в силу немедленно, без необходимости уничтожать и перезапускать сеть.

Команда является одной из «add-first», «add-last», «add» (синоним add-last), «delete» или «modify».

раздел является одним из «мост», «домен», «ip», «ip-dhcp-host», «ip-dhcp-range», «forward», «forward-interface», «forward-pf», «portgroup» "," dns-host "," dns-txt "или" dns-srv ", причем каждый раздел назван путем объединения иерархии элементов xml, ведущей к изменению элемента. Например, «ip-dhcp-host» изменит <host>элемент, который содержится внутри <dhcp>элемента внутри <ip>элемента сети.

xml - это либо текст полного элемента xml изменяемого типа (например, "<host mac =" 00: 11: 22: 33: 44: 55 'ip =' 1.2.3.4 '/> ", либо имя файл, который содержит полный элемент xml. Устранение неоднозначности выполняется путем просмотра первого символа предоставленного текста - если первый символ «<», то это текст XML, если первый символ не «<», это имя файла, содержащего текст xml, который будет использоваться.

Опция --parent-index используется для указания того, в каком из нескольких родительских элементов находится запрошенный элемент (на основе 0). Например, <host>элемент dhcp может находиться в любом из нескольких <ip>элементов в сети; если родительский индекс не указан, <ip>будет выбран «наиболее подходящий» элемент (обычно единственный, у которого уже есть <dhcp>элемент), но если указан параметр --parent-index, этот конкретный экземпляр <ip>получит модификацию.

Если указан параметр --live, влияет на работающую сеть. Если указан параметр --config, влияет на следующий запуск постоянной сети. Если указан параметр --current, влияет на текущее состояние сети. Могут быть заданы флаги --live и --config, но --current является эксклюзивным. Не указывать какой-либо флаг - это то же самое, что указывать --current.

Кеес Бугерт
источник
5

Следующая процедура работала для меня с libvirt Version: 0.7.5-5ubuntu27 на хосте 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

Это также работает для других сетей, кроме сети по умолчанию. Просто замените слово default в примере на имя сети.

pefu
источник
Я только что попробовал это. Несмотря на то, что новая конфигурация сети действительно вступила в силу, все виртуальные машины потеряли сетевое соединение и нуждались в перезагрузке.
user1202136
@ user1202136: Какое изменение конфигурации сети вы произвели? А какие виртуальные машины вы использовали?
pefu
Я использовал паравиртуализированные виртуальные машины Xen. Что касается изменения конфигурации сети, я добавил новую статическую запись DHCP.
user1202136
Помимо перезапуска dnsmaq вручную, вы бы предпочли перезапустить сетевую службу.
Брено Лейтау
@Breno Leitão: Как именно? И к каким версиям дистрибутива Linux относится ваш комментарий?
pefu
2

Решение @ pefu сделало это и для CentOS 6.4!

Использование net-editin virshне обновляло файл XML /var/lib/libvirt/network/default.xmlи не изменяло состояние работающей конфигурации сети.

Повторный запуск net-editпоказал отредактированную версию даже после перезагрузки, но она просто не была загружена!

Экспорт в настоящий XML-файл, его редактирование и перезагрузка работает!

судья
источник
1

Я думаю, что libvirt использует dnsmaq для своего сервера dhcp. Может быть, вы можете просто перезапустить dnsmasq и все будет хорошо?

MXC
источник
1

После обсуждения в Списке рассылки я узнал: в настоящее время это вообще невозможно!

theomega
источник
Я не знаю, рекомендуется ли это, но я обычно просто убиваю процесс dnsmasq и запускаю его, используя аргументы, с которыми он снова работал.
bkzland
В ответе следует указать дистрибутив Linux и версию, к которой он относится. Как я продемонстрировал ниже, это возможно в Ubuntu 10.04 LTS и новее.
pefu