要实现的需求,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,我在下一篇帖子贴出我的解决办法吧