Избыточные серверы и балансировка нагрузки с использованием MX-записей
Обычный процесс доставки почты использует DNS-записи Mail Exchange (MX), чтобы определить целевой сервер. MX-запись сообщает отправляющей системе, куда доставлять почту для определённого домена. Также возможно иметь несколько MX-записей для одного домена с разным приоритетом. Например, наша MX-запись выглядит так:
Код:
> dig -t mx proxmox.com
;; ANSWER SECTION:
proxmox.com. 22879 IN MX 10 mail.proxmox.com.
;; ADDITIONAL SECTION:
mail.proxmox.com. 22879 IN A 213.129.239.114
Обратите внимание, что для домена proxmox.com существует одна MX-запись, указывающая на mail.proxmox.com. Команда 'dig' автоматически выводит соответствующую адресную запись, если она есть. В нашем случае это "213.129.239.114". Приоритет нашей MX-записи установлен на 10 (предпочтительное значение по умолчанию).
Горячее резервирование с помощью запасных MX-записей
Многие не хотят ставить два избыточных почтовых прокси, вместо этого используют почтовый прокси своего провайдера как запасной вариант. Это легко сделать, добавив дополнительную MX-запись с более низким приоритетом (большим числом). В нашем примере это выглядит так:
Код:
proxmox.com. 22879 IN MX 100 mail.provider.tld.
Разумеется, ваш провайдер должен принимать почту для вашего домена и пересылать её вам. С такой настройкой вы никогда не потеряете письма, потому что отправляющий Mail Transport Agent (MTA) просто доставит письмо на запасной сервер (mail.provider.tld), если основной сервер (mail.proxmox.com) недоступен.
Балансировка нагрузки с MX-записями
Использовать почтовый сервер провайдера не всегда хорошая идея, ведь у многих провайдеров нет продвинутых методов борьбы со спамом, например, greylisting. Часто лучше запустить второй сервер самостоятельно, чтобы повысить качество спам-фильтрации. В любом случае, настроить высокопроизводительный кластер с балансировкой нагрузки на основе MX-записей довольно просто. Для этого нужно определить две MX-записи с одинаковым приоритетом.
Для наглядности приведу полный пример. Сначала у вас должны быть два работающих почтовых шлюза Proxmox (mail1.example.com и mail2.example.com), каждый с собственным IP (остальные настройки примерно одинаковы, например, можно использовать резервное копирование/восстановление правил). Пусть будут следующие адреса (DNS-записи типа A):
Код:
mail1.example.com. 22879 IN A 1.2.3.4
mail2.example.com. 22879 IN A 1.2.3.5
Кстати, всегда полезно добавить обратные записи (PTR) для этих хостов. Многие современные почтовые системы отказываются принимать почту с серверов без корректных PTR-записей.
Далее вам нужно определить MX-записи:
Код:
example.com. 22879 IN MX 10 mail1.example.com.
example.com. 22879 IN MX 10 mail2.example.com.
Вот и всё. Почта будет приходить на оба сервера, примерно равномерно распределяясь по нагрузке. Если один сервер выйдет из строя, другой подхватит работу.
Другие варианты
Несколько адресных записей: Иногда несколько MX-записей для большого числа доменов неудобны. Тогда можно использовать одну MX-запись на домен, но с несколькими адресными записями:
Код:
example.com. 22879 IN MX 10 mail.example.com.
mail.example.com. 22879 IN A 1.2.3.4
mail.example.com. 22879 IN A 1.2.3.5
Использование возможностей файервола:
Многие файерволы поддерживают что-то вроде round-robin планирования при использовании DNAT. Подробнее смотрите в документации к вашему файерволу.
Обычный процесс доставки почты использует DNS-записи Mail Exchange (MX), чтобы определить целевой сервер. MX-запись сообщает отправляющей системе, куда доставлять почту для определённого домена. Также возможно иметь несколько MX-записей для одного домена с разным приоритетом. Например, наша MX-запись выглядит так:
Код:
> dig -t mx proxmox.com
;; ANSWER SECTION:
proxmox.com. 22879 IN MX 10 mail.proxmox.com.
;; ADDITIONAL SECTION:
mail.proxmox.com. 22879 IN A 213.129.239.114
Обратите внимание, что для домена proxmox.com существует одна MX-запись, указывающая на mail.proxmox.com. Команда 'dig' автоматически выводит соответствующую адресную запись, если она есть. В нашем случае это "213.129.239.114". Приоритет нашей MX-записи установлен на 10 (предпочтительное значение по умолчанию).
Горячее резервирование с помощью запасных MX-записей
Многие не хотят ставить два избыточных почтовых прокси, вместо этого используют почтовый прокси своего провайдера как запасной вариант. Это легко сделать, добавив дополнительную MX-запись с более низким приоритетом (большим числом). В нашем примере это выглядит так:
Код:
proxmox.com. 22879 IN MX 100 mail.provider.tld.
Разумеется, ваш провайдер должен принимать почту для вашего домена и пересылать её вам. С такой настройкой вы никогда не потеряете письма, потому что отправляющий Mail Transport Agent (MTA) просто доставит письмо на запасной сервер (mail.provider.tld), если основной сервер (mail.proxmox.com) недоступен.
Балансировка нагрузки с MX-записями
Использовать почтовый сервер провайдера не всегда хорошая идея, ведь у многих провайдеров нет продвинутых методов борьбы со спамом, например, greylisting. Часто лучше запустить второй сервер самостоятельно, чтобы повысить качество спам-фильтрации. В любом случае, настроить высокопроизводительный кластер с балансировкой нагрузки на основе MX-записей довольно просто. Для этого нужно определить две MX-записи с одинаковым приоритетом.
Для наглядности приведу полный пример. Сначала у вас должны быть два работающих почтовых шлюза Proxmox (mail1.example.com и mail2.example.com), каждый с собственным IP (остальные настройки примерно одинаковы, например, можно использовать резервное копирование/восстановление правил). Пусть будут следующие адреса (DNS-записи типа A):
Код:
mail1.example.com. 22879 IN A 1.2.3.4
mail2.example.com. 22879 IN A 1.2.3.5
Кстати, всегда полезно добавить обратные записи (PTR) для этих хостов. Многие современные почтовые системы отказываются принимать почту с серверов без корректных PTR-записей.
Далее вам нужно определить MX-записи:
Код:
example.com. 22879 IN MX 10 mail1.example.com.
example.com. 22879 IN MX 10 mail2.example.com.
Вот и всё. Почта будет приходить на оба сервера, примерно равномерно распределяясь по нагрузке. Если один сервер выйдет из строя, другой подхватит работу.
Другие варианты
Несколько адресных записей: Иногда несколько MX-записей для большого числа доменов неудобны. Тогда можно использовать одну MX-запись на домен, но с несколькими адресными записями:
Код:
example.com. 22879 IN MX 10 mail.example.com.
mail.example.com. 22879 IN A 1.2.3.4
mail.example.com. 22879 IN A 1.2.3.5
Использование возможностей файервола:
Многие файерволы поддерживают что-то вроде round-robin планирования при использовании DNAT. Подробнее смотрите в документации к вашему файерволу.