博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
keepalived双机热备实现故障时发送邮件通知
阅读量:4698 次
发布时间:2019-06-09

本文共 2877 字,大约阅读时间需要 9 分钟。

目前项目已经采用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,发送邮件的
脚本sendmail.pl内容如下:

注意主备发送邮件的标题是不一致的,只要你能识别漂移IP在哪台
上即可。

#!/usr/bin/perl -wuse 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 = "正文\n第二行位于此。";  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.\n";    $smtp->auth( 'LOGIN', $user, $passwd );    foreach my $mailto (@mailto) {        $smtp->mail($mailfrom);        $smtp->to($mailto);        $smtp->data();        $smtp->datasend("To: $mailto\n");        $smtp->datasend("From:$mailfrom\n");        $smtp->datasend("Subject: $subject\n");        $smtp->datasend("\n");        $smtp->datasend("$text\n\n");         $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

转载于:https://www.cnblogs.com/moqiang02/p/4061214.html

你可能感兴趣的文章
Eclipse+Maven环境下java.lang.OutOfMemoryError: PermGen space及其解决方法
查看>>
安全漏洞之Java
查看>>
Oracle 组函数count()
查看>>
Session的使用过程中应注意的一个小问题
查看>>
SDK,API,DLL名词解释
查看>>
试探算法
查看>>
jquery.validation.js 使用
查看>>
数据库高级查询
查看>>
C语言实现封装、继承和多态
查看>>
创建文件
查看>>
Nginx 相关介绍
查看>>
leetcode[33]Search in Rotated Sorted Array
查看>>
OpenCV Shi-Tomasi角点检测子
查看>>
eval(PHP 4, PHP 5)
查看>>
readelf用法小记
查看>>
Java中JavaScript unescape与escape函数算法
查看>>
js的基础要点
查看>>
C#/IOS/Android通用加密解密方法
查看>>
Web API 简单示例
查看>>
返璞归真 asp.net mvc (4) - View/ViewEngine
查看>>