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 联系我,非常感谢。

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

  • 相关阅读:
    基于摸板匹配的目標跟蹤算法
    spoj 2713 Can you answer these queries IV
    zoj 3633 Alice's present
    hdu 3642 Get The Treasury
    poj 1195 Mobile phones
    poj 2760 End of Windless Days
    zoj 3540 Adding New Machine
    spoj 1716 Can you answer these queries III
    spoj 1043 Can you answer these queries I
    spoj 2916 Can you answer these queries V
  • 原文地址:https://www.cnblogs.com/zhangweizhong/p/13158656.html
Copyright © 2011-2022 走看看