![Nova ネットワーク DHCP が force_dhcp_release=True で IP を解放しない](https://rvso.com/image/668062/Nova%20%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%20DHCP%20%E3%81%8C%20force_dhcp_release%3DTrue%20%E3%81%A7%20IP%20%E3%82%92%E8%A7%A3%E6%94%BE%E3%81%97%E3%81%AA%E3%81%84.png)
私が見ている問題は、インスタンスの終了時にnova-networkがdhcpreleaseを呼び出すとき(強制リリース=True) アドレスが常に公開されるわけではない(syslogにDHCPRELEASEリクエストが表示されないその後、Novaが新しいインスタンスに同じIPアドレスを割り当てた場合、ないリリースされた DHCP 要求は無視され、syslog のエラーには、dnsmasq が要求を認識し、IP アドレスがすでに別の MAC アドレス (古い終了した VM に属するもの) にリースされていたため拒否したことが示されます。
私のセットアップに関する詳細:
- ジュノリリース
- レガシー(nova-)ネットワーク
- ウブントゥ 14.04
- DHCP は DNSMASQ によって処理されます。
ホストが DHCP サーバーから IP アドレスを取得できる場合、すべてが正常に動作しているように見えます。エラーは、IP の解放に失敗し、将来の VM での使用をブロックする場合にのみ発生するようです。
nova-* ログでエラーがないか確認しましたが、何も見つかりませんでした。競合するMACアドレスのためにdnsmasqがIPアドレスのリースを拒否したときのみ、syslogにエラーが記録されます。。
あらゆる情報や提案をいただければ幸いです。
答え1
まだこの問題の完璧な解決策を見つけることはできませんが、問題領域を見つけ、いくつかの回避策があります。
1. 問題領域:問題は OpenStack ではなく dnsmasq にあります。OpenStack はインスタンスを終了した後に毎回「dhcprelease」関数を実行しているのに、dnsmasq はいくつかの dhcprelease 要求にしか応答していないことに気づきました。
2. 回避策:すべての IP のデフォルトのリース時間は 24 時間 (86400 秒) です。つまり、各インスタンスは 24 時間ごとにリースを更新する必要があります。インスタンスが IP のリースを更新しない場合、dnsmasq はそのリースを無効と見なし、そのリースによって取得された IP を解放します。
私はそのリースを 3 分 (180 秒) に短縮しました。そのため、インスタンスを終了してから 3 分以上は、どのリースも IP を保持できなくなります。
リース時間を 3 分に短縮する手順:
すべてのコンピューティング ノードで次の手順を 1 つずつ実行します。
- /etc/nova/nova.confファイルを開きます。
: : nova.conf を vi します。
- [DEFAULT] セクションで dhcp_lease_time を設定します。
単位は秒です。
[デフォルト]
...
dhcp_lease_time = 180
ファイルを保存して終了します。
サーバー上の各ブリッジの dnsmasq プロセスを強制終了します。(または、dnsmasq が他の目的で使用されていない場合は、killall を実行することもできます)
kill (または killall dnsmasq)
- サービスを再起動します。
nova-api-metadata を再起動し
、nova-compute を再起動し
、nova-network を再起動します。