вторник, 19 апреля 2016 г.

Оптимизация почтового сервера и решение некоторых проблем

Есть хост-нода с KVM'ными виртуалками, в виртуалках развернуты окружения с почтовым сервером, которые занимаются массовой рассылкой почты.
Тут я буду описывать некоторые решенные проблемы в ходе работы с почтовиком.

1. В виртуалке с почтовиком подключено >1000 IP-адресов.
В нашем случае, после запуска виртуалки с >1000 адресов сеть поднималась очень долго (больше часа по времени).
В ходе расследования было выяснено, что это из-за проверки arping перед поднятием каждого алиаса для сетевого интерфейса.
Решение:
в виртуалке необходимо отключить проверку arping:
# vim /etc/sysconfig/network-scripts/ifcfg-eth0
ARPCHECK="no"
# service network restart

2. При большом количестве коннектов к почтовому серверу, сильно начинает лагать хост-нода.
Первым делом нужно пойти в лог (на хост-ноде и в виртуалке) и посмотреть, что там можно найти:
# tail -f /var/log/messages
localhost kernel: net_ratelimit: 4618 callbacks suppressed

В ядре Linux есть механизм предотвращения DDoS-атак под названием rate limit. (https://bani.com.br/2015/06/linux-getting-rid-of-net_ratelimit-n-callbacks-suppressed-messages/)
Лимиты можно посмотреть тут:
# cat /proc/sys/kernel/printk_ratelimit
5
# cat /proc/sys/kernel/printk_ratelimit_burst
10
Решение:
идея в том, чтобы снять эти лимиты, возможно это поможет снять нагрузку с хост-ноды:
# echo "net.core.message_cost=0" >> /etc/sysctl.conf
# sysctl -w net.core.message_cost=0

Команды следует выполнить как на хост-ноде, так и в виртуалке.
Также производительность сети может увеличиться путем эмуляции e1000 вместо дефолтного virtio.

3. Забивается arp таблица.
Решение:
# vim /etc/sysctl.conf
net.ipv4.neigh.default.gc_thresh1=2048
net.ipv4.neigh.default.gc_thresh2=4096
net.ipv4.neigh.default.gc_thresh3=8192

Комментариев нет: