четверг, 20 августа 2009 г.

Postfix, dovecot, mailbox, dotlock.

В ubuntu (и др. дистрибутивах) postfix по дефолту использует формат почтового ящика локального пользователя MailDir. В этом случае почтовый ящик представляет собой каталог mail , обычно в домашнем каталоге пользователя, где каждое письмо это отдельный файл. В такой конфигурации проблем с блокировкой почтового ящика не бывает.

На боевых серверах чаще встречается ситуация, когда почтовые ящики пользователей хранятся в формате MailBox. В этом случае вся почта пользователя хранится в одном файле (имя файла соответствует логину пользователя) в каталоге /var/mail. И вот здесь начинает действовать механизм блокировки.
В почтовых серверах с большим трафиком часто в логах можно видеть сообщение о невозможности доставки почты локальному пользователю:

cannot update mailbox /var/mail/xxxxx for user xxx. unable to lock for exclusive access: Resource temporarily unavailable.

Это происходит из-за неверного выбора механизма блокировки сервисов postfix и dovecot. По умолчанию у обоих используется механизм блокировок fcntl, который не подходит для нагруженных серверов. Нужно использовать блокировку dotlock.
Для этого редактируем нужные параметры конфигов:

dovecot (/etc/dovecot/dovecot.conf):
mbox_write_locks = dotlock fcntl

postfix (/etc/postfix/main.cf):
mailbox_delivery_lock = dotlock

Все. Теперь оба сервиса используют правильный механизм блокировки.
Хотя мне хватило изменить механизм блокировки только у postfix.

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