• keepalived双机热备实现故障时发送邮件通知


    目前项目已经采用nginx来实现负载均衡,但是nginx调度器只有一台,上次还意外的down机一次,导致整个服务应用全部瘫痪,这次准备再加一个调度器来实现站点高可用性,也就是常说的双机热备了。
    master: 192.168.1.241
    backup: 192.168.1.242
    漂移IP:192.168.1.243
    1,主备调度器都安装keepalived软件
    安装过程如下:
    ./configure --prefix=/usr/local/keepalived && make && make install
    cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/rc.d/init.d/
    cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
    mkdir /etc/keepalived
    cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/
    cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
    service keepalived start
    可以先用命令 service keepalived start 启动进行测试,看进程能够启动,注意查看log.
    2,主调度器配置如下:
    ! Configuration File for keepalived
    global_defs {
        router_id LVS_DEVEL
    }
    vrrp_sync_group VG_1 {
        group {
            VI_1
        }
        notify_master /etc/keepalived/sendmail.pl
    }
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.243
        }
    }
    2,备调度器配置如下:
    ! Configuration File for keepalived
    global_defs {
       router_id LVS_DEVEL
    }
    vrrp_sync_group VG_1 {
        group {
        VI_1
        }
        notify_master /etc/keepalived/sendmail.pl
    }
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 51
        priority 99
        advert_int 1
        authentication {
            auth_type PASS
            auth_pass 1111
        }
        virtual_ipaddress {
            192.168.1.243
        }
    }
    3,发送邮件的perl脚本sendmail.pl内容如下:
    注意主备发送邮件的标题是不一致的,只要你能识别漂移IP在哪台服务器上即可。
    #!/usr/bin/perl -w
    use Net::SMTP_auth;
    use strict;
    my $mailhost = 'smtp.163.com';
    my $mailfrom = 'test@163.com';
    my @mailto   = ('123456@139.com');
    my $subject  = 'keepalived up on backup';
    my $text = "正文
    第二行位于此。";  
    my $user   = 'test@163.com';
    my $passwd = 'xxxxxxx';
    &SendMail();
    ##############################
    # Send notice mail
    ##############################
    sub SendMail() {
        my $smtp = Net::SMTP_auth->new( $mailhost, Timeout => 120, Debug => 1 )
          or die "Error.
    ";
        $smtp->auth( 'LOGIN', $user, $passwd );
        foreach my $mailto (@mailto) {
            $smtp->mail($mailfrom);
            $smtp->to($mailto);
            $smtp->data();
            $smtp->datasend("To: $mailto
    ");
            $smtp->datasend("From:$mailfrom
    ");
            $smtp->datasend("Subject: $subject
    ");
            $smtp->datasend("
    ");
            $smtp->datasend("$text
    
    "); 
            $smtp->dataend();
        }
        $smtp->quit;
    }

    说明:
    a、由于keeplived自带的发送邮件机制是个鸡肋,如果本地不启动25端口就无法实现邮件发送,就琢磨着能不能通过自定义脚本来实现,真的是很幸运,就采用了认证的方式。
    b、其他的配置说明就不详细讲了,网上很多资料。
    4,测试keepalived

    主备调度器都开启80端口,两台服务器上的测试内容不一致,这样更方便测试。


    ##########################

    #所需安装模块

    #use Net::SMTP

    #Authen::SASL

    ##########################

    #$stmp->auth('user','pass');

    #大部分SMTP服务器为了防止 spam /垃圾邮件,就需要用户验证身份。

    #此方法需要另外安装模块:Authen::SASL, 此模块可能系统不自带

    ##########################

    #Debug => 1

    #此段代码用于测试之用,所以开启了Debug,一般测试一次完毕,正式使用的话会关闭它。


    注:可在命令行界面直接执行:/etc/keepalived/sendmail.pl,看看能否发送邮件成功,如果失败的话则需要安装Net::SMTP_auth模块

    安装方法:

    yum -y install perl-CPAN
    cpan Net::SMTP_auth

  • 相关阅读:
    C# STUDY
    C# 通过线程来控制进度条(转)--讲解多线程对界面的操作
    Android开发问题笔记
    win7 Android环境搭配
    Git-Flow
    Synchronizing with Remote Repositories
    smartgit document merge
    smartgit document Rebase
    手把手教你玩转Git分布式版本控制系统!
    (二)代理模式详解(包含原理详解)
  • 原文地址:https://www.cnblogs.com/moqiang02/p/4061214.html
Copyright © 2020-2023  润新知