Оптимизация почтового сервера Carbonio для больших нагрузок
Ранее мы уже писали о том, как читать логи Carbonio и как отслеживать состояние его сервисов при помощи Grafana. Но что делать, если логи постоянно сигнализируют о достижении или превышении всех возможных пределов нагрузки на сервер, сервис периодически теряет отзывчивость или выдает ошибки при обращении к нему, а графики рисуют картину, которая явно не соответствует норме. Как правило, такая картина свидетельствует о том, что почтовый сервер не справляется с текущим количеством активных пользователей, и в этой статье мы расскажем о том, какие настройки могут быть применены для того, чтобы оптимизировать ваш почтовый сервер лучше справлялся с нагрузкой.
Данная статья может применяться как для коммерческой версии Carbonio, так и для бесплатной Carbonio Community Edition.
Диагностика
В случае, если пользователи почтового сервера начали сталкиваться с замедлениями сервиса или ошибками при выполнении тех или иных действий, первое, что должен выполнить системный администратор — установить причину происходящего.
Первым местом для поиска всегда являются логи почтового сервера. Они хранятся в трех локациях: /opt/zextras/log/carbonio.log; /var/log; /var/log/carbonio.
Наиболее часто используемыми являются:
carbonio.log — находится в папке /var/log, содержит данные о работе узлов MTA и LDAP, а также общую информацию о работе сервера
mailbox.log — находится в папке /opt/zextras/log, содержит данные о событиях, происходящих на узлах AppServer
audit.log — находится в папке /opt/zextras/log, содержит данные о попытках аутентификации (успешных и неуспешных) от различных пользователей
nginx.log — находится в папке /opt/zextras/log, содержит данные о событиях, происходящих на узлах Carbonio Proxy
mysql_error.log — находится в папке /opt/zextras/log, содержит данные об ошибках, которые возникают в MariaDB
myslow.log — находится в папке /opt/zextras/log, содержит данные о медленных запросах в MariaDB
Логи отдельных сервисов собраны в папке /var/log/carbonio. Там можно найти логи:
Carbonio Files — /var/log/carbonio/files
Carbonio Docs — /var/log/carbonio/docs
Carbonio Docs DB Connector — /var/log/carbonio/docs-db-connector
Carbonio Preview — /var/log/carbonio/preview
Как правило, информация о зашкаливающей нагрузке может быть найдена именно в mailbox.log. Пример такого сообщения:
[name=user@carbonio.local;mid=116;oip=12.34.56.78;port=40600;ua=CarbonioWebClient - GC91 (Mac)/8.8.15_GA_4026;soapId=76fe42;] session - Too many SOAP sessions (6 > 5), closing SoapSession{id=1337, authAcct=42f8d68c-bbdc-42f8-8be8-84ba383442f8, lastAccessed=2024-06-09 10:44:57,231}
Данное сообщение свидетельствует о том, что действие не было выполнено из-за превышения максимального количества сессий SOAP API, то есть причиной этого является не аппаратные, а софтверные ограничения, которые можно решить, изменив максимальное количество потоков.
Увеличение количества потоков
Ограничения максимального числа потоков для SOAP, IMAP, HTTP и ряда других протоколов хранятся либо в глобальной конфигурации LDAP, либо в файле с локальными настройками сервера.
Данные, которые хранятся в глобальных настройках LDAP и меняются, соответственно, при помощи команды вида carbonio prov modifyConfig. Например:
carbonio prov modifyConfig zimbraImapNumThreads 400 zimbraLmtpNumThreads 50
Получить весь список имеющихся ограничений можно при помощи команды:
carbonio prov getAllConfig| grep -i thread | grep -i num
Та часть настроек, отвечающих за максимальное количество потоков, и которая находится в файле локальной конфигурации может быть получена при помощи команды
zmlocalconfig | grep session
Для изменения выполните ту же команду с атрибутом -e, указанием изменяемой настройки и нового ее значения. Пример:
zmlocalconfig -e zimbra_session_limit_soap=20
Отметим, что повышение предельного числа потоков следует проводить осторожно, так как при этом Carbonio начинает использовать все больше аппаратных ресурсов, в первую очередь это оперативная память и IOPS хранилища. Следить за их использованием можно в Grafana.
DoS-Filter
Еще одним источником возникновения ошибок может быть DoS-Filter, ограничивающий слишком частые запросы от конкретных IP-адресов. Найти связанные с ним ошибки также можно при помощи логов
grep DOS /opt/carbonio/log/zmmailboxd.out
Найденные записи будут содержать IP-адреса клиентов, которые превысили установленный лимит. Если среди них присутствуют легитимные адреса, на которые ограничение не должно действовать, следует добавить их в белый список
carbonio prov modifyConfig zimbraMailTrustedIP 1.2.3.4
Для добавления нескольких адресов используйте параметр со знаком +
carbonio prov modifyConfig +zimbraMailTrustedIP 1.2.3.4 +zimbraMailTrustedIP 5.6.7.8
Для удаления адресов из списка используйте параметр со знаком -
carbonio prov modifyConfig -zimbraMailTrustedIP 5.6.7.8
Получить текущий список можно при помощи команды
carbonio prov getConfig zimbraMailTrustedIP
Почтовые очереди
Зачастую перегрузки сервера могут быть связаны с большим почтовым потоком. Например, скомпрометированная учетная запись может начать рассылать спам с вашего сервера, либо кто-то из пользователей может подвергнуться мейл-бомбингу. Остановить этот процесс довольно просто, но зачастую после этого на серверах MTA остается забитая спамом почтовая очередь.
Диагностировать подобные вещи можно просматривая почтовые очереди в консоли администратора.
При просмотре очереди в консоли администратор может выбрать узел MTA, очередь на котором он намерен просмотреть, а также полноценно управлять письмами, которые в ней находятся.
Эффективно очистить очередь от конкретных спам-сообщений можно используя утилиты командной строки. Их следует выполнять от имени пользователя root. Пример:
/opt/zextras/postfix/sbin/postqueue -p | grep -i увеличь | awk '{print $1}' | /opt/zextras/postfix/sbin/postsuper -d -
/opt/zextras/postfix/sbin/postqueue -p | grep -i кредит | awk '{print $1}' | sed 's/\*//g'| /opt/zextras/postfix/sbin/postsuper -d -
Эти команды осуществляют поиск в поисковой очереди по конкретным словам, а затем удаляют сообщения, которые их содержат из поисковой выдачи. Это позволяет быстро удалить весь спам из очереди, оставив в нем легитимные электронные письма.
Бороться с мейл-бомбингом и исходящими спам-атаками можно при помощи CBPolicyD. Соответствующая инструкция уже публиковалась ранее.
По вопросам тестирования, приобретения, предоставления лицензии и консультаций обращаться на почту sales@svzcloud.ru к эксклюзивному партнеру Zextras.
Получить информацию и обменяться информацией о Carbonio CE вы можете в группах в Telegram CarbonioMail и Carbonio CE Unofficial.