RHEL y Oracle RAC – Paquetes Dropped

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.

COMPÁRTEME

Deja un comentario