Wir haben folgende Situationen: Auf einem Server müssen wir 2 IPs festlegen, die auf denselben FQDN verweisen. In der Anwendung, die auf dem Server ausgeführt wird, konfigurieren wir den FQDN. Sobald es ein Problem mit dem Zugriff auf eine IP (basierend auf dem FQDN) gibt, verwendet der Server die zweite IP, die demselben FQDN zugewiesen ist:
Beispiel:
/etc/hosts
wird enthalten
1.1.1.1 server1.google.com
1.1.2.1 server1.google.com
Sobald es ein Problem beim Zugriff auf 1.1.1.1 gibt, verwendet der Server server1.google.com als 1.1.2.1
Können wir so etwas verwenden? Gibt es eine andere Möglichkeit?
Antwort1
/etc/hosts führt kein Round-Robin-Verfahren durch. Es gibt nur die erste Übereinstimmung zurück, die es findet.
Wenn Sie eine Round-Robin-Auflösung wünschen, benötigen Sie hierfür einen vollwertigen DNS-Server.
Darüber hinaus ist Round-Robin-DNS kein gutes Tool für den Lastenausgleich, den Sie ja eigentlich wollen. So praktisch es auch erscheinen mag, die Namensauflösung ist nicht die Ebene, die Sie für das verwenden, was Sie erreichen möchten.
Antwort2
Wenn Sie Ihre Anwendung nicht ändern möchten oder können, müssen Sie irgendwo zwischen dem Server, auf dem die Anwendung ausgeführt wird, und den beiden Servern, die Sie verbinden möchten, eine Lastausgleichsschicht platzieren. Dies ermöglicht Folgendes:
- Verwenden Sie weiterhin denselben DNS-Namen und sogar dieselbe IP-Adresse (der Load Balancer erstellt eine virtuelle IP).
- werden nacheinander an alle Server weitergeleitet
- Vermeiden Sie die Verbindung zu einem Server, der im Problemfall verschwinden würde
- Erlauben Sie, die Authentifizierungssitzung bei Bedarf mit demselben Ziel beizubehalten.
Für Lösungen zum Lastenausgleich können Sie einen Blick auf dieLinux LVS-Projekt.
Sie können Ihre Anwendung auch ändern, sofern dies unterstützt wird, um beide IPs in jeder Verbindungszeichenfolge anzugeben. Die erste IP wird verwendet und wenn diese nicht antwortet, wird die zweite verwendet. Dies hängt jedoch stark von der Sprache ab, die zum Erstellen der Anwendung verwendet wird. Dies ist beispielsweise mit einem Java-Datenbank-Connector möglich.