360SDN.COM

首页/Nginx/列表

Nginx+Keepalived实现简单的服务高可用

来源:  2019-04-26 17:54:40    评论:0点击:

一般情况下,如果我们做小型项目,前端用一个nginx做反向代理即可,大概是这样的


但是,作为互联网项目,纯2C的话必然需要做高可用,不仅后端的Server有N个,Nginx同样需要有N个,一主N备,当有一个服务器挂掉的时候,服务能瞬间切换到其他服务器,大概是这样的

下面就以上图为例,说明一下如何实现server的高可用。
1、准备

虚拟机两台,同样安装nginx,keepalived,最简单的安装方法yum -y install nginx,yum -y install keepalived。如果找不到安装到哪儿了,可以使用whereis nginx查看,这里不再赘述。网络划分如下
名称    IP    虚拟IP    操作系统
虚拟机1(VM1)    192.168.136.2    192.168.136.99    centos7.6
虚拟机2(VM2)    192.168.136.4    192.168.136.99    centos7.6
2、关闭防火墙,修改nginx首页,启动nginx

    关闭防火墙

    systemctl stop firewalld.service #临时关闭,重启失效

    systemctl disable firewalld.service  #禁止开机启动

    简单起见,我们认为每个nginx都是代理一个服务,只用nginx默认带的静态页作为测试,分别修改页面内容为"Welcome to 192.168.136.4"和“Welcome to 192.168.136.2”

    启动nginx

    systemctl start nginx

3、修改keepalived的配置文件

主配置如下(默认配置文件:/etc/keepalived/keepalived.conf):

    ! Configuration File for 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_skip_check_adv_addr

     #  vrrp_strict

     #  vrrp_garp_interval 0

     #  vrrp_gna_interval 0

    }

    vrrp_script chk_nginx {

            script "/etc/keepalived/nginx_check.sh"

            interval 2

            weight -20

    }

    vrrp_instance VI_1 {

        state MASTER # 标识为主服务

        interface ens33 #绑定虚拟机的IP

        virtual_router_id 51 # 虚拟路由id,和从机保持一致

        #mcast_src_ip 192.168.126.2  #本机ip

        priority 100 #权重,需要高于从机

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

        virtual_ipaddress {

            192.168.136.99 #/32 brd 255.255.255.0 dev ens33 label ens33:vip #虚拟IP地址

    #        192.168.200.17

    #        192.168.200.18

        }

    }

从机配置(默认配置文件:/etc/keepalived/keepalived.conf)

    ! Configuration File for 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 dreamer1

    #   vrrp_skip_check_adv_addr

    #   vrrp_strict

    #   vrrp_garp_interval 0

    #   vrrp_gna_interval 0

    }

    vrrp_script chk_nginx {

            script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径

            interval 2 ## 检测时间间隔

            weight -20 ## 如果条件成立,权重-20

    }


    vrrp_instance VI_1 {

        state BACKUP

        interface ens33

        virtual_router_id 51

        #mcast_src_ip 192.168.136.4 ## 本机 IP 地址

        priority 90

        advert_int 1

        authentication {

            auth_type PASS

            auth_pass 1111

        }

            track_script {

                    chk_nginx ## 执行 Nginx 监控的服务

            }

        virtual_ipaddress {

            192.168.136.99

            #192.168.200.17

            #192.168.200.18

        }

    }

3、编写监测心跳脚本

上面配置中可以看到有一个脚本文件:/etc/keepalived/nginx_check.sh
查看nginx是否启动,如果没启动则启动,如果启动不起来,停掉keepalived服务,此时心跳断掉,服务转向另一个nginx。

    #!/bin/bash

    counter=$(ps -C nginx --no-heading|wc -l)

    if [ "${counter}" = "0" ]; then

        /usr/sbin/nginx

        sleep 2

        counter=$(ps -C nginx --no-heading|wc -l)

        if [ "${counter}" = "0" ]; then

            /etc/init.d/keepalived stop

        fi

    fi

4、测试

    启动192.168.136.2上的nginx和keepalive

    启动192.168.136.4上的nginx和keepalive

    访问虚拟IP:http://192.168.136.99


    停掉192.168.136.2上的keepalive


    重新启动192.168.136.2上的keepalive,又会回到 Welcome to 192.168.136.2

    停掉192.168.136.2上的nginx,系统会自动调回Welcome to 192.168.136.4

就是这样。
为您推荐

友情链接 |九搜汽车网 |手机ok生活信息网|ok生活信息网|ok微生活
 Powered by www.360SDN.COM   京ICP备11022651号-4 © 2012-2016 版权