centos7+keepalived+nginx+tomcat+springboot實現nginx+tomcat高可用以及故障郵件通知

要實現的需求,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,我在下一篇帖子貼出我的解決辦法吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章