Не работает TCP fastopen

Добрый день!
Мне так и не удалось настроить TCP fastopen на моих нодах. Что было сделано:

1.Включена поддержка на уровне ядра, добавлением net.ipv4.tcp_fastopen = 3 в /etc/sysctl.conf

2.Остановлен и удален контейнер каждой ноды. Собран заново с добавлением строчки
docker run -d --restart unless-stopped --stop-timeout 300
–privileged
–sysctl net.ipv4.tcp_fastopen=3
-p 28967:28967/tcp
-p 28967:28967/udp \

  1. Если запустить netstat -s | grep FastOpen или netstat -s | grep TCPFast , то консоль возвращает пустое поле.

Эти манипуляции были сделаны примерно месяц назад, и ничего не поменялось. Я что-то упустил, недонастроил?

Hi, i have insert this command only in my docker run and in the log it has write that the TCP Fastopen is enabled. I don’t modified sysctl.conf and it’s all active perfecly. I don’t enabled Privileged.
I have Unraid for nodes.
Bye

If you try to enter “netstat -s | grep FastOpen” or “netstat -s | grep TCPFast” what output do you get?

2023-10-16T15:07:26+02:00 INFO server existing kernel support for server-side tcp fast open detected {“process”: “storagenode”}
This is the line from log.
But nothing packets TCP Fastopen detected with netstat command
:thinking:

Чтобы увидеть эту статистику, её нужно будет запрашивать в контейнере (он имеет изолированную сеть) - но насчёт этого я не уверен на 100%. Чтобы увидеть на хосте, нужно переключить сеть для контейнера на использование сети хоста (--network host), однако в случае нескольких узлов вам придётся поменять все внутренние порты для второго и последующих узлов, чтобы они стали уникальными, потому что теперь не будет изоляции, см. How to add an additional drive? - Storj Docs

Thanks, i used the custom network for my nodes. Every node have different ip and ports. I have a bridge to host network on Unraid but if i execute the command in the general console i have results but into docker console nothing, rather, i have an error “sh: 1: netstat: not found”. You have an idea of command for netstat -s for docker on Unraid?
I suppose that this command is correct for an node:

docker exec dockername netstat -s | grep FastOpen

This command give me nothing result for network statistics for single node

Thanks advance.

Then I’m wrong and only way to make it work is to use a --network host flag in your docker run command.
Please note, this flag will disable docker NAT and it will work as if you run storagenode as a local service, so you need to make sure that your node’s port is matching port in the port forwarding rule or you need to adjust either port forwarding rule or the node config.
Every next node will require to have unique local ports.

Т.е. для ноды в контейнере docker (как рекомендует поднимать ноду официальный мануал), мои старания по включению опции в ядре имеют мало смысла? А как я могу посмотреть в логах контейнера, работают ли у меня TCPFast-соединения?

Во время старта storagenode проверяет доступность этой фичи, больше ничего:

Работоспособность фичи дальше контролируется ядром, и эта информация должна отражаться в статистике

Но я предполагаю, что стандартный docker bridge не работает с этой фичей. И это начинает работать, когда вы его не используете (т.е. используете сеть хоста с флагом --network host).

1 Like

Спасибо за развернутый ответ. Получается, что некоторое преимущество по трафику получают те владельцы нод, которые не используют рекомендованный мануал по поднятию ноды в docker с bridge.

2 Likes

Я не думаю, просто такие узлы могут выигрывать гонку за кусочки чуть чаще чем те, у которых эта фича не включена.
Насчёт рекомендаций они именно рекомендации, работающие для большинства. Я думаю, что возможно Сообщество найдёт способ включить фичу и при использовании docker bridge.
Возможно, требуется создать свой bridge и использовать его вместо стандартного: Networking with standalone containers | Docker Docs, но я не пробовал.

Гонки выигрываются чаще = больше траффика, разве нет?
Вы сам используете эту фичу? Описанным способом с выведением внутреннего NIC из докера в сеть хоста?

Входящий трафик бесплатный, и выигранная гонка не гарантирует увеличение занятого места - удаления будут происходить чаще тоже. Но в целом лучше иметь эту фичу включенной особенно когда таких узлов большинство (что сейчас не так).

нет, раньше использовал на Raspberry Pi3+, пока машинка не отключилась. Может быть когда-нибудь реанимирую. На остальных узлах модификации не делал, потому что один узел Windows GUI, два других Docker Desktop for Windows, пока что работать не будет (может только для docker). Я подожду решения для docker без использования --network host.

1 Like