2009-05-09 8 views
0

Actuellement, nous utilisons l'interrogation DNS pour quatre serveurs Web.À propos de l'interrogation DNS

Le problème que nous avons rencontré est le suivant: Lorsque l'utilisateur actualise, il peut aller sur d'autres serveurs Web. Cela est très gênant lorsqu'un utilisateur est déjà connecté. Nous utilisons une session pour mémoriser l'état de la connexion, mais lors de l'actualisation sur d'autres serveurs Web, la session est perdue. La meilleure solution devrait donc être de faire en sorte que l'utilisateur soit toujours sur le même serveur Web lors de son actualisation. y a t-il une sortie?

Répondre

1

Les serveurs Web peuvent-ils utiliser un serveur de base de données commun pour stocker les informations de session? Les quatre serveurs Web sont-ils tous sur le même site et le même réseau, ou sont-ils distribués?

+0

ce sera mieux si aucun changement de code n'est nécessaire – omg

0

Si le premier, vous pouvez inclure un ID de serveur quelque part dans la réponse HTTP, de sorte qu'un proxy inverse devant les vrais serveurs puisse identifier quel serveur est responsable de la session.

1

Je sais que certains équilibreurs de charge basés sur le matériel créeront une relation «collante» entre un utilisateur et un serveur pour éviter ce type de problème.

+0

Qu'en est-il de la redondance dans cette solution? Ces boîtiers de matériel partagent-ils des informations entre eux, ou quelque chose? –

+0

pourriez-vous s'il vous plaît dites-moi quel est ce matériel plz? – omg

+0

@Reef - Oui, vous pouvez obtenir deux équilibreurs de charge matérielle et ils forment une paire de basculement active/passive. @Shore - http://www.kemptechnologies.com/server-load-balancing.shtml?q=matrix&gclid=CPqRqd3zsZoCFQSwFQodIAdrcA Il y a aussi d'autres fabricants, vous pouvez google "web load balancer" pour voir les autres. Espérons que ça aide! –

2

Ok, je crois que vous voulez dire "Round Robin DNS". Eh bien, ce que vous décrivez est un very common problem et il n'y a pas de "bonne" solution, car les réponses possibles dépendent de nombreuses variables: essayez-vous de fournir un basculement automatique ou juste l'équilibrage de charge? Êtes-vous prêt à dépenser du temps et/ou de l'argent dans un équilibreur de charge? Quelles technologies utilisez-vous? Java EE? PHP? Apache? IIS? Cela dit, si vous êtes juste après l'équilibrage de charge et le basculement n'est pas un problème, vous pouvez utiliser des noms différents pour chaque serveur (www1, www2, www3 et ainsi de suite) et rediriger vers eux à partir de votre serveur Web "principal" (www) lors du premier accès. C'est simple (et simpliste) mais pratique dans quelques contextes.

0

Un serveur DNS capable de répondre en fonction de l'emplacement du client pourrait résoudre ce problème. PowerDNS avec le module geoip ou GeoIPdns en sont quelques exemples. Vous devez vous assurer que les jeux d'adresses IP ne se chevauchaient pas, de sorte qu'un client obtenait toujours la même réponse.

Ceci ne fournirait pas une sorte de basculement par lui-même.

+0

Il aurait besoin d'utiliser f.e. wackamole pour s'assurer que quelque chose est toujours sur l'IP (unique) qui est dans le DNS. En outre, cela ne peut pas être bon si son site Web serait mentionné à la télévision dans un petit pays. Un seul serveur peut gérer les demandes. –

1

Vous avez pas mal d'options.

  • Vous pouvez stocker des sessions dans une clé: stockage de valeur, f.e. memcached (mon favori personnel)
  • Vous pouvez stocker des sessions dans une base de données
  • Vous pouvez mettre des équilibreurs de charge proxy inverse comme dans DNS et vos serveurs à l'arrière. Réglez-le ensuite pour que toutes les demandes provenant des mêmes adresses IP soient dirigées vers les mêmes serveurs, quel que soit le loadbalancer par lequel ils passent. Dans HAProxy, cette option est appelée balance source. Attention: si le nombre de nœuds change, les sessions peuvent être perdues. Vous pouvez utiliser les fonctionnalités cookie ou url_param pour éviter cela.

Voir le HAProxy documentation. Ça vaut le coup de lire, vraiment.