Предупреждение SMTP не работает для keepalived - PullRequest
3 голосов
/ 24 июня 2011

Я работал над проектом, который установит набор высокодоступных балансировщиков нагрузки.Программное обеспечение для балансировки нагрузки и высокой доступности, кажется, работает нормально (я использую Crossroads для балансировки нагрузки и Keepalived для обеспечения высокой доступности серверов балансировки нагрузки, а Conntrackd для проверки работоспособности балансировщиков нагрузки), но у меня возникают проблемы при настройке конфигурациифайл для Keepalived для отправки электронных писем при смене состояния (master-> backup / backup-> master).Я следовал инструкциям на страницах руководства (man keepalived.conf), в которых рассказывалось, как настроить уведомление по электронной почте, но я не получаю электронные письма в ожидаемое время.Я склонен к проверке орфографии и простой ошибке, но после просмотра этой проблемы в течение почти 10 часов я не могу ничего найти, и у меня заканчиваются вещи, которые можно попробовать.

Один из серверов, которые я использую (я назову его loadbalance1), иногда будет использовать smtp_alert для отправки электронных писем, когда происходит изменение, но он будет уведомлять меня только после перехода из резервной копии в главную (немастер для резервного копирования).Когда это не работает, файлы журнала (/ var / log / messages и / var / log / syslog) уведомляют меня о том, что возникает ошибка 550 SMTP.Я понимаю, что эти проблемы связаны с неправильным адресом электронной почты, указанным в файле конфигурации, но, насколько я могу судить, они верны.Единственное, что у меня есть, это говорит о том, что keepalived или мой конфигурационный файл неверны, это то, что sysadmin отправляет электронное письмо людям с сообщениями о том, что '{' является неподходящим получателем почты.У меня на компьютере открыт порт smtp.Еще одна странная вещь, которая происходит, иногда, когда keepalived пытается связаться с почтовым сервером, он хочет посмотреть на локальный компьютер, когда его там нет.Я указываю почтовый сервер как находящийся в другом месте, но по какой-то причине он хочет выглядеть локально.

Другой сервер loadbalance2 никогда не отправит smtp_alert для отправки электронных писем независимо от того, какой переход состояния он выполняет.В файлах журнала для keepalived (/ var / log / messages and / var / log / syslog) я вижу, что сервер резервного копирования loadbalance2 переходит в состояние MASTER, но никогда не отправляет электронное письмо.Выдает ту же ошибку, что и loadbalance1, но она здесь никогда не работает.Он имеет тот же файл конфигурации, что и loadbalance1.

Ниже приведен файл конфигурации, keepalived.conf

    global_defs 
    {
        notification_email 
        {
    fakeemail@example.com
        }
       notification_email_from sysamin@example.com
        ##Mail server below##
       smtp_server www.xxx.yyy.zzz
       smtp_connect_timeout 30
       lvs_id NLB_MASTER
    vrrp_sync_group
    {
        group
        {
            loadbalance1
            loadbalance2
        }
        ##The following scripts don't seem to work properly either##
        ##The scripts are not executed at expected times        ##
        notify_master "/path/to/script.sh master"
        notify_backup "/path/to/script.sh backup"
        notify_fault  "/path/to/script.sh fault"
        notify  "/path/to/script.sh"
        smtp_alert
    }
    vrrp_instance loadbalance1
    {
        state MASTER
        interface eth0
        virtual_router_id 20
        priority 100
        #In some examples online smtp_alert is here
        virtual_ipaddress
        {
            www.xxx.yyy.zzz/24 brd www.xxx.yyy.255 dev eth0
        }
        ##Not entirely sure if this is correct##
        notify_master "/path/to/script.sh master"
        notify_backup "/path/to/script.sh backup"
        notify_fault  "/path/to/script.sh fault"
        notify  "/path/to/script.sh"
        smtp_alert
    }
    vrrp_instance loadbalance2
    {
        state MASTER
        interface eth0
        virtual_router_id 30
        priority 100
        #In some examples online smpt_alert is here
        virtual_ipaddress
        {
            www.xxx.yyy.zzz/24 brd www.xxx.yyy.255 dev eth1
        }
        ##Not entirely sure if this is correct##
        notify_master "/path/to/script.sh master"
        notify_backup "/path/to/script.sh backup"
        notify_fault  "/path/to/script.sh fault"
        notify  "/path/to/script.sh"
        smtp_alert
      }

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

Ответы [ 2 ]

2 голосов
/ 28 июня 2011

Для тех, кто может столкнуться с той же проблемой, мне удалось решить проблему. Я не уверен, что это решение, но оно могло помочь.

- Мне пришлось изменить дату и время машин на текущее время (одна из них была отключена на несколько лет из-за того, что была клоном). Сервер электронной почты, возможно, блокировал электронную почту внутреннего сервера из-за разрыва в системном времени?

-Дата -s чч: мм: сс

-Дата -s год-месяц-день

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

-Внесены незначительные изменения в файл конфигурации, которые должны быть незначительными

    global_defs
    {
          notification_email {
              user@domain.com
          }
    }

Не уверен, что это изменило ситуацию, ну да ладно ... теперь работает

1 голос
/ 13 августа 2015

Мне удалось решить проблему simliar, которую я видел в keepalived.log:

SMTP connection ERROR to [0.0.0.0]:25

Где мой keepalived.conf выглядел так:

global_defs {
  notification_email {
    ....
  }
  notification_email_from somplace@somewhere.com
  smtp_server smtp.somehwere.com
  smtp_connect_timeout 30
  ...
}

Я обновил конфигурацию smtpиспользовать IP-адрес, а не имя хоста для моего сервера smtp:

smtp_server xxx.xxx.xxx.xxx

Результатом новых выходных и успешных уведомлений по электронной почте после перезапуска keepalived:

Remote SMTP server [xxx.xxx.xxx.xxx]:25 connected.
...