Nat на centos під високим навантаженням - студія відкритих рішень o-nix

Розглянемо живий приклад організації високонавантаженого NAT-сервера на CentOS, не вдаючись у деталі обладнання (сервер має 4 процесора з 4-ма ядрами, тобто по-суті, 16процесорів, дві мережевих 10-Гбітних карти від Intel з SFP-модулями , з 8-ю Гб пам'яті на борту).

Оскільки сервіс irqbalance під високим навантаженням і величезному трафіку буде тільки заважати наші карти, відключаємо його, тому що ми будемо розподіляти переривання потоків мережевих карт так, як потрібно це нам. Можна вручну, можна автоматично скриптом.

service irqbalance stop
chkconfig irqbalance off

Також потрібно відключити Hyper-threading. Зробити це можна, наприклад, через рядок завантажувача grub, заодно "для надійності" там і відключення irqbalance продублюємо:

kernel /vmlinuz-3.0.78-1.el5.elrepo ro root = / dev / VolGroup00 / LogVol00 noht noirqbalance

А ось і скрипт, який прив'язує номера переривань мережевих карт до ядер процесорів irq-smp-balance.sh:

Розмістимо його, наприклад, в каталозі

і не забудемо прописати його запуск в /etc/rc.local

cat /etc/rc.local
#! / Bin / sh
#
# This script will be executed * after * all the other init scripts.
# You can put your own initialization stuff in here if you do not
# Want to do the full Sys V style init stuff.


# Можна збільшити MTU, не забуваємо робити його таким же на портах свічів: system mtu jumbo 9000 (якщо дозволяє інфраструктура)
# / Sbin / ifconfig eth2 mtu 9000
# / Sbin / ifconfig eth3 mtu 9000

# Збільшуємо чергу передачі на Intel-івських мережевих картах. Для 10-гігабітних лінків рекомендується ставити 10000
/ Sbin / ifconfig eth2 txqueuelen 10000
/ Sbin / ifconfig eth3 txqueuelen 10000

# / Sbin / ethtool
# Зміна розмірів буферів
/ Sbin / ethtool -G eth2 rx 2048
/ Sbin / ethtool -G eth2 tx 2048
/ Sbin / ethtool -G eth3 rx 2048
/ Sbin / ethtool -G eth3 tx 2048

# Правило для hashsize = nf_conntrack_max / 8
# Подивитися поточне значення можна так: sysctl net.netfilter.nf_conntrack_max
# Подивитися, наскільки вже заповнена таблиця відстеження з'єднань: sysctl net.netfilter.nf_conntrack_count
# НЕ рекомендується ставити велике значення nf_conntrack_max, якщо на NAT-e мало оператіви

# Розкидаємо переривання по потокам сететвих карт
/etc/rc.d/irq-smp-balance.sh

Тюнінг ядра високонавантаженого NAT-сервера:

Вказуємо деякі важливі модулі в файлі конфігурації iptables iptables-config:

У процесі запуску NAT-сервера у нас ніяк не хотіли визначатися 10-Гбітние SFP-модулі, і ми застосували невеликий "патчік" драйвера ixgbe мережевої карти.

Таким чином, якщо SFP-модулі в мережевих 10-Гбітних картах не "рідні" або не «фірмові", то можна внести зміни в інтелловскій драйвер
ixgbe, що виключає перевірку SFP-модуля (ніяких гарантій, тільки на ваш страх і ризик!):

Для версії драйвера ixgbe-3.14.5, в розпакованих исходниках є файл:

Вам потрібно знайти наступний шматок коду в цьому файлі:

і вставити перед останньою умовою if (status! = 0) всього лише одну команду return 0;

Поділитися в соціальних мережах: