11.3. Cible CLUSTERIP

La cible CLUSTERIP est utilisée pour créer des clusters (grappes de serveurs) de noeuds répondant à la même adresse IP et MAC. C'est une forme simple de clustering où vous pouvez placer une IP virtuelle (VIP) sur tous les hôtes participant au cluster, et ensuite utiliser le CLUSTERIP sur chaque hôte qui est supposé répondre aux requêtes. La correspondance CLUSTERIP ne nécessite aucun matériel ou machine d'équilibrage de charge, il fait simplement son travail sur chaque partie hôte du cluster de machines. C'est une solution de clustering très simple et non prévue pour des clusters complexes et importants, elle ne possède pas de gestion de détection de collision native, mais peut être implémentée comme un simple script.

Tous les serveurs du cluster utilisent une Multicast MAC commune pour une VIP, et un algorithme spécial est utilisé dans la cible CLUSTERIP pour savoir quels participants au cluster répondront à chaque connexion. Une Multicast MAC est une adresse MAC (adresse matérielle) démarrant avec 01:00:5e. Un exemple d'adresse MAC serait 01:00:5e:00:00:20. La VIP peut être n'importe quelle adresse IP, mais doit être la même sur tous les hôtes.

[Important] Important

Souvenez vous que CLUSTERIP peut interrompre des protocoles comme SSH, etc. La connexion s'acheminera proprement, mais si vous essayez en même temps sur le même hôte, vous pourrez être connecté sur une autre machine du cluster, avec un jeu de clés différent, et votre client ssh peut refuser de se connecter ou afficher des erreurs. Pour cette raison, ça ne fonctionne pas très bien avec certains protocoles, et ce peut être une bonne idée d'ajouter des adresses séparées qui peuvent être utilisées pour la maintenance et l'administration. Une autre solution est d'utiliser les mêmes clés SSH sur tous les hôtes du cluster.

Le cluster peut être en équilibrage de charge avec trois sortes d'empreintes numériques. La première est seulement l'IP source (sourceip), la seconde est la source IP et le port (sourceip-sourceport) et la troisième la source IP le port source et le port destination (sourceip-sourceport-destport). La première est très utile si vous avez besoin de conserver les états entre connexions, par exemple un serveur web avec un panier d'achat virtuel peut conserver les états entre connexions, cet équilibrage de charge peut devenir un peu brouillon -- différentes machines peuvent avoir une charge plus haute que d'autres, etc. -- car les connexions depuis la même IP source iront vers le même serveur. L'empreinte numérique sourceip-sourceport est utile si vous voulez obtenir un équilibrage de charge un peu plus uniforme, et où les états n'ont pas à être conservés sur chaque serveur entre les connexions. Par exemple, une grosse page web de documentation avec peut être un simple moteur de recherche semble une bonne idée dans ce cas. La troisème empreinte numérique, sourceip-sourceport-destport, peut vous rendre des services si vous avez un hôte sur lequel tournent plusieurs services qui ne nécessitent pas que les états soient préservés entre les connexions. Ce peut être par exemple un simple ntp, dns et serveur web sur le même hôte. Chaque connexion vers chaque nouvelle destination devra être "renégociée" -- actuellement il n'y a pas de négociation, chaque hôte reçoit une connexion.

Chaque cluster CLUSTERIP possède un fichier séparé dans le répertoire /proc/net/ipt_CLUSTERIP, basé sur la VIP du cluster. Si la VIP est 192.168.0.5 par exemple, faire un cat /proc/net/ipt_CLUSTERIP/192.168.0.5 pour voir à quels noeuds la machine répond. Pour faire en sorte que la machine réponde à une autre machine, placez le noeud 2, en utilisant echo "+2" >> /proc/net/ipt_CLUSTERIP/192.168.0.5. Pour le supprimer lancez echo "-2" >> /proc/net/ipt_CLUSTERIP/192.168.0.5.

Tableau 11.2. Options de la cible CLUSTERIP

Option --new
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new ...
Explication Ceci crée une nouvelle entrée CLUSTERIP. Elle doit être placée dans la première règle pour une VIP, et est utilisée pour créer un nouveau cluster. Si vous avez plusieurs règles de connexion vers le même CLUSTERIP vous pouvez omettre le mot-clé --new dans toutes les références secondaires vers la même VIP.
Option --hashmode
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 443 -j CLUSTERIP --new --hashmode sourceip ...
Explication

Le mot-clé --hashmode spécifie le genre d'empreinte numérique qui sera créée. Elle peut être l'une des trois suivantes :

  • sourceip

  • sourceip-sourceport

  • sourceip-sourceport-destport

L'empreinte numérique a été expliquée ci-dessus. De façon basique sourceip donnera de meilleures performances entre les connexions, mais ne possède pas un bon équlibrage de charge entre les machines. sourceip-sourceport procure un mode de hachage légèrement plus lent et n'a pas une bonne maintenance d'états entre les connexions, mais permet un meilleur équlibrage de charge. La dernière crée des modes de hachage très lents consommant beaucoup de mémoire, mais permet un équlibrage de charge très performant.

Option --clustermac
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5e:00:00:20 ...
Explication L'adresse MAC que le cluster écoute pour les nouvelles connexions. C'est une adresse Multicast MAC sur laquelle tous les hôtes sont en écoute. Voir plus haut pour plus d'explication.
Option --total-nodes
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5e:00:00:20 --total-nodes 2 ...
Explication Le mot-clé --total-nodes spécifie combien d'hôtes participent au cluster et répondront aux requêtes. Voir plus haut pour plus d'explication.
Option --local-node
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5e:00:00:20 --total-nodes 2 --local-node 1
Explication C'est le numéro que cette machine a dans le cluster. Le cluster répond en séquence périodiquement, donc une fois qu'une nouvelle connexion est établie par le cluster, la machine suivante répond, et la suivante, ainsi de suite.
Option --hash-init
Exemple iptables -A INPUT -p tcp -d 192.168.0.5 --dport 80 -j CLUSTERIP --new --hashmode sourceip --clustermac 01:00:5e:00:00:20 --hash-init 1234
Explication Spécifie un grenage aléatoire pour l'initialisation du hachage.

[Avertissement] Avertissement

Cette cible est en violation de la RFC 1812 - Requirements for IP Version 4 Routers aussi méfiez vous des problèmes qui pourraient survenir. La section 3.3.2 indique qu'un routeur ne doit jamais faire confiance à un autre routeur ou hôte qui indique utiliser une Multicast MAC.

[Note] Note

Fonctionne avec les derniers noyaux Linux 2.6, indiqué comme expérimental.