hostsファイルの1つのエントリに複数のIPを割り当てます


29

VPN経由で内部データベースに接続するWebサーバーがあります。Webサーバーからデータベースへの2つのIP(プライマリおよびセカンダリ)があります。プライマリIPが使用できない場合にセカンダリIPが使用されるように/ etc / hostsファイルを設定するにはどうすればよいですか?

これは私のhostsファイルで機能しますか?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

回答:


26

hostsファイルはそのようなメカニズムを提供しません。同じ名前の2つのIPをリストすると、最初の1つだけが使用されます。したがって、プライマリIPやセカンダリIPなどはありません。

また、hostsファイルはURLを処理しません。質問で提供されているような名前を処理するだけです。URLには、などの完全なパスとプロトコルが含まれhttp://host/path/to/resourceます。


URL /ホストに関する混乱を排除するために、OPの質問のタイトルと名前を編集しました。
dmourati

14

/etc/hostsファイルを介して復元力またはラウンドロビンの負荷分散を提供することはできません。その目的のために設計されていません。

代わりに、あなたのオプションは... (順不同)

  1. ネットワークを適切に構成して、リンクがドロップされたときにルートが変更されるようにします
  2. 管理されたサービス(たとえば、loaddns.comまたはdnsmadeeasy.comなど)を使用して、DNSラウンドロビンロードバランシング(A Good Idea TMではありません)を使用します。
  3. 必要に応じて定義されたバックエンドで、アウトバウンドトラフィック(HAProxy?)にローカルL3ロードバランサーを使用する
  4. Webアプリケーション自体に回復力を組み込む

通常、DNSラウンドロビンロードバランシングは回復力がありません。1つが選択され、他は試行されません。
アンティライツォラサークルコンサルティング

別のオプションは、netcatまたは別のソフトウェアを使用して、接続をIPに転送することです。次に、1つのIPが失われた場合に転送を変更します。
アンティライツォラサークルコンサルティング

1
@anttiR DNS RR単独では回復力はありませんが、マネージドDNSサービスプロバイダーを介して使用されます。回答を編集し、より明確にするためにいくつかの例を示しました。
ベンレサニ-ソナシ

私はそれがデータベースでうまくいくとは思わない。1つのIPを取得し、それに固執する傾向があります。一方、インターネットのウェブサイトはうまくいくでしょう。
アンティライツォラサークルコンサルティング

それはホストマシンのリゾルバに依存します。DNSリゾルバーが非キャッシングサービスに設定されている場合、またはDNSレジストラーDBを直接ポーリングする場合、機能します。しかし、私が言ったように、それは良いアイデアではなくただのアイデアです。
ベン・レッサーニ-ソナシ

3

/ etc / hostsはラウンドロビンをサポートしていませんが、#RoundRobinコメントでタグ付けされたエントリ(またはスクリプト内のgrep行に反映するだけの他のタグ)をsedに置き換える単純なbashスクリプトを書くことができます。

#!/bin/bash
fqdnips=( $(nslookup sub.domain.com|grep Address:|awk -F\  '{ print $2 }'|grep -v '#') )

new=`printf "${fqdnips[@]}"`
old=`grep "#RoundRobin" /etc/hosts|awk -F\  '{ print $1 }'`
sed -i "s/$old/$new/g" /etc/hosts

上記のスクリプトは、sub.domain.comのnslookupの出力を取得し、配列に保存します。次に、最上位の値を$ newに出力し、/ etc / hostsで割り当てられたタグ#RoundRobinの既存の値を取得します...最後に、sed replaceを実行します

/ etc / hostsファイルのエントリは次のようになります

127.0.0.1        localhost
::1              localhost
11.12.13.14      sub.domain.com      #RoundRobin

最後に、このスクリプトをルートのcrontabに配置して1時間ごとに実行すると、/ etc / hostラウンドロビンが作成されます。

これは、APIから一部のデータをプルするコード化されたページがあり、APIサーバーのDNSルックアップがページのスクリプト実行で多くのハング時間を引き起こしている場合に特に役立ちます。シンプルなページのように見えます。コストのかかるDNSルックアップを回避するには(特に、サイトで1分間に大量のトラフィックを処理している場合)、/ etc / hostsを使用してリモートAPIサーバーのFQDNを解決する必要があります。これにより、APIデータを取得してページを生成するためのCPU使用量が大幅に削減されます。


DNSキャッシュは、1分あたり何百もの検索のケースを軽減しませんか?
Xalorous

DNSサーバーを制御していません。CentOSWebサーバーで設定できるものですか?
Satalink


0

はい、動作します。

ただし、検索メカニズムは、一致するものが見つかるまでリストを実行します。

そのため、書かれている質問への答えはイエスですが、それは挑戦になるでしょう。しかし、乗り越えられないものはありません。

これを試してください:それらのIPアドレスのそれぞれは、本当に異なる名前を持つ必要があります。


1
いいえ、機能しません。/ etc / hostsの値の2番目の出現は使用されません。そして、2番目のIPアドレスの名前を別のホスト名に変更した場合、負荷分散を行うためにアプリで何かをする必要があります。DNSまたはDNS + Load Balancerが正しい答えである場合、それは高価で手間がかかります。
Xalorous

0

これを実現する簡単な方法は、AWS Route53などのパブリックDNSサービスを使用することです。Aレコードごとに複数のIPアドレスを優先的に入力できます

abc.efg.datastore.com

10 141.131.286.1  
20 141.131.286.237 

証明書が含まれていない限り、これは機能しており、標準やベストプラクティスに反することさえありません。

NSLookupまたは他のドメインクエリは両方のアドレスを返します。アプリはこれを処理できる必要があります。はい、ドメインはローカルホスト名だけでなく、公的に登録されたドメインである必要があります。


ブラウザはこれを処理できます。10が利用できない場合は20にフォールバックします。確かにアプリに依存し、可用性を確認するポイントもあるはずです-より複雑な設定を回避したい場合ロードバランシングでは高価です。
ボルトラン

Aレコードには優先度フィールドがありません。一部の権威あるDNSサービスにはレコードの重み付けがありますが、これは確率的にレコードを含めるか除外することで行われます。
マットノルドホフ

0

セットアップが簡単です。指示に従ってください。

  1. dnsmasqをインストールする
  2. /etc/resolv.confを編集し、「nameserver 127.0.0.1」を最初のDNSとして設定します
  3. 代替として通常のDNSを追加します(たとえば、Googleの1つ)「nameserver 8.8.8.8」を2行目に追加します
  4. 2つの必須レコードが/ etc / hostsファイルにあることを確認してください
  5. ここでコマンドホストabc.efg.datastore.com

    で確認し、RR-DNSで2つのレコードに応答する必要があるため、リストの1つのノードがダウンしている場合-アプリケーションは別のノードに接続されます

1
IPスタックは、DNSに問い合わせる前に、hostsファイルを自動的にチェックします。これはIP定義の一部であると思いますが、WindowsとLinuxの両方がこのパターンに従っていることを知っています。dnsmasqは必要ありません。/etc/resolv.confをこの方法で変更すると、実際のDNSサーバーへの接続が失われます。
Xalorous

真実ではない、彼は次の行は、例えば、+ nscdの既存のレコードをキャッシュするための「ネームサーバ8.8.8.8」であることができるので、このアプローチは正確に記載された問題を解決するためのresolv.confに複数行を置くことができます
Ihor Kolodyuk

それはあなたが彼に言ったことではありません。あなたは彼にネームサーバーをループバックに設定するように言った。ネームサーバーとしてループバックを追加するとは言わなかった。ただし、ホストが名前付きで実行されていない場合、またはホストがループバックでリッスンしていない場合でも、そのアドレスへのDNSクエリは応答されません。ホストファイルにアドレスを追加するだけで解決できますが、ホスト名が同じ場合は最初のアドレスのみが使用され、最初に戻ります。答えは、エイリアスを重み付けしてDNSに仮想ホストを設定するか、ロードバランサーを使用してデータベースの前に置くことです。
Xalorous

それはまさに私が彼に言った、dnsmasqはネームサーバープロキシとして機能しています。このアプローチは機能します。
イホールコロドゥク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.