Проблема, которую я вижу, состоит в том что, когда сетевые вызовы новинки dhcprelease после завершения экземпляра (из-за forcedhcp_release=True) адрес не всегда выпускается (системный журнал не показывают запрос DHCPRELEASE). Затем позже, если новинка присвоила новому экземпляру тот же IP-адрес, который не был выпущен, запрос DHCP проигнорирован, и ошибка в системном журнале покажет, что dnsmasq видел запрос и отказался, потому что IP-адрес был уже сдан в аренду другому MAC-адресу (тот, принадлежащий старому, завершенному, VM).
Некоторые детали о моей установке:
Когда хосты могут получить свой IP-адрес от сервера DHCP, все, кажется, работает превосходное. Кажется, как будто ошибка состоит только в том, когда IP не удается быть выпущенным и блоки последующее использование его для будущего VM's.
Я проверил на любые ошибки в своей новинке -* журналы, и не смотрите никого. Единственные ошибки находятся в моем системном журнале, когда dnsmasq отказывается арендовать IP-адрес из-за конфликтующих MAC-адресов.
Любая информация или предложения очень ценились бы.
Я все еще не могу найти идеального решения для этой проблемы, но я нашел проблемную область и нашел решение.
1. Область проблемы: Проблема заключается в dnsmasq, а не в OpenStack. Я заметил, что OpenStack каждый раз выполняет функцию «dhcprelease» после завершения экземпляра, но dnsmasq отвечает только на несколько запросов dhcprelease.
2. Обходной путь: Время аренды по умолчанию для любого LP составляет 24 часа (86400 секунд), что означает, что каждый экземпляр должен продлевать аренду через каждые 24 часа. Если экземпляр не продлит аренду IP-адреса, то dnsmasq сочтет эту аренду недействительной и освободит IP, полученный в результате этой аренды.
Я сократил срок аренды до 3 минут (180 секунд). Таким образом, любая аренда не сможет удерживать IP более 3 минут после завершения работы экземпляра.
Шаги по сокращению времени аренды до 3 минут:
Выполните следующие действия на всех вычислительных узлах один за другим.
vi /etc/nova/nova.conf
[ПО УМОЛЧАНИЮ]
...
dhcp_lease_time = 180
Сохранить и закрыть файл.
Завершить процесс dnsmasq для каждого моста на сервере. (ИЛИ вы можете выполнить killall также, если dnsmasq не используется для каких-либо других целей)
kill (ИЛИ killall dnsmasq)
перезапустить nova-api-metadata
перезапустить nova-compute
restart nova-network