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

Nova network DHCP не выпускает ip с force_dhcp_release = True

Проблема, которую я вижу, заключается в том, что когда nova-network вызывает dhcprelease при завершении экземпляра (из-за forcehcp_release = Верно) адрес не всегда освобождается (syslog не показывает запрос DHCPRELEASE). Позже, если nova назначила новому экземпляру тот же IP-адрес, который был не высвобожден, запрос DHCP игнорируется, и ошибка в системном журнале покажет, что dnsmasq увидел запрос и отклонил его, потому что IP-адрес уже был арендован для другого MAC-адреса (принадлежащего старой, завершенной виртуальной машине).

Некоторые подробности о моей настройке:

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

Я проверил наличие ошибок в журналах nova- * и не нашел их. Единственные ошибки в моем системном журнале, когда dnsmasq отказывается арендовать IP-адрес из-за конфликтующих MAC-адресов..

Любая информация или предложения будут очень благодарны.

Тем не менее, я не могу найти идеального решения этой проблемы, но я нашел проблемную область и нашел способ ее обойти.

1. Проблемная область: Проблема заключается в dnsmasq, а не в OpenStack. Я заметил, что OpenStack каждый раз выполняет функцию «dhcprelease» после завершения экземпляра, но dnsmasq отвечает только на несколько запросов dhcprelease.

2. Решение: Время аренды по умолчанию для любого LP составляет 24 часа (86400 секунд), что означает, что каждый экземпляр должен продлевать аренду через каждые 24 часа. Если экземпляр не продлевает аренду IP-адреса, то dnsmasq сочтет эту аренду недействительной и освободит IP-адрес, полученный в результате этой аренды.
Я сократил срок аренды до 3 минут (180 секунд). Таким образом, любая аренда не сможет удерживать IP более 3 минут после завершения экземпляра.

Шаги по сокращению срока аренды до 3 минут:

Выполните следующие шаги на всех вычислительных узлах один за другим.

  1. Откройте файл /etc/nova/nova.conf

vi /etc/nova/nova.conf

  1. В разделе [ПО УМОЛЧАНИЮ] настройте dhcp_lease_time.
    Это за секунды.

[ДЕФОЛТ]
...
dhcp_lease_time = 180

  1. Сохраните и закройте файл.

  2. Убейте процесс dnsmasq для каждого моста на сервере. (ИЛИ вы также можете выполнить killall, если dnsmasq не используется для каких-либо других целей)

kill (ИЛИ killall dnsmasq)

  1. Перезапустите сервисы.

перезапустить nova-api-metadata
перезапустить nova-compute
перезапустить nova-network