• Nginx (三) 使用Keepalived搭建高可用服务


    Nginx可以实现高并发反向代理,实现负载均衡,但是有个问题就是Nginx是单点的。如果Nginx故障,则整个服务将会处于不可用状态。所以我们就需要想办法让nginx高可用,即使一个Nginx宕机,还可以有其他的Nginx来支持服务。现在我们通过Keepalived的就可以实现多台Nginx作为主备机,当主机宕机时,可以让备机切换成主机继续提供服务,对整个用户服务几乎没有影响。

    1. Keepalived介绍

    Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。

    2. keepalived 安装(同Nginx安装类似)

          a. 下载安装包:

           http://www.keepalived.org/download.html

          b. 解压 keepalived-1.2.18.tar.gz(我下载到Windows下,使用ftp上传到linux虚拟机上,可以直接在linux上使用wget url 进行下载),解压到/usr/local目录下

               tar -zxvf keepalived-1.2.18.tar.gz -C /usr/local/  

          c. 安装依赖包

        yum -y install openssl,openssl-devel

          d. 检查环境,设置安装目录

        cd keepalived-1.2.18/ && ./configure --prefix=/usr/local/keepalived

             

        如上说明环境检查通过。

          e.  安装: make && make install

         

    3. 将安装的keepalived配置成服务,并且开机启动:

      a. 因为没有使用keepalived的默认安装路径(默认路径:/usr/local),安装完成之后,需要做一些修改工作,首先创建文件夹,将keepalived配置文件进行复制:

        mkdir /etc/keepalived

        cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

      b. 然后复制keepalived脚本文件:

        cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/

        cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/

        ln -s /usr/local/sbin/keepalived /usr/sbin/

        ln -s /usr/local/keepalived/sbin/keepalived /sbin/

          c. 可以设置开机启动:

        chkconfig keepalived on;

    到此我们安装完毕,开机则keepalived就已经启动!

    4. 配置主备机keepalived配置文件:keepalived.conf

     

       a. master配置文件如下:

    ! Configuration File for keepalived
    
    global_defs {
        router_id aries114 ##真实主机名或者ip
    }
    
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh" ##要执行的检查脚本
        interval 2 ##keepalived多久执行一次
        weight -20 ##权重-20
    }
    
    vrrp_instance VI_1 {
        state MASTER  ##主备机配置
        interface eth0  ##默认使用网卡
        virtual_router_id 88  ##虚拟id号,主备机配置一致
        mcast_src_ip 192.168.137.114 ##真实主机ip
        Nopreempt  ##非抢占式
        priority 100  ##权重优先级
        advert_int 1  ##组播信息发送间隔,俩个节点必须配置一致,默认1s
    
        authentication {
            auth_type PASS
            auth_pass 1111 ##验证密码,主备机一致
        }
    
        track_script {
            chk_nginx
        }
    
        virtual_ipaddress {
            192.168.137.110 ##虚拟ip(vip)可以配置多个
        }
    }

      b. backup配置文件:

    ! Configuration File for keepalived
    
    global_defs {
        router_id aries111
    }
    
    vrrp_script chk_nginx {
        script "/etc/keepalived/nginx_check.sh"
        interval 2
        weight -20
    }
    
    vrrp_instance VI_1 {
        state BACKUP
        interface eth0
        virtual_router_id 88
        mcast_src_ip 192.168.137.111
        priority 90
        advert_int 1
    
        authentication {
            auth_type PASS
            auth_pass 1111
        }
    
        track_script {
            chk_nginx
        }
    
        virtual_ipaddress {
            192.168.137.110
        }
    }

    不同点已用红色标出: 

      router_id 主机名或者ip

      mcast_src_ip 真实主机ip

      state 表示主备机master表示主BACKUP表示备,两个也可以都设置成backup,则两个抢占主机服务,一个宕机另一个就做为主机。

      virtual_ipaddress 虚拟出来的主机ip , 可配置多个;

      script "/etc/keepalived/nginx_check.sh" 这个是keepalived要执行的检查Nginx服务是否正常的脚本,需要我们去编写。

     c. 编写检查脚本,命名nginx_check.sh,然后置于"/etc/keepalived/"目录下 

    #!/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
            killall keepalived
        fi
    fi

      以上脚本的作用是,检查是否有nginx服务进程,如果有则执行结束不做处理;如果没有,则启动Nginx服务,间隔两秒钟再去检查是否有Nginx服务,如果没有就杀死此keepalived进程,如果有

    则不做处理。

      到此就通过keepalived配置完了Nginx的高可用服务。

    使用 ip a 查看主节点则有一个虚拟IP:

    客户机访问: 192.168.137.110 此时 192.168.137.114 提供服务;如果让192.168.137.114宕机,则vip则会浮动到备机 192.168.137.111上,有192.168.137.111提供服务。

    如下是一个访问模型图: 

                    

     参考材料:

      http://blog.csdn.net/hechurui/article/details/51065467

      白鹤翔老师的Nginx教学视频。

         

          

     
     
  • 相关阅读:
    连接APB1和APB2的设备有哪些
    STM32串口配置步骤
    gcc -o test test.c编译报错
    EmBitz1.11中将左边的目录弄出来
    c51
    c51跑马灯
    51 单片机 跑马灯2
    51 单片机 跑马灯
    spring注解注入:<context:component-scan>以及其中的context:include-filter>和 <context:exclude-filter>的是干什么的?
    Cookie和Session的作用和工作原理
  • 原文地址:https://www.cnblogs.com/qq-361807535/p/6753312.html
Copyright © 2020-2023  润新知