要實現的需求,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
#失敗一次,將自己的優先級調整爲-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,或是直接關掉主機,從機就會升級爲主機,並且向管理員發送郵件:
需要注意一個地方,就是現在這種情況項目中的session需要改爲分佈式session,我在下一篇帖子貼出我的解決辦法吧