Estamos tratando de ejecutar una configuración bastante sencilla en Amazon EC2: varios servidores HTTP ubicados detrás de un Amazon Elastic Load Balancer (ELB).
Nuestro dominio se administra en Route53, y tenemos un registro CNAME configurado para apuntar al ELB.
Hemos experimentado algunos problemas en los que algunas ubicaciones, pero no todas, no pueden conectarse de forma intermitente al equilibrador de carga; parece que esta puede ser la resolución del nombre de dominio del ELB.
El soporte de Amazon nos informó que la IP elástica subyacente del equilibrador de carga ha cambiado y que el problema es que los servidores DNS de algunos ISP no cumplen con el TTL. No estamos satisfechos con esta explicación, porque replicamos el problema usando los propios servidores DNS de Amazon desde una instancia EC2, así como en los ISP locales en Australia y a través del servidor DNS de Google ( 8.8.8.8
).
Amazon también confirmó que durante el período en que notamos el tiempo de inactividad de algunas ubicaciones, el tráfico que pasaba por el ELB disminuyó significativamente, por lo que el problema no está en nuestros puntos finales.
Curiosamente, el dominio parece resolverse a la IP correcta en los servidores que no pueden conectarse, pero el intento de establecer una conexión TCP falla.
Todas las instancias vinculadas al ELB han sido saludables en todo momento. Son todos
¿Alguien sabe cómo podríamos diagnosticar este problema más profundamente? ¿Alguien más ha experimentado este problema con Elastic Load Balancer?
Gracias,
host
utilidad se resuelve en la misma dirección en los sistemas donde podemos conectarnos y los sistemas donde no podemosRespuestas:
Encontré esta pregunta en Google sobre cómo diagnosticar los equilibradores de carga elásticos de Amazon (ELB) y quiero responderla a cualquier otra persona como yo que haya tenido este problema sin mucha orientación.
Propiedades ELB
Los ELB tienen algunas propiedades interesantes. Por ejemplo:
NOTA: Otra propiedad interesante pero un poco menos pertinente es que los ELB no fueron diseñados para manejar picos repentinos de tráfico. Por lo general, requieren 15 minutos de tráfico pesado antes de que se amplíen o pueden precalentarse a pedido mediante un ticket de soporte
Solución de problemas de ELB (manualmente)
Actualización: AWS desde entonces ha migrado todos los ELB para usar Route 53 para DNS. Además, todos los ELB ahora tienen un
all.$elb_name
registro que devolverá la lista completa de nodos para el ELB. Por ejemplo, si su nombre ELB eselb-123456789.us-east-1.elb.amazonaws.com
, entonces obtendría la lista completa de nodos haciendo algo comodig all.elb-123456789.us-east-1.elb.amazonaws.com
. Para nodos IPv6,all.ipv6.$elb_name
también funciona. Además, Route 53 puede devolver hasta 4KB de datos que todavía usan UDP, por lo+tcp
que puede que no sea necesario usar el indicador.Sabiendo esto, puede hacer un poco de solución de problemas por su cuenta. Primero, resuelva el nombre ELB en una lista de nodos (como registros A):
Se
tcp
sugiere el indicador ya que su ELB podría tener demasiados registros para caber dentro de un solo paquete UDP. También me han dicho, pero no he confirmado personalmente, que Amazon solo mostrará hasta 6 nodos a menos que realice unaANY
consulta. Ejecutar este comando le dará un resultado similar a este (recortado por brevedad):Ahora, para cada uno de los
A
registros, use, por ejemplo,curl
para probar una conexión al ELB. Por supuesto, también desea aislar su prueba solo para el ELB sin conectarse a sus backends. Una propiedad final y un hecho poco conocido sobre los ELB:Esto significa que podemos aprovechar este comportamiento para probar solo que el ELB está respondiendo:
Si ve
HTTP/1.1 405 METHOD_NOT_ALLOWED
, el ELB está respondiendo con éxito. También es posible que desee ajustar los tiempos de espera de curl a valores que sean aceptables para usted.Solución de problemas de ELB con elbping
Por supuesto, hacer esto puede ser bastante tedioso, así que he creado una herramienta para automatizar esto llamado elbping . Está disponible como una gema de rubí, por lo que si tiene rubygems, puede instalarlo simplemente haciendo lo siguiente:
Ahora puedes ejecutar:
Recuerde, si ve
code=405
, eso significa que el ELB está respondiendo.Próximos pasos
Cualquiera que sea el método que elija, al menos sabrá si los nodos de su ELB responden o no. Armado con este conocimiento, puede enfocarse en la solución de problemas de otras partes de su pila o puede hacer un caso bastante razonable para AWS de que algo está mal.
¡Espero que esto ayude!
fuente
La solución es realmente simple: use un
A
registro en lugar de unCNAME
en Route53.En la consola de administración de AWS, elija "A record" y luego mueva el botón de opción "Alias" a "Sí". Luego seleccione su ELB del menú desplegable.
fuente
CNAME
debe usar un registro. ¿Cuál sería el beneficio de unA
registro / qué está cambiando aquí?Hay algunas posibles soluciones que podría probar en este foro de desarrolladores de AWS. https://forums.aws.amazon.com/message.jspa?messageID=387552 .
Por ejemplo:
posible solución n. ° 1
posible solución n. ° 2
Había otras cosas que probar en esa publicación, pero esas parecen ser las mejores pistas.
fuente