centos7+keepalived+nginx+tomcat+springboot实现nginx+tomcat高可用以及故障邮件通知

要实现的需求,keepalived双机热备,实现nginx高可用,项目多份部署使用shiro-redis存储session信息

shiro分布式session链接nginx+springboot+shiro+redis实现分布式session共享,同一项目部署多份实现负载均衡

nginx配置文件,两台服务器上的nginx都这样配置,两个8080的Server是同一个项目运行在了两个服务器上,在这里可以做到tomcat中的项目高可用

centos7+keepalived+nginx+tomcat+springboot实现nginx+tomcat高可用以及故障邮件通知_第1张图片

安装keepalived,安装步骤挺简单的,就是编译安装,这里我就不写了,提供搜索关键字,centos安装keepalived

主要是配置文件,主机配置文件如下:

global_defs {
    router_id node_01   #id可以不同
}

vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    #每2秒检测一次nginx的运行状态
    interval 2
    #失败一次,将自己的优先级调整为-20
    weight    -20
}

vrrp_instance VI_1 {
    interface ens33
    state MASTER  # BACKUP for slave routers
    priority 101  # 100 for BACKUP
    virtual_router_id 51
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       ens33
    }
    virtual_ipaddress {
        192.168.1.99
    }

        track_script {
        chk_nginx
    }

}

需要注意虚拟ip要和本机的ip是一个网段的,下面贴出nginx检测脚本:脚本功能,nginx宕机后,也要把keepalived关掉,这样从机才会升级为主机

#!/bin/bash
A=`ps -C nginx -no-header |wc -l`
if [ $A -eq 1 ];then
        pkill keepalived
fi

这样主机就配置完成了

下面是从机配置

global_defs {
    router_id node_01   #id可以不同
}

vrrp_instance VI_1 {
    interface ens33
    state BACKUP  # BACKUP for slave routers
    priority 100  # 100 for BACKUP
    virtual_router_id 51
    garp_master_delay 1
    authentication {
        auth_type PASS
        auth_pass password
    }
    track_interface {
       ens33
    }

        notify_master /etc/keepalived/send_mail.sh

    virtual_ipaddress {
        192.168.1.99
    }
}

主机可从机不同配置主要是这里 

另外从机需要配置一个,从机升级为主机时,想管理员发送警告文件,也就是提示管理员,主机宕机了,赶紧去修复啊。

发送邮件需要安装环境:如下命令

注意这样个命令分别执行哦
yum -y install perl-CPAN
下面这个命令是根据他的提示做一些选择啥的,按要求照做就行
cpan Net::SMTP_auth

发送邮件脚本

#!/usr/bin/perl -w
use Net::SMTP_auth;
use strict;
#smtp服务器
my $mailhost = 'smtp.163.com';
#发送邮件的邮箱
my $mailfrom = '[email protected]';
#接收邮件的邮箱
my @mailto   = ('[email protected]');
#邮件主题
my $subject  = 'keepalived备用服务器启动完成';
#邮件正文
my $text = "\n nginx-1服务器宕机!!nginx-2变为master!!!";
#发送邮件的用户名
my $user   = '[email protected]';
#发送邮件的邮箱密码
my $passwd = '你的授权码';
&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();

这样配置完成之后,无论是关掉主机的nginx,或是keepalived,或是直接关掉主机,从机就会升级为主机,并且向管理员发送邮件:

centos7+keepalived+nginx+tomcat+springboot实现nginx+tomcat高可用以及故障邮件通知_第2张图片

需要注意一个地方,就是现在这种情况项目中的session需要改为分布式session,我在下一篇帖子贴出我的解决办法吧

你可能感兴趣的:(分布式,spring,boot,centos)