Назад | Перейти на главную страницу

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

Я использую libvirt и kvm для виртуализации своего сервера. Я настроил libvirt для запуска dhcp-сервера на сетевом интерфейсе моста, чтобы передать виртуальным машинам их IP-адреса. Каждая виртуальная машина всегда получает один и тот же 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, который перезапускает все мои виртуальные машины.. Это не может быть решением, потому что это означает простои каждый раз, когда я добавляю новый Сервер. Есть решение?

Добавленный сетевое обновление Команда в 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», «группа портов» "," 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). Например, dhcp <host> элемент может быть в любом из нескольких <ip> элементы в сети; если родительский индекс не указан, "наиболее подходящий" <ip> будет выбран элемент (обычно единственный, у которого уже есть <dhcp> element), но если указан --parent-index, этот конкретный экземпляр <ip> получит модификацию.

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

Следующая процедура сработала для меня с версией libvirt: 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 сделало то же самое и для CentOS 6.4!

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

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

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

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

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