SMTP警报不适用于keepalived

时间:2011-06-24 18:42:22

标签: linux smtp load-balancing keep-alive

我一直致力于建立一套高可用负载平衡器的项目。负载平衡和高可用性软件似乎工作正常(我使用Crossroads来实现负载平衡,Keepalived使负载平衡服务器高度可用,Conntrackd用于负载平衡器的运行状况检查)但我在设置配置时遇到问题发送状态转换时Keepalived发送电子邮件的文件(master-> backup / backup-> master)。我已按照手册页(man keepalived.conf)上的说明告诉我如何设置电子邮件通知,但我未能在预期的时间收到电子邮件。我很容易拼写检查和简单的错误,但看了这个问题近10个小时后,我似乎无法找到任何东西,并试图用尽一切。

我正在使用的其中一个服务器(我将其命名为loadbalance1)有时会使用smtp_alert在发生更改时发送电子邮件但它只会在从备份转换为主服务器时通知我(不是主服务器转换为主服务器) )。当它不起作用时,日志文件(/ var / log / messages和/ var / log / syslog)通知我发生了SMTP错误状态550。我理解这些问题与配置文件中指定的错误电子邮件地址有关,但据我所知它们是正确的。我唯一认为keepalived或我的配置文件错误的是sysadmin通过电子邮件向人们发送有关“{”作为不正确的邮件收件人的消息。我在计算机上打开了smtp端口。发生的另一件奇怪的事情是,当keepalived尝试联系邮件服务器时,它希望在不存在的情况下查看本地计算机。我指定邮件服务器在其他地方,但由于某种原因它想要在本地查找。

另一台服务器,loadbalance2永远不会发送smtp_alert来发送电子邮件,无论它做什么状态转换。我可以在日志文件中看到keepalived(/ var / log / messages和/ 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 个答案:

答案 0 :(得分:2)

对于那些可能遇到同样问题的人,我设法解决了这个问题。我不确定它是否是解决方案,但它可能有所贡献。

- 我必须将机器的日期和时间更改为当前时间(由于它是克隆,其中一个已经关闭了几年)。由于系统时间的差距,电子邮件服务器可能一直在阻止后端服务器的电子邮件?

-Date -s hh:mm:ss

-Date -s year-month-day

- 修复两台机器上具有相同主机名的问题。正如我所说,它是另一个的克隆,我从未改变过它。我可能一直从后端服务器收到通知,但从来没有区分这两个,因为我收到来自同一主机名的电子邮件

- 对配置文件进行微小改动,应该可以忽略不计

    global_defs
    {
          notification_email {
              user@domain.com
          }
    }

不确定这是否有所不同但是很好......现在可以使用了

答案 1 :(得分:1)

我能够解决keepalived.log中的simliar问题:

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配置,以便为我的smtp服务器使用IP地址而不是主机名:

smtp_server xxx.xxx.xxx.xxx

重新启动keepalived后产生新的输出和成功的电子邮件通知:

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