我看到的問題是,當 nova-network 在實例終止時呼叫 dhcprelease 時(由於強制hcp_release=True)地址並不總是被釋放(系統日誌未顯示 DHCPRELEASE 請求)。然後,如果 nova 為新實例分配了與先前相同的 IP 位址不是釋放的 DHCP 請求將被忽略,系統日誌中的錯誤將顯示 dnsmasq 看到該請求並拒絕,因為該 IP 位址已租用給不同的 MAC 位址(屬於舊的、已終止的 VM)。
有關我的設置的一些詳細資訊:
- 朱諾號發布
- 傳統(nova-)網絡
- 烏班圖14.04
- DHCP 由 DNSMASQ 處理。
當主機能夠從 DHCP 伺服器取得其 IP 位址時,一切似乎都運作得很好。似乎只有當 IP 無法釋放並阻止未來 VM 後續使用它時才會出現錯誤。
我檢查了 nova-* 日誌中是否有任何錯誤,但沒有看到任何錯誤。當 dnsmasq 由於 MAC 位址衝突而拒絕租用 IP 位址時,唯一的錯誤出現在我的系統日誌中。
任何資訊或建議將不勝感激。
答案1
我仍然無法找到此問題的完美解決方案,但我已經找到了問題區域並有一些解決方法。
1. 問題領域:問題出在 dnsmasq 而不是 OpenStack。我觀察到 OpenStack 每次終止實例後都會執行“dhcprelease”函數,但 dnsmasq 僅回應少數 dhcprelease 請求。
2.解決方法:任何 lP 的預設租約時間為 24 小時(86400 秒),這表示每個實例必須每 24 小時後續訂其租約。如果執行個體不續約其 IP 租約,則 dnsmasq 將認為該租約無效並釋放該租約所獲得的 IP。
我已將租約縮短至 3 分鐘(180 秒)。因此,在終止執行個體後,任何租約都無法保留 IP 超過 3 分鐘。
將租賃時間減少到 3 分鐘的步驟:
在所有計算節點上一一執行下列步驟。
- 開啟檔案 /etc/nova/nova.conf
vi /etc/nova/nova.conf
- 在 [DEFAULT] 部分中設定 dhcp_lease_time。
這是以秒為單位的。
[預設]
...
dhcp_lease_time = 180
儲存並退出文件。
終止伺服器上每個網橋的 dnsmasq 進程。 (或如果 dnsmasq 不用於任何其他目的,您也可以執行killall)
殺死(或殺死所有dnsmasq)
- 重新啟動服務。
重新啟動 nova-api-元資料
重新啟動 nova-compute
重新啟動 nova-network