Frage Weisen Sie 1 Eintrag in der Datei hosts mehrere IPs zu


Ich habe einen Web-Server, der sich über ein VPN mit einer internen Datenbank verbindet. Es gibt 2 IPs (primär und sekundär) für die Datenbank vom Webserver. Wie kann ich meine / etc / hosts-Datei so einrichten, dass, wenn die primäre IP nicht verfügbar ist, die sekundäre IP verwendet wird?

Würde das für meine Hosts-Datei funktionieren?

141.131.286.1   abc.efg.datastore.com   #primary

141.131.286.237 abc.efg.datastore.com   #secondary

21
2017-09-19 12:23


Ursprung


linuxmisc.com/4-linux/391d5fa7270c26bc.htm - dmourati


Antworten:


Die Host-Datei bietet keinen solchen Mechanismus. Wenn Sie zwei IP-Adressen für denselben Namen auflisten, wird nur die erste verwendet. Es gibt also keine primären und sekundären IPs.

Außerdem verarbeitet die hosts-Datei keine URLs. Es behandelt nur Namen wie die in der Frage angegebenen. Eine URL enthält vollständigen Pfad und Protokoll wie http://host/path/to/resource.


21
2017-09-19 12:47



Bearbeitet Titel und Benennung in OPs Frage, um die Verwirrung über URLs / Hosts zu beseitigen. - dmourati


Sie können keine Resilience oder Round Robin Load Balancing über die /etc/hosts Datei - es ist nicht für diesen Zweck konzipiert.

Stattdessen, Ihre Optionen sind ... (In keiner bestimmten Reihenfolge)

  1. Konfigurieren Sie Ihr Netzwerk ordnungsgemäß, sodass sich Routen ändern, wenn eine Verbindung gelöscht wird
  2. Verwenden Sie den DNS-Round-Robin-Lastenausgleich (keine gute Idee TM) mit einem Managed Service (zB loaddns.com oder dnsmadeeasy.com etc.)
  3. Verwenden Sie einen lokalen L3-Lastenausgleich für den ausgehenden Datenverkehr (HAProxy?) Mit den erforderlichen Back-Ends
  4. Erweitern Sie die Widerstandsfähigkeit Ihrer Webanwendung

13
2017-09-19 15:10



Der DNS-Round-Robin-Lastenausgleich ist normalerweise nicht belastbar. Einer ist ausgewählt und andere werden nicht ausprobiert. - anttiR
Eine andere Option könnte sein, Netcat oder eine andere Software zu verwenden, um die Verbindung zu einer IP weiterzuleiten. Dann ändern Sie die Weiterleitung, wenn eine IP verloren ist. - anttiR
@anttiR DNS RR allein hat keine Ausfallsicherheit, wird aber über einen verwalteten DNS-Dienstanbieter verwendet. Ich habe meine Antworten bearbeitet und einige Beispiele gegeben, um klarer zu sein. - Ben Lessani - Sonassi
Ich bezweifle, dass es mit Datenbank gut funktionieren würde. Sie haben die Tendenz, eine IP zu holen und dabei zu bleiben. Eine Internet-Website würde andererseits großartig funktionieren. - anttiR
Das hängt vom Resolver des Host-Rechners ab. Wenn der DNS-Resolver auf einen nicht-cachenden Dienst eingestellt ist - oder die DNS-Registrars-DB direkt abfragt, dann würde es funktionieren. Aber wie ich schon sagte, Das ist keine gute Idee, es ist nur eine Idee. - Ben Lessani - Sonassi


/ etc / hosts unterstützt kein Round-Robin, aber Sie können ein einfaches Bash-Skript schreiben, um einen Eintrag zu ersetzen, der mit einem #RoundRobin-Kommentar markiert ist (oder ein anderes Tag, das Sie verwenden möchten, reflektieren Sie es einfach in der grep-Zeile im Skript) .

#!/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

Das obige Skript erfasst die Ausgabe von nslookup für sub.domain.com und speichert sie in einem Array. Es druckt dann den obersten Wert auf $ new und ergreift den vorhandenen Wert für das Tag #RoundRobin, das in / etc / hosts zugewiesen wurde ... Zuletzt führt es eine sed-Ersetzung durch

Der Eintrag in / etc / hosts würde so aussehen

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

Platziere dieses Skript schließlich in der crontab des root, um es jede Stunde oder so zu starten, und du hast jetzt ein / etc / host Round-Robin.

Dies ist besonders nützlich, wenn Sie eine codierte Seite haben, die einige Daten von einer API bezieht und die DNS-Suche für den API-Server viel Zeit für die Skriptausführung der Seite verursacht ... was zu einem hohen CPU-Verbrauch führt, was sonst passieren würde scheint eine einfache Seite zu sein. Um die kostspielige DNS-Suche zu vermeiden (insbesondere, wenn Ihre Website Hunderte von ihnen pro Minute mit starkem Datenverkehr belegt), sollten Sie / etc / hosts verwenden, um den FQDN des Remote-API-Servers aufzulösen. Dadurch wird die CPU-Auslastung für das Abrufen der API-Daten und das Generieren der Seite drastisch reduziert.


1
2017-12-31 12:03





Ja, es würde funktionieren.

Der Suchmechanismus geht jedoch einfach die Liste durch, bis eine Übereinstimmung gefunden wird.

Während also die Antwort auf die geschriebene Frage JA ist, wird es eine Herausforderung sein. Aber nichts ist unüberwindbar.

Versuchen Sie Folgendes: Jede dieser IP-Adressen muss wirklich unterschiedliche Namen haben.


0
2018-05-22 03:47