У меня в офисной сети несколько хостов 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 пакет в секунду.