null

Настройка ZFS для почтового сервера

При использовании ZFS для хранения почты в формате maildir будет полезной небольшая настройка со стороны файловой системы. Приведённые ниже рекомендации были сформированы при эксплуатации связки exim и dovecot на операционной системе FreeBSD, которая устойчиво работала при наличии около 150 одновременных соединений, но большей частью эти рекомендации переносимы и на другое ПО.

dovecot не использует информацию об времени доступа к файлам, поэтому в первую очередь для файловой системы под почтовое хранилище отключаем atime:

zfs set atime=off export/mail

что позволит избежать лишних записей на файловую систему при операциях чтения.

За годы в компании может накопиться достаточно большой объём почтовых сообщений, а пользователи обычно не очень любят удалять ставшие ненужными письма. При этом используемое при пересылке вложенных файлов кодирование base64 увеличивает размер письма примерно в 1.6 раза. Включение gzip сжатия:

zfs set compression=gzip export/mail

позволяет избежать потерь на кодировании:

NAME        PROPERTY       VALUE  SOURCE
export/mail compressratio  1.63x  -

Специфика работы IMAP сервера связана с тем, что в большинстве случаев после открытия в файле (письме) читаются только заголовки, что у ZFS вводит в "замешательство" механизм prefetch, который увидев попытку прочитать начало файла, пытается прочитать файл до конца, создавая тем самым дополнительную нагрузку на дисковую подсистему. К сожалению, в ZFS отключить prefetch для конкретной файловой системы невозможно, поэтому его надо отключать для всей подсистемы ZFS. В FreeBSD это можно сделать, например, через добавление в файл /boot/loader.conf:

vfs.zfs.prefetch_disable="1"

В Solaris это можно сделать через добавление в /etc/system:

set zfs:zfs_prefetch_disable = 1

Еще одна проблема связана с тем, что в одном почтовом ящике у пользователя могут храниться десятки и сотни тысяч сообщений, а с точки зрения формата maildir каждое письмо это отдельный файл, таким образом в одном каталоге оказывается достаточно большое количество файлов, и для эффективной работы с такими каталогами требуется большой объём кэша метаданных. В FreeBSD по умолчанию под кэш метаданных по умолчанию выделена только четверть всего дискового кэша, но для нужд почтового сервера желательно увеличить объём кэша до половины:

vfs.zfs.arc_max="4096M"
vfs.zfs.arc_meta_limit="2048M"

При этом под дисковый кэш желательно выделить максимальный объём памяти. При наличии SSD, я бы рекомендовал использовать его в качестве кэша второго уровня (L2ARC). Но, к сожалению, возможности проверить эффективность такого решения у меня не было.

Коротко о себе:

Работаю в компании Tune-IT и тьютором кафедры Вычислительной техники в СПбГУИТМО.

Очень люблю команду cat, core solaris и IPv6.