nginx+keeplived配置及注解

本文介绍如何通过Nginx和Keepalived实现服务器的高可用性,包括主从和双主配置方案,详细展示了配置过程、脚本内容及故障模拟测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高可用有两种方式:

先关闭selinux,开通vvrp协议

1、Nginx+keepalived 主从配置

这种方案,使用一个vip地址,前端使用2台机器,一台做主,一台做备,但同时只有一台机器工作,另一台备份机器在主机器不出现故障的时候,永远处于浪费状态,对于服务器不多的网站,该方案不经济实惠。

2、Nginx+keepalived 双主配置

这种方案,使用两个vip地址,前端使用2台机器,互为主备,同时有两台机器工作,当其中一台机器出现故障,两台机器的请求转移到一台机器负担,非常适合于当前架构环境。

 

Nginx+keepalived 主从配置

环境如下:

lb-01:192.168.96.130  nginx+keepalived-master

lb-02:192.168.96.131  nginx+keepalived-backup

VIP:192.168.96.138

两台机器都要安装nginx 配置文件相同

upstream myServer{    

      server 192.168.96.130:8080;    #要确实存在

      server 192.168.96.131:8080;    

    }   

 server {  

        listen       80;  

        server_name  localhost; 

        #charset koi8-r; 

        #access_log  logs/host.access.log  main; 

        location / {   

          proxy_pass  http://myServer;    

        }  

nginx结合keepalived高可用

为什么使用keepalived呢?使用keepalived就用来做高可用的,提供虚拟VIP

分别在2台机子上安装keepalived

# yum install keepalived -y

查看keepalived版本

# keepalived -v

Keepalived v1.2.13 (11/20,2015)

 

关于2台keepalived配置文件/etc/keepalived

在130master keepalived配置文件内容如下:

global_defs {

notification_email {      #设置报警通知邮件地址,可以设置多个

    root@localhost

  }

  notification_email_from admin@stu31.com  #设置邮件的发送地址

  smtp_server 127.0.0.1        #设置smtp server的地址,该地址必须是存在的

  smtp_connect_timeout 30      #设置连接smtp server的超时时间

  router_id LVS_DEVEL          #运行Keepalived服务器的标识,发邮件时显示在邮件标题中的信息

}

发送邮件设置一般使用脚本来写,后面介绍

vrrp_script chk_http_port {

   script "/usr/local/src/check_nginx.sh" 后面介绍此脚本

   interval 2      #(检测脚本执行的间隔)

   weight 2

}

 

vrrp_instance VI_1 {

    state MASTER   # 备份服务器上将 MASTER 改为 BACKUP  

    interface eno16777736  //网卡

    virtual_router_id 51   # 主、备机的virtual_router_id必须相同

    priority 100     # 主、备机取不同的优先级,主机值较大,备份机值较小

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.96.138  // VRRP H虚拟地址

    }

}

 

在131-backup keepalived配置文件内容如下

global_defs {

   notification_email {

     acassen@firewall.loc

     failover@firewall.loc

     sysadmin@firewall.loc

   }

   notification_email_from Alexandre.Cassen@firewall.loc

   smtp_server 192.168.200.1

   smtp_connect_timeout 30

   router_id LVS_DEVEL  一般是自己的主机名

}

 

vrrp_script chk_http_port {

 

   script "/usr/local/src/check_nginx.sh"

 

   interval 2      #(检测脚本执行的间隔)

 

   weight 2

 

}

 

vrrp_instance VI_1 {

    state BACKUP

    interface eno16777736

    virtual_router_id 51

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.96.138

    }

}

然后分别启动2台keepalived服务

[root@lb-01 ~]# systemctl start keepalived.service

[root@lb-02 ~]# systemctl start keepalived.service

查看虚拟VIP

  1. master机器查看

 

从上面可以看到虚拟VIP地址192.168.96.138

  1. backup机器查看

 

从上面可以看到没有虚拟VIP地址

测试访问虚拟VIP

打开浏览器访问 http://192.168.96.138

再F5刷新可以看到变化

此时虚拟VIP可以轮询访问了

 

模拟故障:

把130-master nginx和keepalived停止查看是否还能正常提供服务

[root@lb-01 sbin]# ./nginx -s stop

[root@lb-01 sbin]# systemctl stop keepalived.service

此时虚拟VIP已经不再master上了

再访问http://192.168.96.138可以发现

130nginx和keepalived挂了也不影响服务

此时查看131backup机器VIP情况,虚拟VIP 已经在131机器上

实现nginx+keepalived双主模式设置:

需要更改下keepalived配置文件即可,增加新的VIP192.168.96.139配置到131机器上在原配置文件后添加新配置:

130的keepalived配置文件内容如下

vrrp_instance VI_2 {

    state BACKUP

    interface eno16777736

    virtual_router_id 52

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.96.139

    }

}

131的keepalived配置文件内容如下

vrrp_instance VI_2 {

    state MASTER

    interface eno16777736

    virtual_router_id 52

    priority 100

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 1111

    }

    virtual_ipaddress {

        192.168.96.139

    }

}

分别启动2台lb上nginx和keepalived服务

[root@lb-01 sbin]# ./nginx

[root@lb-01 sbin]# systemctl start keepalived.service

 

下面的查看ip及模拟故障和上面相似,不过原文档显示每个服务器分配一个VIP。测试刚开始是,但是一会儿会显示都获取了所分配两个VIP

 

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 0 ];then

/usr/local/nginx/sbin/nginx

sleep 2

if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then

        pkill keepalived

fi

fi

如果是主备模式备机设置上会有个检测主挂了发邮件的设置

#节点变为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 = "正文\n 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.\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();

    }

    $smtp->quit;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值