2009-05-09 14 views
0

Derzeit verwenden wir DNS-Abfragen für vier Webserver.Über DNS-Abfragen

Das Problem, das wir haben, ist das: Wenn der Benutzer aktualisiert wird, könnte er zu anderen Webservern gehen. Das fühlt sich sehr schlecht an, wenn sich ein Benutzer bereits angemeldet hat. Da wir eine Sitzung verwenden, um den Anmeldestatus zu speichern, wird die Sitzung bei der Aktualisierung auf andere Webserver jedoch unterbrochen.

Die beste Lösung sollte also sein, den Benutzer immer noch auf dem gleichen Webserver zu haben, wenn er aktualisiert wird. Gibt es einen Ausweg?

Antwort

1

Können die Webserver einen gemeinsamen Datenbankserver zum Speichern der Sitzungsinformationen verwenden?

+0

ist es am besten, wenn keine Codeänderung erforderlich ist – omg

0

Sind die vier Webserver alle auf derselben Site und demselben Netzwerk oder sind sie verteilt?

Wenn das erste, Sie können eine Server-ID irgendwo in der HTTP-Antwort enthalten, so dass ein Reverse-Proxy vor den realen Servern identifizieren kann, welcher Server für die Sitzung verantwortlich ist.

1

Ich weiß, dass bestimmte hardwarebasierte Load Balancer eine "sticky" Beziehung zwischen einem Benutzer und einem Server erstellen, um diese Art von Problem zu vermeiden.

+0

Was ist mit Redundanz in dieser Lösung? Teilen diese Hardwarekästen Informationen zwischen ihnen oder etwas? –

+0

können Sie mir bitte sagen, was ist das Hardware-plz? – omg

+0

@Reef - Ja, Sie können zwei Hardware Load Balancer erhalten, die ein aktiv/passives Failover-Paar bilden. @Shore - http://www.kemptechnologies.com/server-load-balancing.shtml?q=matrix&gclid=CPqRqd3zsZoCFQSwFQodIAdrcA gibt es auch andere Hersteller, können Sie google "Web Load Balancer" um andere zu sehen. Hoffe, dass hilft! –

2

Ok, ich glaube, du meinst "Round Robin DNS". Nun, was Sie beschreiben, ist eine very common problem und es gibt keine "richtige" Lösung für sie, da die möglichen Antworten von vielen Variablen abhängen: Versuchen Sie, automatische Failover oder nur Lastverteilung bereitzustellen? Sind Sie bereit, Zeit und/oder Geld in einem Load Balancer zu verbringen? Welche Technologien verwenden Sie? Java EE? PHP? Apache? IIS?

Nachdem Sie gesagt haben, wenn Sie nur nach Load-Balancing und Failover ist kein großes Problem, möchten Sie möglicherweise verschiedene Namen für jeden Server (www1, www2, www3 usw.) verwenden und umleiten sie von Ihrem "Haupt" Webserver (www) beim ersten Zugriff. Es ist einfach (und simpel), aber in einigen Einstellungen praktisch.

0

Ein DNS-Server, der basierend auf dem Standort des Clients antworten kann, könnte dieses Problem lösen. PowerDNS mit dem GeoIP-Modul oder GeoIPdns sind einige Beispiele. Sie müssten sicherstellen, dass sich die IP-Adresssätze nicht überschneiden, sodass ein Client immer dieselbe Antwort erhält.

Dies würde keine Art von Failover allein bieten.

+0

Er müsste f.e. wackamole um sicherzustellen, dass immer etwas auf der (einzelnen) IP ist, die in DNS ist. Dies kann auch nicht gut sein, wenn seine Website in einem kleinen Land im Fernsehen erwähnt würde. Nur ein Server konnte die Anforderungen verarbeiten. –

1

Sie haben eine ganze Reihe von Optionen.

  • Sie können Sitzungen in einem Schlüssel speichern: Wertspeicher, z. memcached (mein persönlicher Favorit)
  • Sie können Sitzungen in einer Datenbank speichern
  • Sie können Reverse-Proxy Loadbalancer wie in DNS und Ihre Server in der Rückseite setzen. Stellen Sie sie dann so ein, dass alle Anfragen derselben IPs an dieselben Server gesendet werden, unabhängig davon, über welchen Loadbalancer sie verfügen. In HAProxy heißt diese Option . Achtung: Wenn sich die Anzahl der Knoten ändert, können die Sitzungen verloren gehen. Sie können die Funktionen cookie oder url_param verwenden, um dies zu vermeiden.

Siehe die HAProxy documentation. Es ist wirklich lesenswert.