zoukankan      html  css  js  c++  java
  • Keepalived+Nginx高可用实例

    Keepalived+Nginx高可用实例

    注意事项:

    1、VIP不需要在服务器网络配置文件中配置。

    2、nginx主不可用时,需要kill掉nginx主的keepalived服务,这样才可以实现VIP切换,因为主的keepalived优先级高。

    3、故障切换时发送邮件通知由nginx备的keepalived服务来实现。

    其中nginx主上keepalived.conf配置为:

    /etc/keepalived/keepalived.conf
    ! Configuration File for keepalived
    
    global_defs {
    #标识本节点的名称
       router_id master
    }
    
    vrrp_script chk_nginx {  
        script "/etc/keepalived/nginx_check.sh"
        #每2秒检测一次nginx的运行状态
        interval 2
        #失败一次,将自己的优先级调整为-20
        weight    -20
    } 
    
    vrrp_instance VI_1 {
        #状态,主节点为MASTER
        state MASTER
        #绑定VIP的网络接口
        interface ens33
        #虚拟路由的ID号,两个节点设置必须一样
        virtual_router_id 51
        #节点优先级,值范围0~254,MASTER>BACKUP
        priority 100
        #组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
        advert_int 1
        #设置验证信息,两个节点必须一致
        authentication {
                auth_type PASS
                auth_pass 1111
            }
    
        #虚拟IP,两个节点设置必须一致,可以设置多个
        virtual_ipaddress {
                192.168.1.106
            }
            #nginx存活状态检测脚本
        track_script {
            chk_nginx
        }
    }
    

    其中调用的/etc/keepalived/nginx_check.sh脚本内容为:

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

    nginx备上keepalived.conf配置为:

    ! Configuration File for keepalived
    
    global_defs {
            #标识本节点的名称
            router_id backup
    }
    
    vrrp_instance VI_1 {
            #状态,备节点为BACKUP
            state BACKUP
            #绑定VIP的网络接口
            interface ens33
            #虚拟路由的ID号,两个节点设置必须一样
            virtual_router_id 51
            #节点优先级,值范围0~254,MASTER>BACKUP
            priority 99
            #组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
            advert_int 1
            #设置验证信息,两个节点必须一致
            authentication {
                    auth_type PASS
                    auth_pass 1111
            }
    
            #节点变为master时执行
            notify_master /etc/keepalived/send_mail.sh
    
            #虚拟IP,两个节点设置必须一致,可以设置多个
            virtual_ipaddress {
                    192.168.1.106
            }
    
    }
    

    里边调用的send_mail.sh脚本为使用Perl编写的,需要安装环境:

    yum -y install perl-CPAN
    cpan Net::SMTP_auth
    

    send_mail.sh脚本内容为:

    #!/usr/bin/perl -w  
    use Net::SMTP_auth;
    use strict;#smtp服务器
    my $mailhost = 'smtp.exmail.qq.com';#发送邮件的邮箱
    my $mailfrom = 'from@qq.com';#接收邮件的邮箱
    my @mailto   = ('to@qq.com');#邮件主题
    my $subject  = 'keepalived up on backup';#邮件正文
    my $text = "正文
     nginx-1服务器宕机!!nginx-2变为master!!!";#发送邮件的用户名
    my $user   = 'from@qq.com';#发送邮件的邮箱密码
    my $passwd = '123456';
    &SendMail();
    ##############################  
    # Send notice mail  
    ##############################  
    sub SendMail() {
        my $smtp = Net::SMTP_auth->new( $mailhost, Timeout => 120, Debug => 1 )
          or die "Error.
    ";
        $smtp->auth( 'LOGIN', $user, $passwd );
        foreach my $mailto (@mailto) {
            $smtp->mail($mailfrom);
            $smtp->to($mailto);
            $smtp->data();
            $smtp->datasend("To: $mailto
    ");
            $smtp->datasend("From:$mailfrom
    ");
            $smtp->datasend("Subject: $subject
    ");
            $smtp->datasend("
    ");
            $smtp->datasend("$text
    
    ");
            $smtp->dataend();
        }
        $smtp->quit;
    }
    
  • 相关阅读:
    三次请求(读-改-读)引出nibernate 一级缓存
    算法竞赛入门经典第一、二章摘记
    uva 10905 Children's Game
    uva 11205 The broken pedometer
    uva 10160 Servicing stations
    uva 208 Firetruck
    uva 167 The Sultan's Successors
    zoj 1016 Parencodings
    uva 307 Sticks
    uva 216 Getting in Line
  • 原文地址:https://www.cnblogs.com/passzhang/p/12088545.html
Copyright © 2011-2022 走看看