web-dev-qa-db-ja.com

ダウンタイムを発生させずにDNSリゾルバー構成を更新するにはどうすればよいですか?

メモ

この問題に関する他のすべては時代遅れまたは矛盾しているように見えるので、新しい質問。投票してください:)

問題

Ubuntu 12および14サーバーの標準インストールでは、DNSを変更する方法は、interfacesファイルを編集し、そこにdns-オプションを追加することであると思われます。唯一の問題は、アップタイムが懸念されるサーバーでは、これらの変更を強制的に適用する唯一の方法は、影響を受けるネットワークインターフェイスをifdown/ifupでバウンスすることです。

DNSの変更セットを作成するために多数のサーバーがあり、この方法でネットワークインターフェイスを切り替えることなく、リゾルバーの構成をまとめて更新する必要があります。また、再起動後に変更が保持されることを確認する必要があります。

問題は、これらのサーバーがすべてinterfacesファイルのdns-オプションで構築されていることです。つまり、resolvconfheadまたはtailファイルを変更すると、再起動すると重複する行が大量に発生します。

プロセスは次のようなものである必要があります。

  1. リゾルバーの構成を完全に排除します(今のところどこにでもあります)
  2. オプションを新しい既知の適切な値に設定します
  3. これらのオプションを保存して、アプリケーションですぐに使用できるようにし、再起動後にそれらが適切な場所にあるようにします。

だから、要約:

動作しないもの

  • interfacesの行を編集します(インターフェースをリサイクルするには停止が必要です)
  • Resolv.confを直接編集します(有効にならず、保存されません)
  • Resolvconf headまたはtailファイルの編集(有効にならず、再起動時に行が重複します)

実際の質問

このような変更を有効にする方法はありますか?withoutサービスを中断しますか?理想的には、インターフェイスを切り替えることなく、resolvconfに更新プロセスを強制的に実行させることができます。

4
Mikey T.K.

resolv.confを一貫性のない状態にすることが絶対にできない場合、私がしたことは次のとおりです。

  1. dns-/etc/network/interfaces行から生成されたリゾルバーの「状態」は/var/run/resolvconf/interface/(interfacename).inetに保存されます-このファイルは切り捨てられました。

  2. 同じデータ(searchnameserverなど、完成したresolv.confにあるものと同じものが/etc/resolvconf/resolv.conf.d/tailにコピーされました(tailファイルを作成する必要がありました) )、適切なコメントを追加して、後で来た人が何が起こったかを見ることができるようにします。

  3. /etc/network/interfacesdns行はコメント化されました

  4. 最後に、resolvconf -uを実行して、テールファイルから/etc/resolv.confを再生成します

これには次の効果があります。

  • リゾルバーの設定をネットワークインターフェースから分離する(単一のインターフェースボックスを使用している場合は、不必要に迷惑になります)

  • リゾルバー設定を単一の目的のテキストファイル(tailファイル)に配置する

  • 変更をすぐに有効にする

  • ..そしてそれらを再起動後も持続させる

  • そして、resolvconfの通知メカニズムをそのままにして、システム全体の/etc/resolv.confを再生成します。

  • ...ダウンタイムなし:D

2
Mikey T.K.