Nova ネットワーク DHCP が force_dhcp_release=True で IP を解放しない

Nova ネットワーク DHCP が force_dhcp_release=True で IP を解放しない

私が見ている問題は、インスタンスの終了時に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 つずつ実行します。

  1. /etc/nova/nova.confファイルを開きます。

: : nova.conf を vi します。

  1. [DEFAULT] セクションで dhcp_lease_time を設定します。
    単位は秒です。

[デフォルト]
...
dhcp_lease_time = 180

  1. ファイルを保存して終了します。

  2. サーバー上の各ブリッジの dnsmasq プロセスを強制終了します。(または、dnsmasq が他の目的で使用されていない場合は、killall を実行することもできます)

kill (または killall dnsmasq)

  1. サービスを再起動します。

nova-api-metadata を再起動し
、nova-compute を再起動し
、nova-network を再起動します。

関連情報