zoukankan      html  css  js  c++  java
  • Nginx总结(十)实现Nginx负载均衡高可用

     之前讲了Nginx 如何实现负载均衡,以及如何实现动静分离。但是还确少Nginx 高可用的部分。因为Nginx 处于整个系统非常重要的位置,Nginx的高可用影响到整个系统的稳定性。如果nginx服务器宕机后端web服务将无法提供服务,影响严重。所以,接下来就来介绍Nginx + keepalived 实现高可用的方案。Nginx 其他系列文章:https://www.cnblogs.com/zhangweizhong/category/1529997.html

    一、什么是负载均衡高可用

    nginx作为负载均衡器,所有请求都到了nginx,可见nginx处于非常重点的位置,如果nginx服务器宕机后端web服务将无法提供服务,影响严重。

    为了屏蔽负载均衡服务器的宕机,需要建立一个备份机。主服务器和备份机上都运行高可用(High Availability)监控程序,通过传送诸如“I am alive”这样的信息来监控对方的运行状况。当备份机不能在一定的时间内收到这样的信息时,它就接管主服务器的服务IP并继续提供负载均衡服务;当备份管理器又从主管理器收到“I am alive”这样的信息时,它就释放服务IP地址,这样的主服务器就开始再次提供负载均衡服务。

    二、Nginx高可用方案

    目前,比较流行的实现Nginx高可用方案就是:keepalived+nginx实现主备方案。

    1、什么是keepalived

    keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。

    Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。

    2、keepalived工作原理

    keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

    虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有一个对外提供服务的vip(VIP = Virtual IP Address,虚拟IP地址,该路由器所在局域网内其他机器的默认路由为该vip),master会发组播,当backup收不到VRRP包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master。这样的话就可以保证路由器的高可用了。

    keepalived主要有三个模块,分别是core、check和VRRP。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。VRRP模块是来实现VRRP协议的。

    3、keepalived+nginx实现主备过程

    下图是keepalived + nginx 实现主备的过程。

     

    从上图可以看到,主Nginx健康时,系统所有的请求通过主Nginx 转发到Tomcat服务器集群。当主Nginx 宕机后,会立马切换到备Nginx ,由备Nginx 提供转发服务。这样就保证系统的正常运行。

    三、环境准备

    1、两天Nginx服务器和两台web服务器

    两台nginx,一主一备:192.168.101.3和192.168.101.4

    两台tomcat服务器:192.168.101.5、192.168.101.6

    2、安装keepalived

    分别在主备nginx上安装keepalived,这里就讲解keepalived的安装了。

    3、配置虚拟IP(vip:192.168.101.100)

    四、配置Nginx高可用

    1、配置主nginx

    修改主nginx下/etc/keepalived/keepalived.conf文件,配置主Nginx。

    #全局配置
    global_defs {
       notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
         XXX@XXX.com
       }
       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.101.100       #可以多个虚拟IP,换行即可
        }
    }

    2、配置备nginx

    修改备nginx下/etc/keepalived/keepalived.conf文件,配置备Nginx

    配置备nginx时需要注意:需要修改state为BACKUP , priority比MASTER低,virtual_router_id和master的值一致

    #全局配置
    global_defs {
       notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
        XXX@XXX.com
       }
       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.101.100       #可以多个虚拟IP,换行即可
        }
    }

    3、测试

    1、主备nginx都启动keepalived及nginx。

    service keepalived start
    
    ./nginx

    2、启动之后,主Nginx正常工作,分别查看主nginx和 备nginx的eth0设置,vip(192.168.101.100)绑定在主nginx的eth0上。

    访问http://192.168.101.100,可以访问。

    3、将主nginx的keepalived停止或将主nginx关机(相当于模拟宕机),再次查看主nginx和 备nginx的eth0设置,vip(192.168.101.100)已经漂移到备nginx 上。

    再次访问http://192.168.101.100,发现系统依然可以访问。

    最后

    以上,keepalived+nginx 系统高可用的解决方案介绍完了,看上去复杂,其实配置还是比较简单的。


    作者:章为忠
    如有问题,可以微信:18618243664 联系我,非常感谢。

    关注我的微信公众号,获取相关的 源代码及视频资料

  • 相关阅读:
    C#微信开发之旅(二):基础类之HttpClientHelper(更新:SSL安全策略)
    讨论区:一个数学方差题目
    python 打包exe注意的问题
    AIX学习笔记(更新中)
    哈工大游戏设计复习题
    SQL Sever 2012 如何建立数据库连接
    我的所有代码
    vc如何编译链接opengl库
    2013年哈工大软件学院 算法设计与分析 期末考试
    哈工大算法分析作业
  • 原文地址:https://www.cnblogs.com/zhangweizhong/p/13158656.html
Copyright © 2011-2022 走看看