Configuration d'un cluster de serveur d'équilibrage de charge haute vitesse – web / db / NFS

Je suis à la recherche de conseils sur la meilleure façon (principalement en termes de matériel) pour configurer un cluster de serveur d'équilibrage de charge à grande vitesse sur un budget (par exemple, £ 2,000 – £ 3,000) pour héberger des services Web derrière une seule adresse IP, pris en charge par Serveurs db et un système de fichiers commun. Tout sur linux.

Pour les serveurs Web, je sais que je voudrais configurer IPVS avec apache, mais je ne connais pas la meilleure façon de dépenser pour le matériel. Je envisageais d'avoir une seule machine (idéalement avec une sauvegarde) en prenant des requêtes sur Internet et en équilibrant la charge parmi un éventail de serveurs apaches. Chacun des serveurs du tableau a un accès partagé à un système de fichiers commun. Avec le temps, j'ajouterais plus de sévers au tableau pour augmenter la capacité.

  1. Le système est toujours gâché par l'équilibreur de charge. Quel type de machine aurais-je besoin pour supporter des volumes de trafic très élevés / pas si élevés? Qui est plus important – processeur / RAM

  2. Pour les machines dans le tableau apache, qu'est-ce que je vais pour – plus de processeurs, processeurs plus rapides, plus de RAM, etc. – qui sont les plus importants, et est-ce important même si j'avais l'intention d'ajouter plus de machines?

  3. Quelle est la meilleure façon de mettre en œuvre le système de fichiers partagé afin d'offrir une évolutivité (facile à ajouter plus d'espace disque) et des performances (car c'est aussi un goulet d'étranglement). Je souhaite des conseils sur le logiciel et le matériel.

  4. Estimations coût / performance pour les machines pour chacune des différentes tâches.

  5. Toute idée des types de trafic que vous pourriez utiliser pour un nombre donné de machines avec cette configuration.

One Solution collect form web for “Configuration d'un cluster de serveur d'équilibrage de charge haute vitesse – web / db / NFS”

Je devais concevoir quelque chose de similaire récemment. Voici mon arrière-plan conceptuel du design de l'enveloppe

Répartition de la charge

Je suppose que les gars du réseau ont configuré un routage redondant et hautement disponible, un chiffrage et un tissu de commutation qui fournit des demandes de chargement d'équilibreurs.

(Si ce n'est pas le cas, j'irais avec une configuration HA HAUT de PF ou IPtables avec un basculement automatique à l'aide de la carpe ou de la maintenance). Les spécifications des équilibreurs de charge dépendraient de la méthode de distribution de la charge d'application Web et du coût entre autres mesures.

En fonction du budget, l'équilibrage de charge pourrait être implémenté à l'aide d'équilibreurs de charge basés sur le matériel qui ont tendance à être pris en charge – Proxies basées sur le logiciel telles que HAProxy

Les équilibreurs de charge doivent être très disponibles, donc je voudrais passer une partie de la charge active avec des sauvegardes de secours (disons 2 instances HAProxy avec 2 en mode veille).

J'aurais une couche de routage pour envoyer les requêtes aux équilibreurs de charge. Dans le cas où l'un des équilibreurs de charge a échoué, une solution basée sur le maintien de la main-d'œuvre serait utilisée pour remplacer sans problème la boîte défectueuse.

Une fois que les équilibreurs de charge acceptent les demandes, ils les transmettraient à la couche de mise en cache. La couche de mise en cache traiterait:

  • Demandes de contenu statique.
  • Contenu comportant un en-tête HTTP indiquant qu'il n'a pas encore expiré.
  • Compresser le contenu de texte statique tel que les fichiers CSS et JS.

La couche de mise en cache peut être implémentée en utilisant une solution telle que SQUID ou NGINX en proxy inverse. Ce faisant, nous réduirons la charge sur le serveur d'applications en envoyant uniquement des requêtes dynamiques aux serveurs Apache / PHP.

Pour garder les coûts au minimum, j'aurais HAPROxy et NGINX assis sur la même boîte.

Une façon simple et évolutive de le faire serait de disposer de CSS, JS et des images statiques desservies par un sous-domaine du site (par exemple http://cdn.myservice.com/static ). À l'aide d'une telle configuration, nous pourrions à l'avenir installer des instances de mise en cache dans le monde entier et avoir DNS envoyer des requêtes statiques à l'instance CDN la plus proche. Au départ, le travail CDN peut être traité par ces instances NGINX pour réduire les coûts.

Couche de traitement

La couche de traitement se compose d'un pool de serveurs optimisé pour Apache / PHP. Ils chargeraient leurs fichiers de configuration à partir d'un partage de système de fichiers NFS ou distribués et répondraient à leurs demandes en traitant des scripts PHP à partir d'un autre partage distant (NFS ou DFS). L'utilisation de ces données distantes facilite la configuration des tâches de maintien et de synchronisation des configurations de serveurs.

Apache et PHP pourraient être optimisés par exemple par:

  • Suppression de modules inutiles en PHP et Apache.
  • En utilisant un cache PHP Opcode tel que APC pour réduire les frais généraux de compilation PHP.
  • Optimiser les paramètres d'Apache tels que les paramètres MPM et keep-alive.

Un pool de serveurs memcache peut également être configuré pour stocker les résultats de requêtes de base de données courantes et coûteuses. Les requêtes de lecture seraient généralement envoyées aux esclaves si elles ne se trouvaient pas dans la couche de memcache et leurs résultats seraient ensuite mis en cache. Les écritures seraient envoyées au maître et pourraient entraîner l'invalidation des données dans la couche memcache. Les données de session PHP peuvent également être partagées sur memcached de sorte que, si un serveur Apache / PHP unique échoue, les serveurs restants peuvent récupérer les données de session de memcache.

La mise à l'échelle de la charge dans le pool de traitement serait une question d'ajouter plus de serveurs et de mettre à jour les proxies inverses. Le pool de serveurs peut être partitionné en plusieurs groupes logiques. Un groupe logique utiliserait alors une configuration commune partagée sur NFS et pourrait être mise à niveau sous forme de bloc.

La mise à niveau peut ensuite être surveillée et si des problèmes sont détectés, des fichiers peuvent être implémentés ou un retrait mis en œuvre. Le groupe logique pourrait être distribué sur des racks qui ne partagent rien (Power, commutateurs réseau, etc.) et se composent de membres disparates (disons les modèles de serveurs A, B et C de Dell) afin que les tests de migration de blocs soient complets.

Base de données

Pour la base de données, j'aurais un serveur MySQL fonctionnant dans une configuration master / multi slaves. Le maître serait optimisé pour les écritures avec la journalisation binaire activée pour la réplication. Cela signifie généralement que nous utiliserions l'optimisation habituelle pour MySQL comme:

  • Utilisation de RAID 10 et de lecteurs RPM élevés.
  • Désactivation d'atime / mtime sur les répertoires de données mysql.
  • Réglage des paramètres d'innodb pour CPU et RAM.
  • Indexation et partitionnement adéquats des tables.
  • Surveillez le journal des requêtes lente et utilisez les requêtes avancées au format profice.
  • Surveillance de la performance de la base de données.

Les esclaves seraient con fi gurés pour les lectures et devront être surveillés en permanence pour le délai de réplication en utilisant un utilitaire tel que le battement de coeur mk de maatkit. Un serveur à retardement peut être supprimé du jeu de lecture PHP jusqu'à ce qu'il atteigne.

En cas de panne de base:

  • Un esclave sera promu au master.
  • Des modifications seront apportées à DNS pour indiquer le nouveau maître.
  • Les resolvers du réseau sont rechargés pour refléter les modifications DNS.
  • D'autres esclaves sélectionnent automatiquement le nouveau maître (nous pouvons rendre la position et le fichier binlog identiques sur le maître et les esclaves pour faciliter cette migration)
  • Les serveurs Apache / PHP écriraient automatiquement au nouveau maître puisque les résolveurs DNS renverraient le nouveau maître. Les lectures seront également envoyées aux serveurs appropriés en utilisant DNS round robin avec des enregistrements A / AAAAA pour l'ensemble esclave.

Une alternative au DNS peut conserver la liste des bons esclaves dans un cache tel que memcache et le mettre à jour de manière appropriée.

Pour compléter cela, j'aurais un poste de travail ou deux pour la surveillance du réseau et l'agrégation des rapports. J'utiliserais Munin / Zenoss pour l'analyse des tendances, un serveur syslog pour l'agrégation des journaux des serveurs, des scripts personnalisés pour l'analyse et l'alerte des journaux. Nagios peut également être utilisé pour fournir un aperçu global de l'infrastructure et des alertes.

Mise à l'échelle

La mise à niveau de l'infrastructure pour plus de charge serait traitée par:

  • L'augmentation des équilibreurs de charge renverse les serveurs proxy pour gérer plus de contenu statique.
  • Répartition géographique du contenu statique. Selon le coût, le travail CDN peut être externalisé à un service tel que le cloudfront d'Amazon.
  • Augmenter le nombre de serveurs Apache / PHP pour gérer plus de charge.
  • Augmenter le nombre d'esclaves MySQL.
  • Briser la fédération maître et MySQL pour présenter une vue unifiée des tables réparties sur un cluster de serveurs de base de données
  • Accès au port 8000 sur ubuntu dans vmware fusion
  • Réseau ponté KVM comme dans la boîte virtuelle
  • Combien de servers virtualisés sur une carte réseau
  • Réseau privé entre deux machines virtuelles KVM
  • La duplication des adresses MAC sur le même LAN peut-elle provoquer des problèmes?
  • XenServer pour NAS et virtualisation
  • Appliquer libwirt nwfilter sans éditer XML
  • même sous-réseau, VLAN différent dans la machine virtuelle
  • Comment puis-je fournir des services à un extranet interne à antenne aérienne?
  • Faible performance du TCP, incertain de la cause
  • Comment faire pour apather le trafic à partir d'une VirtualBox VM uniquement sur un VPN?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.