Equilibrio de carga en Amazon EC2?


Hemos estado luchando con HAProxy desde hace unos días en Amazon EC2; la experiencia hasta ahora ha sido genial, pero estamos atascados en exprimir más rendimiento del balanceador de carga de software. No somos exactamente expertos en redes Linux (normalmente somos una tienda.NET), pero hasta ahora nos hemos mantenido por nuestra cuenta, intentando establecer ulimits adecuados, inspeccionando los mensajes del kernel y tcpdumps para detectar cualquier irregularidad. Sin embargo, hasta ahora, hemos alcanzado una meseta de aproximadamente 1,700 solicitudes / seg, momento en el que el cliente abundan los tiempos de espera (hemos estado usando y ajustando httperf para este propósito). Un compañero de trabajo y yo estábamos escuchando el podcast más reciente de Stack Overflow, en el que los fundadores de Reddit notan que todo su sitio se ejecuta en un nodo HAProxy, y que hasta ahora no se ha convertido en un cuello de botella. ¡Ack! O no hay de alguna manera ver que muchas solicitudes concurrentes, estamos haciendo algo horriblemente mal, o la naturaleza compartida de EC2 está limitando la pila de red de la instancia de Ec2 (estamos utilizando una gran tipo de instancia). Teniendo en cuenta el hecho de que tanto Joel como los fundadores de Reddit están de acuerdo en que la red probablemente será el factor limitante, ¿es posible que esa sea la limitación que estamos viendo?

Cualquier pensamiento es muy apreciado!

Edit Parece que el problema real no fue, de hecho, con el nodo de balanceador de carga! El culpable fue en realidad los nodos que ejecutan httperf, en este caso. A medida que httperf construye y rompe un socket para cada solicitud, gasta una buena cantidad de CPU tiempo en el núcleo. A medida que aumentamos la tasa de solicitud, el TCP FIN TTL (siendo 60s por defecto) estaba manteniendo los sockets durante demasiado tiempo, y el valor predeterminado de ip_local_port_range era demasiado bajo para este escenario de uso. Básicamente, después de unos minutos del nodo cliente (httperf) creando y destruyendo constantemente nuevos sockets, el número de puertos no utilizados se agotó, y las 'solicitudes' posteriores se errorearon en esta etapa, produciendo números de solicitud/segundo bajos y una gran cantidad de errores.

También tuvimos miré nginx,pero hemos estado trabajando con RighScale, y tienen scripts para HAProxy. Ah, y tenemos un plazo demasiado apretado [por supuesto] para cambiar los componentes a menos que resulte absolutamente necesario. Afortunadamente, estar en AWS nos permite probar otra configuración usando nginx en paralelo (si está garantizado) y hacer el cambio durante la noche más adelante.

Esta página describe cada una de las variables sysctl bastante bien (ip_local_port_range y tcp_fin_timeout se ajustaron, en este caso).

Author: Marc Bollinger, 2008-11-04

5 answers

No es realmente una respuesta a su pregunta, pero nginx y pound tienen buena reputación como equilibradores de carga. Wordpress solo cambió a nginx con buenos resultados.

Pero más específicamente, para depurar su problema. Si no está viendo el uso del 100% de la cpu (incluida la espera de E/S), entonces está vinculado a la red, sí. EC2 utiliza internamente una red gigabit, intente usar una instancia XL, para que tenga el hardware subyacente para usted y no tenga que compartir ese puerto de red gigabit.

 9
Author: tumbleweed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-04 15:29:48

No responde la pregunta directamente, pero EC2 ahora admite el equilibrio de carga a través de Elastic Load Balancing en lugar de ejecutar su propio equilibrador de carga en una instancia de EC2.

EDITAR: El servicio DNS Route 53 de Amazon ahora ofrece una forma de apuntar un dominio de nivel superior a un ELB con un registro de "alias". Dado que Amazon conoce la dirección IP actual del ELB, puede devolver un registro A para esa IP actual en lugar de tener que usar un registro CNAME, sin dejar de ser libre de cambiar la IP de vez en cuando.

 20
Author: stevemegson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-09 16:26:48

Sí, podría usar un equilibrador de carga fuera del sitio.. y en bare metal LVS es una gran opción, pero su latencia será horrible! Se rumorea que Amazon va a solucionar el problema de CNAME. Sin embargo, es poco probable que agreguen https, comprobaciones de estado en profundidad o personalizadas, agentes de retroalimentación, coincidencia de url, inserción de cookies (y algunas personas con buena arquitectura dirían que también tienen razón.) Sin embargo, es por eso que Scalr, RightScale y otros están utilizando HAProxy generalmente dos de ellos detrás de una entrada DNS round robin. Aqui at Loadbalancer.org estamos a punto de lanzar nuestro propio appaliance de equilibrio de carga EC2: http://blog.loadbalancer.org/ec2-load-balancer-appliance-rocks-and-its-free-for-now-anyway / Estamos planeando usar scripts SSH para integrarse con autoscaling de la misma manera que rightscale lo hace, cualquier comentario apreciado en el blog. Gracias

 3
Author: Malcolm Turnbull,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-10-02 21:44:11

Me gustaría cambiar a un equilibrador de carga fuera del sitio, no en la nube y ejecutar algo como IPVS en la parte superior de ella. [La razón por la que estaría fuera de la nube de Amazon es debido a cosas del núcleo] Si Amazon no limita la IP de origen de los paquetes que salen de la podría ir con un mecanismo de equilibrio de carga unidireccional. Hacemos algo como esto, y nos consigue alrededor de 800,000 solicitudes simultáneas [aunque no tratamos con latencia]. También diría que use " ab2 " (apache bench), ya que es un un poco más fácil de usar, y más fácil de usar en mi humilde opinión.

 1
Author: Sargun Dhillon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-13 21:41:47

A pesar de que su problema resuelto. KEMP Technologies ahora tiene un balanceador de carga completamente soplado para AWS. Podría ahorrarte algunas molestias.

 0
Author: user452781,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-17 21:28:27