Назад | Перейти на главную страницу

Случайный «сброс соединения одноранговым узлом» с помощью redis-benchmark

У меня в офисной сети несколько хостов linux.

Когда я запускаю сервер Redis на одном из них, клиенты redis получают случайные ошибки «Сброс подключения одноранговым узлом».

Мы заметили эти ошибки у наших клиентов, использующих hiredis. Однако та же ошибка воспроизводится утилитой redis-benchmark входит в пакет Redis. Эта утилита имитирует несколько клиентов, параллельно отправляя запросы на сервер Redis.

В redis-benchmark утилита часто останавливается с этой ошибкой при запуске с другого хоста (то есть я отправляю ssh на HostB, затем запускаю redis-benchmark -h hostA). Ошибки возникают примерно в 50-60% случаев.

Отлаживая эту проблему, я обнаружил, что сброс соединения появляется, даже если он имитирует только одного клиента (redis-benchmark -h hostA -c 1).

Ошибок нет, если он имитирует один запрос от одного клиента (redis-benchmark -h hostA -n 1 -c 1)

UPD. Есть ошибки. Они появляются, если я очень быстро повторяю redis-benchmark -h hostA -n 1 -c 1.

Я пробовал установить tcp_rw_resue на HostA на 0 или 1 и обнаружили, что это значение не влияет на эти ошибки.

Ошибок нет, когда redis-benchmark запускается с того же хоста, на котором работает Redis.

Если я запускаю сервер Redis с идентичной конфигурацией на других хостах в той же сети, ошибок нет, они не сбрасывают соединение.

Это говорит о том, что проблема в стеке TCP этого hostA.

Как мне его отладить?

Проблемный ПК работает под управлением Ubuntu 18.04 со всеми последними обновлениями. Он имеет две карты LAN, соединенные вместе.

Другие компьютеры, на которых не сбрасываются соединения, работают под управлением Ubuntu 16.04 и 18.04.

Вот конфигурация Netplan этого ПК:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp6s0:
      dhcp4: no
    enp7s0:
      dhcp4: no
  bonds:
    bond0:
      dhcp4: yes
      interfaces: [ enp6s0, enp7s0 ]
      dhcp-identifier: mac

Я готов предоставить другую информацию, которая может помочь в устранении проблемы.

Проблема усложняется тем, что из-за COVID-19 я работаю из дома и не имею физического доступа к этому проблемному компьютеру.

Обновить Вот результат ifconfig. Bond0 отбрасывает полученные пакеты и некоторые переданные.

bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 106.109.130.19  netmask 255.255.252.0  broadcast 106.109.131.255
        inet6 fe80::3cd3:d3ff:fe99:68d3  prefixlen 64  scopeid 0x20<link>
        ether 3e:d3:d3:99:68:d3  txqueuelen 1000  (Ethernet)
        RX packets 2577910037  bytes 3642930361276 (3.6 TB)
        RX errors 0  dropped 1583354  overruns 0  frame 0
        TX packets 1725563296  bytes 137455082092 (137.4 GB)
        TX errors 0  dropped 10 overruns 0  carrier 0  collisions 0

enp6s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 3e:d3:d3:99:68:d3  txqueuelen 1000  (Ethernet)
        RX packets 1289031424  bytes 1821053170461 (1.8 TB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 862782268  bytes 68731389070 (68.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xbe400000-be47ffff

enp7s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 3e:d3:d3:99:68:d3  txqueuelen 1000  (Ethernet)
        RX packets 1288878613  bytes 1821877190815 (1.8 TB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 862781028  bytes 68723693022 (68.7 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device memory 0xbe300000-be37ffff

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 26487332  bytes 8688735090 (8.6 GB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 26487332  bytes 8688735090 (8.6 GB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Я также установил на этом сервере node-exporter для Prometheus. Он показывает постоянную скорость rx-сброшенных пакетов примерно 1 пакет в секунду.