5 votes

Mise en grappe de IIS et de SQL Server

J'ai un service WCF déployé sur IIS et utilisant SQL Server 2008 comme backend.

Ma question est la suivante : comment puis-je faire un cluster (équilibrage de charge/retournement) sur IIS et sur SQL Server et quel genre de choses dois-je garder à l'esprit avant de le faire ? (par exemple, dois-je déplacer les sessions de la mémoire vers le serveur SQL, etc.)

De plus, comment puis-je m'assurer que les deux serveurs SQL ont les données miroir en permanence et que les deux serveurs SQL partagent les informations de verrouillage (ligne, page, table) en temps réel ?

C'est la première fois que je participe à ce projet. Est-ce que cela s'appelle du web farming ?

1voto

Svet Points 1432

Je suppose que IIS et SQL sont sur des serveurs séparés :

IIS : Vous pouvez utiliser la fonction NLB de Microsoft pour répartir la charge entre 2 ou plusieurs serveurs. Il peut s'agir d'éditions Web de Windows. C'est inclus dans Windows. Vous aurez une IP virtuelle à laquelle le client se connectera. Les serveurs "partageront" cette IP et répartiront le client sur différents serveurs. Le multicast/unicast dépend du réseau, du nombre de nœuds et de la communication intra-serveur ou non. NLB ne tient pas compte des applications, si vous fermez IIS, les utilisateurs seront perdus si vous avez une affinité. NLB supprime simplement un serveur s'il est hors service d'un point de vue IP. Vous devrez modifier la métabase d'IIS (loadbalancercapabilities) comme expliqué ici : http://technet.microsoft.com/en-us/library/cc757659(WS.10).aspx Du point de vue de la licence, elle est incluse dans Windows, sans coût supplémentaire.

Du point de vue de WCF : Le client se connectera à l'un des X serveurs web. Vous pouvez les maintenir sur les mêmes serveurs pendant que celui-ci fonctionne (par affinité). L'affinité est basée sur un hachage entre l'IP du client et l'IP virtuelle. Si un serveur tombe en panne, le client sera réparti sur d'autres serveurs. Si vous utilisez les sessions/authentification http, vous devrez stocker la session en dehors du serveur, par exemple dans la base de données. Sinon, la session du client sera perdue en cas de panne du serveur.

SQL : Vous avez différentes options : utiliser le mécanisme SQL pour répliquer la base de données, ou utiliser Microsoft MSCS (cluster). Cette dernière option implique la version entreprise de Windows et un stockage partagé externe, ce qui implique un coût élevé (mais toujours la version standard de SQL). Avec la couche SQL pure, vous pouvez mettre en miroir votre base de données. Chaque serveur dispose d'un stockage local, et le serveur principal envoie les transactions à la volée au serveur secondaire (synchrone ou asynchrone). Lorsque votre serveur web se connecte, le serveur lui indique qu'un serveur de secours est disponible en cas de problème, via le client SQL natif ou ADO.Net. Ainsi votre serveur web bascule automatiquement sur le serveur de secours en cas de problème. Tout ceci fonctionne avec la version standard de SQL. Les bases de données doivent être en mode de récupération complète. C'est par base de données, donc si votre WCF utilise plusieurs bases de données, et qu'une seule est cassée, vous aurez un problème parce qu'une base de données est maintenant active sur le serveur de secours, mais toutes les autres sont toujours sur le serveur primaire.

Plus d'informations ici : http://technet.microsoft.com/en-us/library/cc917680.aspx

1voto

Ampersand Points 185

J'ai 6 serveurs iis et j'ai aussi un service WCF.

J'utilise ARR (Application Request Routing), une extension du module IIS, pour acheminer la demande vers ma ferme web. Cela fonctionne très bien.

J'utilise également NLB pour mon service WCF comme Mathieu le dit.

Pour mon serveur SQL, j'utilise Hyper-V, deux VM pour mon serveur sql, avec un cluster SQL et un cluster Windows faileover et une migration en direct.

Je vais répondre en français, donc si quelqu'un peut traduire, ce sera apprécié.

Ce que vous devez faire, c'est avoir un serveur de cluster. Ce serveur va servir à maintenir le "heart beat" entre vos deux serveur SQL. Les deux serveur SQL doivent être sur des machines distinct, mais doivent partager le même partage réseaux (SAN ou NAS ou autre). Les bases de donnée sont monté sur un seul serveur à la fois. Lorsque le "heart beat" est brisé, l'autre serveur prend la relève, et monte en une fraction de seconde les base de donnée et votre service est revenue, ceci est le "failover cluster". Lorsque le processus de transfert de serveur commence vous pouvez perdre quelques pings. Ce qui va détruire tous vos connection actuelle vers la base de donnée. La seul facons que vous pouvez être "UP" à 99 % c'est d'y ajouter live migration. Vous avez un 2 serveur Hyper-V (host) qui monte vos deux serveur SQL (un sur chaque host), vous activer le live migration entre vos deux machine virtuel, donc si vous avez à redémarer un host (serveur qui héberge SQL), vous faites un live migration de votre machine sql d'un host à l'autre. La mémoire sera transferer d'un coté à l'autre et vous n'aurez aucune perte de connection. Votre failover fonctionne toujours, donc si c'est la machine virtuelle qui détient le service sql qui plante, alors c'est l'autre qui va prendre la relève et vous perdrez alors quelques ping mais votre service sera remonté très rapidement.

J'epère que cela va vous aider, et désoler pour le francais, mais en anglais j'aurais surement été mal compris.

-1voto

Shahin Points 1968

Oui, les serveurs web en grappe sont normalement appelés fermes web (notez que le terme n'est pas associé à des bases de données SQL, mais uniquement à des serveurs web).

On utilise normalement un équilibreur de charge devant les serveurs Web.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X