Приведу несколько рекомендаций по настройке сервера на котором будет работать Accel-ppp.
1) В BIOS отключим Hyper-threading, чтобы softirq нагрузка от сетевой платы не распределялась на виртуальные ядра, кстати когда HT включен и так как с виртуальными ядрами их количество больше, и если виртуальные ядра не используются, то на Zabbix графиках среднее значение использования CPU ниже, хотя это не так и сбивает с толку, по этому рекомендую наблюдать за загрузкой каждого ядра, а не в общем, например как я писал в статье: Мониторинг использования CPU в Zabbix. Также можно рисовать idle каждого ядра CPU, чтобы видеть сколько % свободно и не перегружены ли некоторые ядра.
Смотрите общий график softirq с включенным и выключенным Hyper-threading:
2) Если irqbalance плохо распределяет прерывания сетевого адаптера по ядрам процессора, то отключим irqbalance и вручную настроим RPS/RSS.
Распределение прерываний сетевой платы по ядрам процессора
3) В BIOS выберем план «CPU performance», а также другие возможные опции выставим на «Performance».
Также выберем «Always Power ON», чтобы сервер сам включился после пропадания и появления электропитания, можно еще отключить сетевой адаптер с обычными ethernet портами.
Также в операционной системе выставим «performance» как я описывал в этой статье:
Изменение CPU Scaling Governor в Linux
4) Отключим ненужные оффлоады на сетевых интерфейсах, замечу что они нужны для повышения производительности, но иногда из-за них не верно работает шейпер, у меня например была очень низкая скорость отправки при включённых tso,gro,gso, по этому я отключил:
ethtool -K ens2f1 tso off gro off gso off
/sbin/ethtool -K ens2f1 rxhash off lro off sg off rxvlan off txvlan off rx off tx off > /dev/null 2>&1
/sbin/ethtool -N ens2f1 rx-flow-hash udp4 sdfn > /dev/null 2>&1
5) Обновим драйвер сетевого адаптера, замечу что на некоторых версиях драйверов может быстро увеличиваться занятое пространство оперативной памяти.
Если увеличивается, то можно например выгрузить и загрузить модуль ixgbe чтобы понять в нем ли проблема (внимание, пропадет соединение с сервером):
rmmod ixgbe && modprobe ixgbe
6) Включим пересылку пакетов (forwarding), увеличим «nf_conntrack_max» и оптимизируем прочие параметры в /etc/sysctl.conf.
Тюнинг nf_conntrack
7) Если на сервере используется Zabbix со стандартным шаблоном Linux, то отключим в шаблоне или для узла сети «Network interface discovery», иначе например при большом количестве ipoe интерфейсов и когда Zabbix будет постоянно их сканировать, то будут проблемы с производительностью. Также укажем Zabbix агенту параметр ListenIP — на котором IP адресе он должен работать (по умолчанию все — 0.0.0.0). Убедимся что он работает на нужном IP адресе, а также убедимся что нет других процессов которые могут работать на «всех интерфейсах»:
netstat -tulpn | grep zabbix_agentd
netstat -tulpn | less
netstat -tulpn > netstat.txt
8) Включим rp_filter (настоятельно рекомендую не отключать его, разве что в крайних случаях, либо указать 2 вместо 1):
sysctl -a | grep "rp_filter"
nano /etc/sysctl.conf
net.ipv4.conf.default.rp_filter=1
net.ipv4.conf.all.rp_filter=1
sysctl -p
Защитим клиентов запретив к ним трафик на случайно открытые у них порты (составил небольшой список iptables правил, рекомендую применить хотя бы их):
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 25 -m comment --comment SMTP_Blocked_to_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 53 -m comment --comment DNS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 53 -m comment --comment DNS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 111 -m comment --comment Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 111 -m comment --comment Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 123 -m comment --comment NTP_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 135 -m comment --comment Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 139 -m comment --comment NetBIOS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 137 -m comment --comment NetBIOS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 138 -m comment --comment NetBIOS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 445 -m comment --comment NetBIOS_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 161 -m comment --comment SNMP_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p tcp -m tcp --dport 179 -m comment --comment BGP_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 1900 -m comment --comment UPnP_Blocked_for_local -j DROP
iptables -A FORWARD -d 172.16.0.0/12 -p udp -m udp --dport 11211 -m comment --comment memcached_attacks_block_for_local -j DROP
Смотрите также мои статьи:
- Как отключить автообновление в Ubuntu 18
- Изменение TX и RX буферов сетевых интерфейсов
- Настройка сети в Linux
- Установка Accel-ppp в Ubuntu 18
- Настройка BGP в Quagga
- Тест iops используя fio