Решение проблемы долгих запросов при работе с почтовой системой RuPost¶
На контроллеры ALD Pro cо стороны RuPost массово поступают запросы на поиск (ldapsearch), которые выполняются по 3-6 секунд, что приводит к отказу в обслуживании LDAP и останавливает работу DNS:
SRCH base="cn=users,cn=accounts,dc=company,dc=ru" scope=2 filter="(&(|(mail=aldpro@company.ru)(mail=aldpro@company.ru)(proxyAddresses=aldpro@company.ru))(&(objectClass=person)(mail=*@*)
Если таких запросов одновременно больше, чем потоков в 389 DS, то 389 DS перестает отвечать на любые запросы. В лог-файле это выглядит как выделение файловых дескрипторов без дальнейших операций.
Запросом ниже можно произвести проверку:
time ldapsearch -b "cn=users,cn=accounts,$(ipa env basedn|cut -d ' ' -f4)" "(&(|(mail=somebody@$(hostname -d))(mail=somebody@$(hostname -d))(proxyAddresses=somebody@$(hostname -d)))(&(objectClass=person)(mail=*@*)(proxyAddresses=SMTP:*)))" "* aci" -Q
Если зафиксировано время более 1000 мс, то рекомендуется провести индексацию атрибута proxyAddresses в LDAP. Данную процедуру необходимо произвести на каждом контроллере домена только один раз.
Для этого необходимо выполнить действия ниже.
Вывести название INSTANCE LDAP командой, индексы нужно добавить на основной каталог, не на глобальный каталог:
sudo dsctl -l
Произвести добавление индексов:
sudo dsconf INSTANCE-NAME backend index add --index-type eq --attr proxyAddresses userRoot
sudo dsconf INSTANCE-NAME backend index set --add-type sub --attr proxyAddresses userRoot
sudo dsconf INSTANCE-NAME backend index set --add-type pres --attr proxyAddresses userRoot
Проверить командой, что все типы добавлены:
sudo dsconf INSTANCE-NAME backend index get --attr proxyAddresses userRoot
Произвести остановку INSTANCE LDAP командой:
sudo dsctl INSTANCE-NAME stop
Запустить переиндексацию (может занять до нескольких минут) командой:
sudo dsctl slapd-INSTANCE-NAME db2index userRoot
Произвести запуск INSTANCE LDAP командой:
sudo dsctl INSTANCE-NAME start