Je configure une application à hébergée à l'aide de VMS (probablement Amazon, mais qui n'est pas définie dans la pierre) qui nécessitera à la fois un équilibrage de la charge HTTP et une charge de charge d'un grand nombre (50K environ si possible) de persistant TCP Connections. La quantité de données n'est pas si élevée, mais les mises à jour sont fréquentes.
En ce moment, j'évalue les équilibreurs de la charge et je suis un peu confus sur l'architecture de haproxy. Si j'utilise haproxy pour équilibrer le TCP Connexions, tout le trafic résultant doit-il passer à travers l'équilibreur de charge? Si oui, une autre solution (telle que LVS ou même nginx_tcp_proxy_module) serait une meilleure ajustement ?
Haproxy (comme de nombreux équilibreurs de charge) gagne généralement deux conversations. Le proxy a une session (TCP dans ce cas) avec le client et une autre session avec le serveur. Par conséquent, avec des proxies, vous avez suivi 2 fois les connexions sur l'équilibreur de charge. Par conséquent, tous les flux de trafic traversent l'équilibreur de charge.
Lorsqu'il s'agit de mettre à l'échelle sur plusieurs équilibreurs de charge, je ne pense pas que vous en avez besoin. Mais un moyen pratique et assez facile de le faire est d'utiliser quelque chose comme une chose à suivre avec deux Flottant IPS et Round Robin DNS entre ces deux IPS. Avec Keepalivité, si l'un des équilibreurs de charge tombe en panne, l'autre déterrerait les deux IP, vous obtenez donc une haute disponibilité de cette façon. Cela étant dit, je pense que vous irez bien avec une instance haproxy active avec votre charge.
Les échelles haproxy très bien. Un exemple, le réseau d'échange de pile utilise des sockets Web qui maintiennent des connexions TCP. Bien que je pose cela, nous avons 143 000 sockets TCP sur une machine virtuelle VMware sans aucun problème. L'utilisation de la CPU sur le VM est d'environ 7%.
Avec ce type de configuration avec Haproxy, assurez-vous de définir maxconn
assez haut. Voici un exemple d'exemple Haproxy config pour vous aider à démarrer:
frontend fe_websockets
bind 123.123.123.123:80
mode tcp
log global
option tcplog
timeout client 3600s
backlog 4096
maxconn 50000
default_backend be_nywebsockets
backend be_nywebsockets
mode tcp
option log-health-checks
option redispatch
option tcplog
balance roundrobin
server web1 10.0.0.1:1234
server web2 10.0.0.2:1234
timeout connect 1s
timeout queue 5s
timeout server 3600s
Il est possible d'utiliser et de configurer DSR (retour de serveur direct), mais cela n'a rien à voir avec le voleur de production mais est configuré dans la pile TCP (tables de routage). Nous l'utilisons pour un grand portail de stringage vidéo. Bien que cela fonctionne, cela vous donnera des maux de tête importants en ce qui concerne la complexité du routage nécessaire.
Ainsi, je ne recommanderais pas d'utiliser cette technique sans tenir compte de l'utilisation et des inconvénients très soigneusement.
Peut-être qu'il y a quelques astuces pour commencer là-bas:
S'amuser!
Oui, tout le trafic devrait normalement passer par l'équilibreur de charge. Les demandes sont reçues par l'équilibreur de charge et les réponses sont renvoyées à l'équilibreur de charge qui les renvoient aux clients.
Pour choisir le bon outil, je n'ai pas beaucoup d'expérience sur les autres options. J'utilise haproxy et c'est vraiment bon et stable et peut gérer une grande quantité de trafic. En outre, ses capacités d'ACLS sont excellentes.