Nova 網路 DHCP 未使用 force_dhcp_release=True 釋放 ip
我看到的問題是,當 nova-network 在實例終止時呼叫 dhcprelease 時(由於forcehcp_release=True),地址並不總是被釋放(系統日誌沒有顯示 DHCPRELEASE 請求)。稍後,如果 nova 分配了一個新實例,但未釋放的相同 IP 地址,則忽略 DHCP 請求,並且 syslog 中的錯誤將顯示 dnsmasq 看到該請求並拒絕,因為該 IP 地址已租用給不同的 MAC 地址(屬於舊的、已終止的 VM)。
關於我的設置的一些細節:
- 朱諾發布
- 舊版 (nova-) 網路
- Ubuntu 14.04
- 由 DNSMASQ 處理的 DHCP。
當主機能夠從 DHCP 伺服器獲取其 IP 地址時,一切似乎都執行良好。似乎該錯誤僅發生在無法釋放 ip 並阻止後續將其用於未來 VM 的情況下。
我檢查了我的 nova-* 日誌中的任何錯誤,但沒有看到任何錯誤。當 dnsmasq 由於 MAC 地址衝突而拒絕租用 IP 地址時,唯一的錯誤出現在我的系統日誌中。
任何資訊或建議將不勝感激。
我仍然無法為這個問題找到完美的解決方案,但我已經找到了問題區域並有一些解決方法。
**1. 問題區域:**問題在於 dnsmasq 而不是 OpenStack。我觀察到 OpenStack 在每次終止實例後都會執行“dhcprelease”功能,但 dnsmasq 只響應很少的 dhcprelease 請求。
**2. 解決方法:**任何 lP 的預設租約時間為 24 小時(86400 秒),這意味著每個實例必須在每 24 小時後更新其租約。如果實例不更新其 IP 租約,則 dnsmasq 將認為該租約無效並釋放該租約獲得的 IP。
我已將該租約減少到 3 分鐘(180 秒)。所以任何租約都不能在實例終止後超過 3 分鐘持有 IP。
將租用時間減少到 3 分鐘的步驟:
在所有計算節點上一一執行以下步驟。
- 打開一個文件 /etc/nova/nova.conf
vi /etc/nova/nova.conf
- 在$$ DEFAULT $$部分配置 dhcp_lease_time。
以秒為單位。
$$ DEFAULT $$
…
dhcp_lease_time = 180
- 保存並退出文件。
- 殺死伺服器上每個網橋的 dnsmasq 程序。(或者,如果 dnsmasq 不用於任何其他目的,您也可以執行 killall)
殺死(或 killall dnsmasq)
- 重啟服務。
重啟 nova-api-metadata
重啟 nova-compute
重啟 nova-network