Rubrique précédente: HALB - Equilibreur de charge HTTP en fonction de la session, basé sur le proxy HA

Rubrique suivante: PS8 - Commutateur de port évolutif

L3LB - Equilibreur de charge TCP/UDP

Dernière version : 2.0.2-1

L3LB - Equilibreur de charge TCP/UDP

Aperçu rapide

Catalogue

Système

Catégorie

Commutateurs

Volumes d'utilisateur

non

Min. mémoire

96M

SE

Linux

Contraintes

non

Présentation fonctionnelle

L3LB est un commutateur qui permet de distribuer les sessions TCP/UDP entrantes à des serveurs du même type ou de types différents. La fonctionnalité d'équilibrage de charge de TCP est basé sur le package logiciel d'équilibrage de charge HAProxy TCP/HTT. L'équilibrage de charge UDP est quant à lui basé sur Netfilter.

L3LB équilibre la charge du trafic entrant à l'aide de plusieurs algorithmes différents. Pour le trafic TCP, L3LB effectue un équilibrage de charge simple par tourniquet, répartissant la charge entre les serveurs principaux. Pour TCP, L3LB prend également en charge des sessions persistantes en reliant le client à un serveur principal particulier à l'aide de l'adresse IP source de la requête en tant que clé. Pour le trafic UDP, L3LB utilise l'algorithme du tourniquet. (Il s'agit du seul algorithme disponible pour le trafic UDP.)

L3LB surveille en permanence l'état d'intégrité de tous les serveurs principaux. En mode TCP, les contrôles d'état de l'intégrité effectués par L3LB consistent en une simple vérification de la connexion TCP. En cas de panne serveur détectée par L3LB à l'aide de la méthode de contrôle de l'intégrité paramétrée, L3LB bascule le trafic vers un serveur alternatif. En cas de reprise éventuelle du serveur ayant échoué, L3LB peut faire rebasculer le trafic sur le serveur récupéré. Pour le mode UDP, une commande ICMP PING est utilisée pour vérifier la disponibilité d'un serveur principal.

L3LB présente une interface de service Web sur son terminal ctl. Cette interface permet aux utilisateurs d'activer/de désactiver facilement les terminaux de sortie out1 - out8 et de récupérer l'état de tous les terminaux. Ceci s'avère utile en cas d'échec d'un système principal (p.ex. au niveau d'une base de données ou d'une appliance de stockage), lorsque l'application proprement dite peut désactiver automatiquement le trafic vers un ensemble spécifique de serveurs. Dans ce cas, L3LB n'est lui-même pas capable de détecter ce type d'échec. Il appartient donc à l'application de détecter l'échec et de désactiver l'ensemble correspondant de serveurs principaux.

L3LB est conçu pour être extrêmement rapide en utilisant très peu de ressources. Dans des conditions normales, L3LB consomme environ 25 Ko de mémoire par session ou 1 Go pour 40 000 sessions simultanées et traite jusqu'à 6000 demandes par seconde.

Périmètre

Ressources

Ressource

Minimum

Maximum

Valeur par défaut

UC

0,1

16

0,4

Mémoire

96 Mo

32 Go

96 Mo

Bande passante

1 Mbit/s

2 Gbits/s

250 Mbits/s

La quantité de mémoire allouée à L3LB n'a pas d'influence sur le débit ou le temps de réponse. L3LB est une appliance liée à l'UC/à la bande passante.

Terminaux

nom

dir

Protocole

description

in

in

Indifférent

Entrée commune. Les requêtes TCP envoyées au terminal in sont dirigées vers l'une des sorties, à l'aide de la sélection par tourniquet ou des informations de session basées sur la source.

ctl

in

HTTP

Terminal de contrôle utilisé pour l'activation/la désactivation des sorties et pour la récupération de l'état des terminaux de sortie.

out1-out8

sortie

Indifférent

Sorties équilibrées. Toutes ces sorties peuvent rester non connectées ; le trafic est réparti uniquement entre les sorties connectées et activées. Par défaut, tous les terminaux sont activés.

MON

sortie

CCE

Permet d'envoyer des statistiques de performances et d'utilisation des ressources.

Propriétés

Propriétés générales

nom

type

description

mode

Chaîne

Spécifie le mode de fonctionnement. Les valeurs valides sont les suivantes :
tcp_roundrobin - Les sessions TCP entrantes sont distribuées sur tous les serveurs principaux connectés et activés à la façon d'un tourniquet.
tcp_source - L'adresse IP source de la requête TCP permet de relier la session à un serveur principal spécifique.
udp_roundrobin - L3LB fonctionne en mode d'équilibrage de charge UDP.
Valeur par défaut : tcp_roundrobin.

ports

Chaîne

Liste de ports ou plages de ports séparés par des virgules ou des espaces que L3LB transfère aux serveurs principaux. Les plages de ports sont spécifiées au format port_inférieur:port_supérieur avec deux-points ou un tiret comme séparateur. Exemple : 80,81,90-99 110:120 140 141. Le trafic reçu sur un port non spécifié est abandonné.
Valeur par défaut : 80

max_connections

nombre entier

Nombre maximum de connexions actives simultanément que L3LB peut gérer. Lorsque ce nombre est atteint, les nouvelles connexions sont toujours acceptées, mais leur traitement est différé jusqu'à la fermeture d'une autre connexion. Au démarrage de l'appliance, L3LB détermine automatiquement le nombre maximum de connexions en fonction de la mémoire disponible, le compare à la valeur de cette propriété et utilise la valeur la plus basse. Si cette propriété est égale à 0, la valeur calculée est utilisée. Ni la mémoire disponible ni aucun paramètre explicite de cette propriété n'exerce d'effet direct sur le débit de l'équilibreur de charge ou son taux de requêtes maximum. Définir un petit nombre (ou une faible quantité de mémoire) n'affecte la réponse que si les serveurs principaux effectuent de longues opérations pour chaque requête (par exemple, des recherches dans la base de données) faisant en sorte que de nombreuses requêtes restent ouvertes simultanément. Cette propriété est uniquement valide pour les modes de fonctionnement tcp_roundrobin et tcp_source.
Valeur par défaut : 0

backup_outputs

Chaîne

Liste de sorties séparées par des virgules ou des points (out1 - out8) considérée comme serveurs de sauvegarde. Les plages de sortie (out1-out3) ne sont pas prises en charge. Le trafic est dirigé vers les serveurs de sauvegarde uniquement si tous les serveurs principaux sont indisponibles. Ces serveurs de sauvegarde ont pour objectif d'avertir les clients d'un problème ou de les rediriger au lieu de renvoyer des erreurs à partir d'un serveur principal indisponible ou de serveurs arrivés à expiration. Exemple : out1,out2,out3. Si aucune valeur n'est spécifiée, aucun serveur de sauvegarde n'est utilisé.
Valeur par défaut : "" (aucun serveur de sauvegarde n'est utilisé).

Propriétés de contrôle de l'intégrité

Un TCP simple se connecte au premier port spécifié dans la propriété ports. Il est utilisé pour les modes de fonctionnement tcp_roundrobin et tcp_source. La commande ICMP ping est toujours utilisée avec le mode de fonctionnement udp_roundrobin.

nom

type

description

healthcheck_interval

Entier

Intervalle (exprimé en secondes) entre les contrôles de l'intégrité. Aucun contrôle de l'intégrité n'est effectué si cette propriété est 0.
Valeur par défaut : 20

Propriétés de délai d'expiration

Ces propriétés sont uniquement valides pour les modes de fonctionnement tcp_roundrobin et tcp_source.

nom

type

description

client_timeout

Entier

Délai d'expiration en secondes pour l'attente d'une requête client après avoir établi la connexion.
Valeur par défaut : 150.

server_timeout

Entier

Délai d'expiration en secondes pour l'attente d'une réponse d'un serveur principal après avoir établi la connexion.
Valeur par défaut : 150.

conn_timeout

Entier

Délai d'expiration en secondes pour l'établissement d'une connexion TCP dans L3LB via l'un de ses terminaux (contrôles de l'intégrité inclus). Notez que lorsque L3LB subit une charge réseau importante, les contrôles de l'intégrité peuvent expirer lorsque ce paramètre est défini sur une valeur très basse. (Dans ces cas L3LB commencera à désactiver les sorties, ce qui peut donner lieu à un comportement inattendu de l'application). Il est déconseillé de définir cette propriété sur une valeur inférieure à 20 secondes.
Valeur par défaut : 20.

Propriétés de l'interface de service Web

nom

type

description

ctl_port

Entier

Port utilisé pour accéder à l'interface de contrôle de service Web via le terminal ctl.
Valeur par défaut : 80

Compteurs personnalisés

L'appliance L3LB signale les compteurs personnalisés suivants par le biais du terminal mon.

Les compteurs suivants appartiennent au groupe de compteurs L3LB. X représente une valeur de 1 à 8.

Nom du compteur

Description

outX_status

Etat du terminal de sortie outX : 0 - activé et opérationnel, 1 - activé et inactif, 100 - déconnecté.

outX_queue

Nombre de requêtes mises en file d'attente pour le terminal outX. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

outX_queue_max

Nombre maximum historique de requêtes mises en file d'attente simultanément pour le terminal outX. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

outX_sessions

Nombre de sessions actives pour le terminal outX.

outX_sessions_max

Nombre maximum de sessions actives simultanément pour le terminal outX.

outX_sessions_total

Nombre de sessions terminées pour le terminal outX. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

outX_errors

Nombre d'échecs de contrôle d'intégrité pour le terminal outX.

file d'attente

Longueur actuelle de la file d'attente, cumulée pour out1 - out8. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

queue_max

Nombre maximum historique de requêtes mises en file d'attente simultanément, cumulées pour out1 - out8. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

sessions_active

Nombre de sessions actives, cumulées pour out1 - out8.

sessions_max

Nombre maximum historique de sessions actives, cumulées pour out1 - out8.

sessions_total

Nombre de sessions terminées, cumulées pour out1 - out8. Ce nombre n'est pas indiqué lorsque vous êtes en mode udp_roundrobin.

erreurs

Nombre total d'échecs de contrôle d'intégrité, cumulés pour out1 - out8.

Performances

Taux de requêtes

L3LB achemine pas moins de 6000 transactions (paires requête/réponse) par seconde, en fonction de la taille de document et de la bande passante réseau disponible.

Débit des données

L3LB achemine pas moins de 15 Mo/seconde.

Connexions simultanées

L3LB prend en charge pas moins de 2000 requêtes en suspens simultanément, (une requête en suspens étant une connexion TCP ouverte à partir du client, sur laquelle une ou plusieurs requêtes TCP sont en cours mais pas terminées). Le nombre maximum de connexions simultanées dépend de la quantité de mémoire disponible et peut atteindre 40 000. L3LB a été testé pour prendre en charge plus de 15000 transferts actifs simultanés.

Messages d'erreur

En cas d'échec de démarrage de l'appliance, les erreurs suivantes peuvent être consignées dans le journal système :

Message d'erreur

Description

Error: unable to determine appliance memory configuration, please contact CA Technologies support.

L3LB n'est pas parvenu à détecter la quantité de mémoire disponible. Contactez le support technique de CA.

Error: failed to create the HAProxy config file, please contact CA Technologies support.

L3LB n'a pas pu créer le fichier de configuration HAProxy. Contactez le support technique de CA..

Error: failed to determine number of available CPUs, please contact CA Technologies support.

L3LB n'est pas parvenu à détecter la quantité d'UC disponible. Contactez le support technique de CA.

Error: invalid operation mode specified

Le mode spécifié n'est pas valide. Le mode doit être l'un des suivants : tcp_roundrobin, tcp_source ou udp_roundrobin

Error: ctl_port value must be between 1 and 65535.

la valeur de ctl_port doit être supérieure à 1 et inférieure à 65535.

Error: failed to start L3LB, please see '/var/log/appliance/log' log file for details.

Une erreur système s'est produite au démarrage de L3LB. Contactez le support technique de CA.

Error: failed to initialize the control web service interface, please contact CA Technologies support.

Une erreur système s'est produite lors de l'initialisation de l'interface de services Web de contrôle fournie sur le terminal ctl. Contactez le support technique de CA.

Error: failed to initialize statistics reporting, please contact CA Technologies support.

Une erreur système s'est produite lors de l'initialisation de la génération des rapports de statistiques. Contactez le support technique de CA.

Error: failed to initialize the user interface terminal, please contact CA Technologies support.

Une erreur système s'est produite lors de l'initialisation de l'interface utilisateur graphique fournie sur le terminal ui. Contactez le support technique de CA.

Contrôle programmé des terminaux de sortie

Présentation

Le terminal ctl fournit une interface de services Web de contrôle (sur le port configuré) permettant d'activer et de désactiver les terminaux de sortie (out1 - out8) et de récupérer l'état actuel des terminaux.

Protocole

Le protocole utilise uniquement la méthode GET HTTP, puisqu'il offre seulement une fonctionnalité de lecture. Ainsi, tous les types de requêtes de protocole pris en charge peuvent être définis au moyen de leur URI et de la structure de sortie. Les caractères considérés comme spéciaux pour l'URI doivent être échappés à l'aide de la norme de codage standard %.

Tous les URI pris en charge sont décrits ci-dessous :

Appels de contrôle

Désactivation des terminaux de sortie

Il existe deux formes distinctes d'appel de contrôle de désactivation, selon la manière dont le terminal de sortie est identifié :

Requête : /api/disable?channel=out3 (désactive le terminal de sortie out3)

Requête : /api/disable?10.11.12.13 (désactive le terminal de sortie connecté au serveur Web qui a pour adresse IP 10.11.12.13)

Réponse :

L3LB renvoie la structure suivante avec un code d'état et un éventuellement un message d'état :

{
   "status" :
   {
   "code" : code_value,
   "message" : "status_message"
   }
}

Les valeurs de code d'état possibles sont répertoriées ci-dessous :

Valeur de code

Description

0

L'opération a réussi ; le terminal a été désactivé.

10

L'opération a échoué ; la configuration L3LB n'a pas été modifiée. Causes les plus probables : le terminal est déjà désactivé ou l'adresse IP spécifiée n'est pas valide.

100

Une erreur s'est produite lors du traitement de la requête. Pour plus d'informations, reportez-vous au message d'état.

Activation des terminaux de sortie

Il existe deux formes distinctes d'appel de contrôle d'activation, selon la manière dont le terminal de sortie est identifié :

Requête : /api/enable?channel=out3 (active le terminal de sortie out3)

Requête : /api/enable?10.11.12.13 (active le terminal de sortie connecté au serveur Web qui a pour adresse IP 10.11.12.13)

Réponse :

L3LB renvoie la structure suivante avec un code d'état et un éventuellement un message d'état :

{
   "status" :
   {
   "code" : code_value,
   "message" : "status_message"
   }
}

Les valeurs de code d'état possibles sont répertoriées ci-dessous :

Valeur de code

Description

0

L'opération a réussi ; le terminal a été activé.

10

L'opération a échoué ; la configuration L3LB n'a pas été modifiée. Causes les plus probables : le terminal est déjà activé ou l'adresse IP spécifiée n'est pas valide.

100

Une erreur s'est produite lors du traitement de la requête. Pour plus d'informations, reportez-vous au message d'état.

Récupération de l'état des terminaux de sortie

Requête : /API/statut (renvoie l'état de tous les terminaux de sortie)

Réponse :

L3LB renvoie la structure suivante avec un code d'état et un éventuellement un message d'état :

{
   "status" :
   {
   "code" : code_value,
   "message" : "status_message",
   "terminal_id" : "terminal_state",
   "terminal_id" : "terminal_state",
   ...
   }
}

L'état est uniquement renvoyé pour tous les terminaux connectés. L'état des terminaux désactivés et déconnectés n'est pas signalé.

Les valeurs de code d'état possibles sont répertoriées ci-dessous :

Valeur de code

Description

0

L'opération a réussi.

100

Une erreur s'est produite lors du traitement de la requête. Pour plus d'informations, reportez-vous au message d'état.

Les valeurs de terminal possibles sont out1 - out8.

Les valeurs d'état possibles sont les suivantes :

Valeur d'état

Description

up

Le terminal est connecté et actif.

down

Le terminal est inactif. Le serveur Web connecté à ce terminal est arrêté ou n'est pas parvenu à effectuer le contrôle de l'intégrité de L3LB.

Exemple d'état de terminaux de sortie :

{
   "status" :
   {
   "code" : 0,
   "message": "",
   "out1": "up",
   "out2": "up",
   "out3": "down",
   "out4": "up"   

}

Utilisation standard

Equilibrage de charge de clusters de messagerie Web

Le courrier électronique est devenu une partie importante des processus métier de nos jours. Fès lors, les clusters de messagerie Web doivent être disponibles 24 heures/24, 7 jours sur 7. L'exemple suivant illustre comment HALB et L3LB peuvent être utilisés ensemble pour équilibrer la charge et augmenter la disponibilité des serveurs webmail et SMTP. En cas d'échec, les serveurs peuvent désactiver les sorties d'HALB ou de L3LB via l'interface ctl. Le mode L3LB tcp_roundrobin est utilisé dans ce cas.

Utilisation simultanée de HALB et de L3LB pour équilibrer la charge et augmenter la disponibilité des serveurs webmail et SMTP

Equilibrage de charge de serveurs d'applications

Un site Web moderne sert rarement uniquement du contenu statique. Habituellement, le traitement côté serveur se produit côté serveur. Ce diagramme d'exemple démontre une façon d'équilibrer la charge pour fournir un accès ininterrompu d'un cluster de serveurs Web à un plusieurs serveurs d'applications ; Apache Tomcat dans ce cas. Le mode de fonctionnement tcp_source aide à assurer l'adéquation du serveur Web pour la prise en charge de session du serveur d'applications.

Equilibrage de charge de serveurs d'applications

Equilibrage de charge de services VoIP

Les protocoles VoIP courants utilisent UDP comme protocole principal. L'équilibrage de charge de ce trafic est une tâche cruciale pour la mise à l'échelle d'un cluster VoIP. Dans cet exemple, le mode de fonctionnement udp_roundrobin est utilisé.

Equilibrage de charge du service VoIP

Commentaires

Logiciels Open Source et tiers utilisés au sein de l'appliance

L3LB utilise les packages Open Source tiers suivants en plus des packages Open Source tiers utilisés par sa classe de base LUX5.

Logiciel

Version

Modifié

Licence

Commentaires

haproxy

1.2.18

Non

GPLv2

page d'accueil

libxml2

2.6.26

Non

MIT

sans objet

php-thttpd

2.25b

Non

BSD

sans objet

libipt_statistic

1.3.5-1.2.1

Non

GPLv2

page d'accueil

iptables

1.3.5-1.2.1

Non

GPLv2

page d'accueil

Conception de l'implémentation

Classe de base

L'image d'appliance LUX5 est utilisée comme classe de base pour l'appliance L3LB.

Volumes de classe

Aucun redimensionnement du disque n'est nécessaire, L3LB utilise les valeurs par défaut définies pour la classe de base LUX5.

Contenu du répertoire L3LB

Le logiciel L3LB est installé dans la sous-arborescence /appliance.

script de contrôle de l'intégrité udp_healthchecker.pl pour le mode de fonctionnement udp.

Packages

Les packages standard suivants (du miroir officiel) sont installés :

Par ailleurs, les packages personnalisés suivants sont installés (sources incluses).

Contenu du répertoire de version :

Image d'appliance exportée :

Sources

Tests (Reportez-vous au plan de test CatSwitchesL3LBTp et aux notes de parution CatSwitchesL3LBRelNotes) :

l3lb-24-test.1.0.0.tar.bz2 - scripts de test pour CA 3Tera AppLogic 2.4

Principe de fonctionnement

L3LB utilise un seul service d'arrière-plan - L'équilibreur de charge HAProxy TCP/HTTP (http://haproxy.1wt.eu). Pour les besoins de l'équilibrage de charge tcp, seul le mode de fonctionnement TCP est activé.

Plusieurs écouteurs et serveurs principaux sont définis dans le fichier de configuration haproxy.cfg qui est créé par le script appliance.sh au démarrage de l'appliance, à l'aide des valeurs de propriétés configurées. Un écouteur est créé pour le terminal in et est utilisé pour tout le trafic du réseau entrant dont la charge doit être équilibrée. Un autre écouteur est créé sur l'interface utilisateur afin d'exporter les statistiques de l'interface utilisateur graphique vers l'utilisateur. Un écouteur supplémentaire est créé sur l'interface de bouclage interne lo0 afin d'extraire les statistiques d'exécution et de les signaler via le terminal mon. Chaque terminal outX connecté est défini en tant que serveur principal pour acheminer le trafic entrant.

L'écouteur sur le terminal d'entrée reçoit une requête HTTP et selon son mode de fonctionnement, modifie le cookie en passif, d'insertion et de synchronisation. La requête est ensuite envoyée à l'un des serveurs principaux. Si une session existe pour cette requête, elle est envoyée au même serveur principal que pour toutes les requêtes précédentes. S'il n'existe aucune session existante pour cette requête, le serveur d'arrière-plan est sélectionné par tourniquet. Il se peut que la réponse du serveur soit de nouveau modifiée et renvoyée au client.

Configuration

Le fichier de configuration pour HAProxy est généré au démarrage par le script d'initialisation appliance.sh . il utilise les propriétés définies dans le fichier /etc/applogic.sh et les utilise pour créer un fichier de configuration /appliance/haproxy.cfg. Plusieurs propriétés supplémentaires calculées à l'heure de début sont écrites dans le fichier de configuration (adresse ulimit-n, nbproc, bind).

Fichiers journaux

La journalisation des requêtes est désactivée dans L3LB. Seules les erreurs critiques sont signalées dans le journal système, les autres erreurs ne sont pas consignées.

Remarques

Logiciels Open Source et tiers utilisés au sein de l'appliance

L3LB utilise les packages Open Source tiers suivants en plus des packages Open Source tiers utilisés par sa classe de base LUX5.

Logiciel

Version

Modifié

Licence

Remarques

haproxy

1.4.9

Non

GPLv2

page d'accueil

php-thttpd

2.25b

Non

BSD

N/D

libipt_statistic

1.3.5-1.2.1

Non

GPLv2

page d'accueil

iptables

1.3.5-5.3.el5_4

Non

GPLv2

page d'accueil