nginx+keepalived负载均衡之高可用

nginx为什么要用keepalived?
一家公司只用一台nginx服务器(master)是不够用的,通常来说还需要一台备胎(backup),当master出现宕机,backup就会启动替代master,那么backup是怎么知道master宕机了呢?keepalived就能解决这个问题,如下图:

这里写图片描述

这里写图片描述

什么是keepalived?

keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障,keepalived是VRRP的完美实现。VRRP又是什么及keepalived的更加详细介绍可以下载:Keepalived权威指南中文.pdf


基本服务器宕机的主从切换配置步骤:

1、准备两台nginx服务器(一台为主nginx,一台为备nginx),分别安装keepalived

# yum –y install keepalived

2、修改主nginx下/etc/keepalived/keepalived.conf文件

# vi /etc/keepalived/keepalived.conf

主nginx下的keepalived.conf文件里面的意义及配置如下

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  
     XXX@XXX.com       #指定keepalived在发生切换时需要发送email到的对象,一行一个
   }
   notification_email_from XXX@XXX.com  #指定发件人
   #smtp_server XXX.smtp.com       #指定smtp服务器地址
   #smtp_connect_timeout 30        #指定smtp连接超时时间
   router_id LVS_DEVEL             #运行keepalived机器的一个标识
}

vrrp_instance VI_1 { 
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.17.10       #可以多个虚拟IP,换行即可
    }
}

3、修改备nginx下/etc/keepalived/keepalived.conf文件

# vi /etc/keepalived/keepalived.conf

配置备nginx时需要注意:需要修改state为BACKUP , priority比主nginx低,virtual_router_id和主nginx的值一致,具体配置如下:

! Configuration File for keepalived

#全局配置
global_defs {
   notification_email {  
    XXX@XXX.com       #指定keepalived在发生切换时需要发送email到的对象,一行一个
   }
   notification_email_from  XXX@XXX.com         #指定发件人
   #smtp_server XXX.smtp.com       #指定smtp服务器地址
   #smtp_connect_timeout 30        #指定smtp连接超时时间
   router_id LVS_DEVEL             #运行keepalived机器的一个标识
}

vrrp_instance VI_1 { 
    state BACKUP           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 99            #MASTER权重要高于BACKUP 比如BACKUP为99  
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.17.10       #可以多个虚拟IP,换行即可
    }
}

此时如果主机宕机则备机会顶替主机获得虚拟ip


基于nginx进程死掉的主从切换配置

keepalived是通过检测keepalived进程是否存在判断服务器是否宕机,如果keepalived进程在但是nginx进程不在了那么keepalived是不会做主备切换,所以我们需要写个脚本来监控nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉。

1、在主nginx上需要编写nginx进程检测脚本(check_nginx.sh),判断nginx进程是否存在,如果nginx不存在就将keepalived进程杀掉,check_nginx.sh内容如下:

#!/bin/bash
# 如果进程中没有nginx则将keepalived进程kill掉
A=`ps -C nginx --no-header |wc -l`      ## 查看是否有 nginx进程 把值赋给变量A 
if [ $A -eq 0 ];then                    ## 如果没有进程值得为 零
       service keepalived stop          ## 则结束 keepalived 进程
fi

2、将check_nginx.sh拷贝至/etc/keepalived下

# cp check_nginx.sh /etc/keepalived

3、注意修改/etc/keepalived/check_nginx.sh的可执行权限

# chmod 755 /etc/keepalived/check_nginx.sh

4、修改主nginx的keepalived.conf,添加脚本定义检测

# vi /etc/keepalived/keepalived.conf

修改内容如下,注意check_nginx配置:

#全局配置
global_defs {
   notification_email {  
     XXX@XXX.com    #指定keepalived在发生切换时需要发送email到的对象,一行一个
   }
   notification_email_from XXX@XXX.com  #指定发件人
   #smtp_server XXX.smtp.com            #指定smtp服务器地址
   #smtp_connect_timeout 30             #指定smtp连接超时时间
   router_id LVS_DEVEL                  #运行keepalived机器的一个标识
}
vrrp_script check_nginx {
    script "/etc/keepalived/check_nginx.sh"         ##监控脚本
    interval 2                                      ##时间间隔,2秒
    weight 2                                        ##权重
}
vrrp_instance VI_1 {
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth0         #设置实例绑定的网卡
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
   track_script {
        check_nginx        #监控脚本
   }
    virtual_ipaddress {    #设置vip
        192.168.17.10      #可以多个虚拟IP,换行即可
    }

}

5、修改后重启keepalived

# service keepalived restart

测试
1、依次启动两个tomcat=>启动两个nginx=>启动两个keepalived,查看主机上是否有虚拟ip,比如:192.168.17.10
2、通过虚拟ip访问nignx,看页面是不是轮询两个tomcat
3、将主机的nginx进程kill掉,看看vip是不是切换到备机器上了
4、再次访问虚拟ip是不是还能轮询访问tomcat

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值