En un entorno de dos servidores Linux RedHat 6.9 con un cluster de Oracle RAC, hemos detectado muchos paquetes dropped en las tarjetas de red (dropped: 311815750):
[root@lo02dox0 ~]# ifconfig eth0
eth0 Link encap:Ethernet HWaddr C4:34:6B:CA:A1:A0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:32150653954 errors:0 dropped:311815750 overruns:0 frame:0
TX packets:33238988555 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22934241338318 (20.8 TiB) TX bytes:24364152267426 (22.1 TiB)
El equipo de Oracle ejecuta un análisis del sistema (OSWatcher) donde se indica que debemos aumentar el valor de MTU de todos los nodos del cluster, y así lo hacemos. Lo aumentamos de 1500 a 2048. Esto significa que ambos servidores pueden enviar paquetes TCP más grandes.
Cómo modificar el tamaño de MTU
Para modificar el tamaño de MTU en RedHat 6, lo hacemos de la siguiente manera:
[root]# ip link set dev eth0 mtu 2048
[root]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2048 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether 00:50:56:25:02:0a brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:50:56:16:1a:9e brd ff:ff:ff:ff:ff:ff
[root]#
Para dejar el cambio como persistente, añadiremos la directiva MTU=2048 en el fichero de configuración de red (/etc/sysconfig/network-scripts/ifcfg-ethX). Si tienes bondings configurados, también hay que añadir la directiva.
El resultado de este cambio no fue bien y tuvimos que hacer marcha atrás. El cluster de Oracle quedó inconsistente y las conexiones SSH se cortaban.
¿Y qué dice RedHat?
Pues en la documentación de RedHat (https://access.redhat.com/solutions/659453), indica que tenemos que aumentar el tamaño de los buffers de TCP y UDP para evitar fragmentación en la información enviada por la red y agotar el número de fragmentos de paquetes de TCP y UDP que viajan por la red, provocando el error de paquetes «dropped».
Finalmente, o que hacemos, es configurar los siguiente parámetros del kernel (/etc/sysctl.conf):
# Multiplicamos por 4 el valor actual
net.core.wmem_max = 4194304
# Multiplicamos por 2 el valor actual
net.core.wmem_default = 4194304
# Multiplicamos por 2 el valor actual
net.ipv4.ipfrag_high_thresh = 8388608
# Multiplicamos por 2 el valor actual
net.ipv4.ipfrag_time = 60
Si los errores se siguen produciendo, tal vez tengas que cambiar el cable Ethernet, por si estuviera defectuoso.
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,