2010-06-11 11 views
1

SO je suis en train de mettre en place une configuration à charge équilibrée pour notre application web avec nginx. Je serais très probablement aller avec des sessions collantes pour éviter les problèmes de session sur la configuration de charge équilibrée ou peut-être même aller avec un gestionnaire de session de base de données.Quelle est la meilleure façon de charger la balance? PHP

Cependant, il y a 2 préoccupations que j'ai en ce moment:

1: Lors du déploiement de SVN (nous utilisons beanstalk), il ofcourse déployer sur une machine, comment aller sur le déploiement sur tous les serveurs Web?

2: J'utilise S3 pour stocker des fichiers utilisateur, mais je garde une copie locale incase S3 tombe en panne (comme il y a quelques jours), quelle serait la meilleure approche pour synchroniser ces fichiers utilisateur sur tout le web serveur?

Des pointeurs seraient appréciés.

Répondre

1

SO je suis en train de mettre en place une charge configuration équilibrée pour notre application web avec nginx

OK

Je voudrais aller très probablement avec des séances collantes pour éviter les problèmes de session sur la configuration à équilibrage de charge

Alors vous n'allez pas avec l'équilibrage de charge, vous envisagez la répartition des charges?

Ne pas.

Terminé correctement, l'équilibrage de charge signifie que vos chances de perte de service sont réduites exponentiellement par le nombre de nœuds. Supposons que la probalité d'un noeud individuel est de 0,05 (c'est-à-dire 95% de disponibilité), alors la probabilité de perdre les deux noeuds est de 0,05 x 0,05 = 0,0025 (99,75% de disponibilité). OTOH si vous divisez la charge comme vous le suggérez, vous perdez 1/N de votre disponibilité chaque fois qu'un nœud tombe en panne, et la probabilité de perdre un nœud est N * 0.05, donc vous obtenez seulement 96.75% de disponibilité avec 2 nœuds.

En ce qui concerne les déploiements sur plusieurs nœuds, comme je l'habitude de le faire était de: 1) prendre un nœud, appelez node1, hors ligne 2) appliquent la libération à node1 3) vérifier que le déploiement a réussi 4) apporter node1 retour en ligne 5) prendre node2 hors ligne 6) rsync de node1 à NODE2 7) rsync course à nouveau pour vérifier qu'il avait terminé 8) mettre le noeud 2 de retour en ligne puis répétez 5-8 pour chaque noeud supplémentaire

quelle serait la meilleure approche synchroniser ces fichiers utilisateur sur tous les serveurs Web?

La méthode ci-dessus est pour les déploiements - pour les données soumises par l'utilisateur, vous devez distribuer le contenu au moment où il est soumis. J'utilise des scripts personnalisés pour cela. Dans le cas où un nœud est hors ligne lors de la mise à jour, il peut être resynchronisé (étapes 6 + 7) avant de le rendre disponible à nouveau.

Les scripts que j'ai utilisés ont envoyé une requête à un noeud pour lui demander de copier à partir de l'expéditeur de la demande afin qu'il puisse s'exécuter avec de courts délais et garantir que le contenu source était disponible.En termes de mise en œuvre de l'équilibrage de charge - bien que vous puissiez dépenser beaucoup d'argent en achetant du matériel sophistiqué, je n'ai encore rien vu qui fonctionne mieux que le round-robin pour de nombreuses raisons - pas moins que le basculement est implémenté de manière transparente chez le client.

HTH

C.

+0

Notez qu'avec 2 serveurs, vous n'avez pas de quorum pour résoudre les problèmes de split-brain, ce qui peut poser problème selon la configuration de votre base de données – symcbean

0

Avec une configuration frontale active-active et des sessions collantes que vous pouvez prendre l'un des serveurs hors de la rotation, attendez que les sessions claires, mettre à niveau ce serveur avant de passer tous Trafic vers ce premier serveur, attendez que les sessions soient effacées sur le deuxième serveur, puis retirez-le de la rotation, mettez-le à niveau et ajoutez-le à la rotation. De cette façon, vous obtiendrez une mise à niveau propre sans perte de service. Si vous utilisez un état de session partagé, vous pouvez probablement attendre que les sessions soient terminées, mais assurez-vous de le faire sur un banc d'essai avant de le faire en production si cela est important pour vous et faites très attention aux mises à niveau stockage de session. Par le passé, j'ai utilisé un système qui avait un partage NFS répliqué sur chacun des serveurs Web frontaux qui nous permettait de partager entre eux des données qui conviendraient à votre cache S3. Je ne sais pas exactement comment cela a été mis en place par le FAI, mais nous n'avons jamais eu de problème, même lorsque l'un des serveurs a subi une panne de disque.

Questions connexes