当前位置: 代码迷 >> 综合 >> centos7+keepalived+nginx+tomcat+springboot实现nginx+tomcat高可用以及故障邮件通知
  详细解决方案

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

热度:61   发布时间:2023-11-06 03:34:01.0

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

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

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

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

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

global_defs {router_id node_01   #id可以不同
}vrrp_script chk_nginx {script "/etc/keepalived/nginx_check.sh"#每2秒检测一次nginx的运行状态interval 2#失败一次,将自己的优先级调整为-20weight    -20
}vrrp_instance VI_1 {interface ens33state MASTER  # BACKUP for slave routerspriority 101  # 100 for BACKUPvirtual_router_id 51garp_master_delay 1authentication {auth_type PASSauth_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 ];thenpkill keepalived
fi

这样主机就配置完成了

下面是从机配置

global_defs {router_id node_01   #id可以不同
}vrrp_instance VI_1 {interface ens33state BACKUP  # BACKUP for slave routerspriority 100  # 100 for BACKUPvirtual_router_id 51garp_master_delay 1authentication {auth_type PASSauth_pass password}track_interface {ens33}notify_master /etc/keepalived/send_mail.shvirtual_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 = 'ninggepojie@163.com';
#接收邮件的邮箱
my @mailto   = ('844899914@qq.com');
#邮件主题
my $subject  = 'keepalived备用服务器启动完成';
#邮件正文
my $text = "\n nginx-1服务器宕机!!nginx-2变为master!!!";
#发送邮件的用户名
my $user   = 'ninggepojie@163.com';
#发送邮件的邮箱密码
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,或是直接关掉主机,从机就会升级为主机,并且向管理员发送邮件:

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

  相关解决方案