¿Cómo realiza ELB las comprobaciones de estado de UDP? ¿Cuáles son las precauciones para las comprobaciones de estado de UDP?
Cómo funcionan las comprobaciones de estado de UDP
UDP es un protocolo sin conexión. Una comprobación de estado de UDP se implementa de la siguiente manera:
- El nodo de comprobación de estado envía una solicitud de ICMP al servidor backend basada en la configuración de comprobación de estado.
- Si el nodo de comprobación de estado recibe una respuesta ICMP del servidor backend, considera que el servidor backend está sano y continúa con la comprobación de estado.
- Si el nodo de comprobación de estado no recibe una respuesta de ICMP del servidor backend, considera que el servidor backend no está sano.
- Después de recibir la respuesta de ICMP, el nodo de comprobación de estado envía un paquete de sondeo UDP al servidor backend.
- Si el nodo de comprobación de estado recibe un mensaje de ICMP Port Unreachable del servidor backend dentro de la duración del tiempo de espera, el servidor backend se considera insatisfactorio.
- Si el nodo de comprobación de estado no recibe un mensaje ICMP Port Unreachable del servidor backend dentro de la duración del tiempo de espera, el servidor backend se considera saludable.
Cuando utilice UDP para las comprobaciones de estado, conserve la configuración de parámetros predeterminada.
Solución de problemas
Si el servidor backend no está sano, utilice cualquiera de los siguientes métodos para localizar el error:
- Compruebe si el tiempo de espera es demasiado corto.
Una posible causa es que el mensaje ICMP Echo Reply o ICMP Port Unreachable devuelto por el servidor backend no alcanza el nodo de comprobación de estado dentro de la duración del tiempo de espera. Como resultado, el resultado de la comprobación de estado es inexacto.
Se recomienda cambiar la duración del tiempo de espera a un valor mayor.
Las comprobaciones de estado de UDP son diferentes de otras comprobaciones de estado. Si la duración del tiempo de espera de la comprobación de estado es demasiado corta, el resultado de la comprobación de estado del servidor backend con frecuencia alterna entre Healthy y Unhealthy.
- Compruebe si el servidor backend restringe la velocidad a la que se generan los mensajes ICMP.
Para servidores de Linux, ejecute los siguientes comandos para consultar el límite de velocidad y la máscara de velocidad:
sysctl -q net.ipv4.icmp_ratelimit
El límite de velocidad predeterminado es 1000.
sysctl -q net.ipv4.icmp_ratemask
La máscara de velocidad predeterminada es 6168.
Si el valor devuelto del primer comando es el valor predeterminado o 0, ejecute el siguiente comando para eliminar el límite de velocidad de los mensajes Port Unreachable:
sysctl -w net.ipv4.icmp_ratemask=6160
Para obtener más información, consulte Linux Programmer's Manual. En la CLI de Linux, ejecute el siguiente comando para mostrar el manual:
man 7 icmp
Si lo prefiere, visite http://man7.org/linux/man-pages/man7/icmp.7.html.
Una vez que se elimina el límite de velocidad, el número de mensajes de ICMP Port Unreachable en el servidor backend no estará limitado.
Precauciones
Tenga en cuenta lo siguiente cuando configure las comprobaciones de estado de UDP:
- Las comprobaciones de estado de UDP utilizan paquetes de ping para comprobar el estado del servidor backend. Para garantizar la transmisión sin problemas de estos paquetes, asegúrese de que ICMP esté habilitado en el servidor backend realizando lo siguiente:
Inicie sesión en el servidor y ejecute el siguiente comando como usuario root:
cat /proc/sys/net/ipv4/icmp_echo_ignore_all
- Si el valor devuelto es 1, ICMP está deshabilitado.
- Si el valor devuelto es 0, ICMP está habilitado.
- El resultado de la comprobación de estado puede ser diferente del estado real del servidor backend.
Si el servidor backend ejecuta Linux, la tasa de paquetes de ICMP puede estar limitada debido a la defensa de Linux contra ataques de ping inundación cuando hay un gran número de solicitudes simultáneas. En este caso, si se produce una excepción de servicio, el balanceador de carga no recibirá el mensaje de error port XX unreachable y considerará que la comprobación de estado se realiza correctamente. Como resultado, hay una inconsistencia entre el resultado de la comprobación de estado y el estado real del servidor.