Использование PostgreSQL в Postfix
Введение
Поддержка поисковых таблиц pgsql позволяет Postfix обращаться к конфигурацонной информации,
хранящейся на серверах баз данных PostgreSQL. Этот инструмент позволяет работать с множеством
баз данных : использовать одну базу для таблицы virtual(5),
другую - для access(5), третью - для таблицы aliases(5)
Возможно использование нескольких серверов для
одной и той-же базы данных, Postfix автоматически переключится на другой (вспомогательный) сервер баз данных, если
основной не сможет обслуживать запросы по той или иной причине.
Высоконагруженные почтовые сервера , использующие PostgreSQL, генерируют
множество параллельных pgsql-запросов, поэтому PostgreSQL сервер(а) должны быть
соответствующим образом настроены, имейте это в виду. Вы можете уменьшить
количество соединений с сервером баз данных используя сервис Postfix
proxymap(8)
Установка Postfix с поддерержкой PostgreSQL
Заметка: для использования PostgreSQL с Postfix в Debian GNU/Linux's
все , что вам нужно - это инсталлировать пакет postfix-pgsql.
Пересборка Postfix не требуется.
Для сборки Postfix с поддержкой PostgreSQL, Вам необходимо добавить
-DHAS_PGSQL, имя каталога, содержащего заголовочные файлы PostgreSQL,
и расположение библиотеки libpq:
Пример
% make tidy
% make -f Makefile.init makefiles \
'CCARGS=-DHAS_PGSQL -I/usr/local/include/pgsql' \
'AUXLIBS=-L/usr/local/lib -lpq'
Затем, просто запускаем 'make'.
Использование таблиц PostgreSQL
Если Postfix собран с поддержкой баз данных PostgreSQL, Вы можете заставить его
работать с ними. Для этого внесите изменения в конфигурационный файл main.cf , например такие:
/etc/postfix/main.cf:
alias_maps = pgsql:/etc/postfix/pgsql-aliases.cf
Файл /etc/postfix/pgsql-aliases.cf содержит информацию,
объясняющую Postfix, как работать c базой данных PostgreSQL.
Полное описание дано в документе pgsql_table(5)
Пример: локальные алиасы
#
# Конфигурационный файл pgsql для таблицы поиска local(8) aliases(5)
#
#
# Хосты баз данных , c которыми пытается установить соединение Postfix
hosts = host1.some.domain host2.some.domain
#Имя пользователя и пароль сервера баз данных.
user = someone
password = some_password
# Имя базы данных.
dbname = customer_database
# Шаблон SQL запроса для Postfix 2.2 и выше. Смотрите pgsql_table(5).
query = SELECT forw_addr FROM mxaliases WHERE alias='%s' AND status='paid'
#Для версий Postfix младше 2.2. Подробности в документе pgsql_table(5).
select_field = forw_addr
table = mxaliases
where_field = alias
# Не забывайте про "AND"!
additional_conditions = AND status = 'paid'
Использование резервных серверов баз данных
Те хосты , которые используют несколько серверов для транспорта почты,
имеют возможность обращаться к общим конфигурационным параметрам,
хранящимся в одной общей базе данных, но отказ в обслуживании этого единственного
SQL-сервера обычно приводит к остановке всей почтовой системы.
Для повышения надежности в Postfix включена возможность доступа к нескольким
серверам баз данных (с одинаковым содержимым,естесственно).
Это будет работать в том случае, если администраторы настроили реплицикацию необходимой базы данных
Postgres на нескольколько серверов - эти машины и будут резервировать друг друга.
Если запросы к одному хосту заканчиваются неудачей, остальные хосты
опрашиваются в случайном порядке. Когда ни один сервер баз
данных недостижим, передача почты останавливается до того момента, когда
хотя бы один из PostgreSQL серверов станет доступен.
Credits
- This code is based upon the Postfix mysql map by Scott Cotton
and Joshua Marcus, IC Group, Inc.
- The PostgreSQL changes were done by Aaron Sethman.
- Updates for Postfix 1.1.x and PostgreSQL 7.1+ and support for
calling stored procedures were added by Philip Warner.
- LaMont Jones was the initial Postfix pgsql maintainer.
- Liviu Daia revised the configuration interface and added the
main.cf configuration feature.
- Liviu Daia revised the configuration interface and added the main.cf
configuration feature.
- Liviu Daia with further refinements from Jose Luis Tallon and
Victor Duchovni developed the common query, result_format, domain and
expansion_limit interface for LDAP, MySQL and PosgreSQL.
Документ перевел Максим Шапошников
|