четверг, 27 августа 2009 г.
четверг, 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.
На боевых серверах чаще встречается ситуация, когда почтовые ящики пользователей хранятся в формате 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.
Подписаться на:
Сообщения (Atom)