Улучшение производительность Exim: монтирование очереди сообщений на Электронном диске

Для ускорения резервного копирования и процесса восстановления, можно хотеть рассмотреть использование сторонней резервной технологии такой как.

Quest Litespeed

На ноте стороны, изменяя размер Вашего Журнала транзакций не будет влиять на объем данных, которые поддерживаются/восстановил.

3
задан 7 May 2011 в 20:47
5 ответов

Электронный диск: последствия

  • Используя электронный диск только полезно, когда Ваше приложение является связанным IO, конкретно с Вашим жестким диском. Если Вы не отправляете тысячи сообщений по быстрой волоконно-оптической линии, возможности состоят в том, что Ваш основной ограничитель является скоростью Вашего интернет-соединения а не скоростью Вашего жесткого диска.
  • Exim уже очень хорош в обработке многочисленных очередей на 'медленном' носителе, таком как жесткие диски; просто установите split_spool_directory в файле конфигурации и Exim обработает многочисленные очереди более эффективно путем разделения сообщений на подкаталоги вместо единственного каталога шпульки.
  • Буферизация сообщений к электронному диску представляет угрозу выпуска всей очереди в случае перезагрузки или перебоя в питании без способа восстановить очередь.
  • Каталог шпульки может стать довольно крупным, и Вы рискуете заканчиваться пространство на разделе электронного диска очень быстро. Несколько электронных писем с большими вложениями могли довольно легко заполнить даже значительный электронный диск. Точно так же сообщения, которые не могут быть переданы сразу, находятся в очереди, пока они успешно не поставлены, удалены вручную или истекли Exim, хотя это - конфигурируемый параметр в файле конфигурации Exim.


Электронный диск: Конфигурирование электронного диска

Много дистрибутивов Linux уже имеют некоторые предварительно сконфигурированные, но неиспользованные электронные диски. Выполните следующую команду для списка текущих электронных дисков:

ls /dev/ram*

Для наблюдения выделения размера использовать fdisk стандартным способом: (где X Ваше число электронного диска),

fdisk -l /dev/ramX

Вы, вероятно, захотите увеличить распределение пространства по умолчанию. Так как размером электронного диска управляет ядро, необходимо будет установить опцию ядра увеличить выделенное место. Если Вашим загрузчиком является GRUB, можно отредактировать grub.conf файл и добавляет ramdisk_size опция ядра. Ваш файл конфигурации GRUB должен затем выглядеть примерно так: (в этом примере мы устанавливаем размер электронного диска на 256 МБ),

default 0
timeout 5
hiddenmenu
splashimage=(hd0,1)/boot/grub/splash.xpm.gz

title=Gentoo Gateway Server
root (hd0,1)
kernel /boot/vmlinuz root=/dev/sda2 ramdisk_size=256000

После перезагрузки Ваши новые электронные диски должны отразить обновленное распределение пространства. С тех пор нет никакого смысла в форматировании электронного диска с журналируемой файловой системой, мы будем просто использовать ext2:

mke2fs -m 0 /dev/ram0

-m 0 опция мешает mke2fs резервировать любое пространство в файловой системе для пользователя root. Можно теперь создать точку монтирования для электронного диска, смонтировать его и начать использовать его.

mkdir /mnt/ramdisk
mount /dev/ram0 /mnt/ramdisk
df -h /dev/ram0

Кроме того, удостоверьтесь, что Вам установили корректные полномочия на точке монтирования (замените имя пользователя и groupname с корректной группой и пользователем для Вашей системы):

chown -R username:groupname /mnt/ramdisk

Можно теперь использовать этот раздел, как будто это был стандартный раздел жесткого диска. Обратите внимание, что при размонтировании раздела данные не будут потеряны, и RAM не будет освобождена, так как ядро постоянно выделяет требуемое место, пока не перезагружено.

Для автоматизации этой процедуры добавьте следующее в Ваш /etc/rc.local сценарий:

/sbin/mke2fs -q -m 0 /dev/ram0
/bin/mount /dev/ram0 /mnt/ramdisk
/bin/chown username:groupname /mnt/ramdisk
/bin/chmod 0750 /mnt/ramdisk


Электронный диск: конфигурация Exim

Можно сделать, связывание монтируется так, чтобы Exim продолжил писать в свой стандартный каталог шпульки. Для этого добавьте следующую строку к Вашему /etc/fstab файл:

/mnt/ramdisk        /var/spool/exim        none        bind        0 0

С другой стороны, можно просто указать на Exim на точку монтирования электронного диска. Для этого необходимо будет установить следующее в exim.conf файл:

spool_directory = /mnt/ramdisk

Очевидно, Вы только сделали бы любой вышеупомянутого, не обоих.


Лучшее Решение: tmpfs

Вместо того, чтобы использовать электронный диск, скорее используйте tmpfs, поддерживаемый ядром Linux 2.4 и. Преимущество использования tmpfs - то, что память является динамично присваиваемой, делая его намного более гибким решением, чем электронные диски. Кроме того, если Ваш tmpfs раздел исчерпает пространство, то ядро автоматически начнет данные подкачки страниц к Вашему жесткому диску, тогда как решение для электронного диска просто заставило бы Exim прекращать обрабатывать сообщения и катастрофический отказ.

Используя tmpfs, Вы не должны будете делать ни одного из шагов, требуемых для вышеупомянутого решения для электронного диска. Следующие шаги требуются для успешной tmpfs конфигурации:

Создайте точку монтирования и установите корректные полномочия:

mkdir /mnt/tmpfs
chown -R username:groupname /mnt/tmpfs

Затем, откройте Ваш /etc/fstab файл и набор tmpfs раздел, который будет создан и смонтирован при начальной загрузке:

#<fs>        <mountpoint>        <type>       <opts>                             <dump/pass>
tmpfs        /mnt/tmpfs          tmpfs        size=1G,nr_inodes=10k,mode=0700    0 0

Это создаст 1 ГБ tmpfs раздел с 10'000 inodes. exim конфигурация совпадает с при создании электронного диска - любой говорит Exim, что местоположение нового каталога шпульки расположено в /mnt/tmpfs или свяжите существующий каталог шпульки с /mnt/tmpfs точка монтирования. С другой стороны, Вы могли просто смонтировать tmpfs раздел на существующий каталог шпульки Exim с самого начала - так вместо вышеупомянутых изменений в /etc/fstab файл, используйте эту строку вместо этого:

#<fs>        <mountpoint>        <type>       <opts>                             <dump/pass>
tmpfs        /var/spool/exim     tmpfs        size=1G,nr_inodes=10k,mode=0700    0 0


Этот сайт имеет хорошую статью, объясняя tmpfs и электронные диски и различия между ними.

5
ответ дан 3 December 2019 в 05:51

Перед продолжением, сочините сообщение, что Вы будете отправлять пользователям, найденным парсингом журнала почтового сервера, сообщающим им, что Ваш сервер просто потерял их сообщение из-за перебоя в питании/reboot/crash/human спотыкающийся силового кабеля.

Почтовые серверы очень серьезно относятся к гарантиям персистентности данных. Они идут на многое, чтобы удостовериться что, когда они берут на себя ответственность за почту пользователя, что сообщение безопасно на диске и собирается пережить катастрофический отказ/перезагрузку или любое другое событие, которое вытирает содержание RAM системы. Вы собираетесь удостовериться, что их усилия будут потрачены впустую. Вы уверены, что хотите сделать это?

Вы освободили бы данные пользователя через множество сценариев здесь, включая чистую перезагрузку или завершение работы машины. Ищите некоторую другую идею о тонкой настройке производительности почтового сервера.

0
ответ дан 3 December 2019 в 05:51

можно использовать tmpfs и смонтировать электронный диск, это не сложно.

существует это сообщение в блоге, которое детализирует создание tmpfs и изменение сценария запуска exim для создания его немного более устойчивым.

0
ответ дан 3 December 2019 в 05:51

Я просто использовал бы/dev/shm, который уже смонтирован по умолчанию на большинстве современных дистрибутивов Linux.

vz1:~# df -h /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                  12G     0   12G   0% /dev/shm

vz1:~# mount |grep shm
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)

vz1:/dev/shm# dd if=/dev/zero of=5gb.dat bs=1M count=5000 conv=fsync
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB) copied, 7.36568 s, 712 MB/s


vz1:/dev/shm# time dd if=5gb.dat of=/dev/null bs=1M
5000+0 records in
5000+0 records out
5242880000 bytes (5.2 GB) copied, 2.70614 s, 1.9 GB/s

Просто удостоверьтесь, что Вы контролируете его; заполнение его могло быть плохим.

И затем просто обновите сценарий запуска Exim init.d для перемещения / каталогов шпульки var в/dev/shm/куда-нибудь.

0
ответ дан 3 December 2019 в 05:51

Как уже было сказано, размещение каталога спула в ОЗУ tempfs рискованно, так как вы можете потерять все электронные письма в очереди в случае сбоя сервера. Я получил очень хорошую производительность, разместив каталоги / var / spool / exim / input и / var / spool / exim / msglog на SSD-диске (более 60000 отправленных писем в час на дешевом настольном оборудовании).

Каталог / var / spool / exim / db предпочтительно может быть помещен на ramdisk (символическая ссылка на этот каталог на / dev / shm - самый простой способ), так как повторная попытка подсказки не смертельны.

Также фактом является то, что exim будет довольно плохо мусорить, если у вас в очереди несколько тысяч электронных писем или больше, поскольку процессы обработчика очереди будут тратить пропорционально больше времени, спотыкаясь друг о друге и проверяя блокировки, чем фактически доставляя электронные письма.

0
ответ дан 3 December 2019 в 05:51

Теги

Похожие вопросы