avatar

31.Nginx学习之路之使用keepalived+Nginx搭建高可用集群

在上一篇,我们说到如何使用Nginx配置四层负载均衡。配置不难,容易上手。今天我们来学学怎么搭建Keepalived+Nginx实现高可用架构。注意,这里只讲如何搭建,keepalived知识不会过多讲述。环境准备如下:
  1. 环境准备
    ①. 虚拟机两台(centerOS 7)。ip依次为:192.168.25.201192.168.25.202
    ②. keepalived版本:keepalived-2.0.0
    ③. Nginx版本:nginx-1.16.0
下面开始进入正题~

0x01 Keepalived+Nginx架构图

  1. 我们来说说上图出现的一些术语
    • VIP:虚拟ip。是通过keepalived配置虚拟出来的一个ip。也可以叫做浮动ip。
    • keepalived:是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换的软件。
      • Keepalived的作用
        • 检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,并且可配置发送邮件给相关运维人员,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。
    • Nginx:一个高性能的HTTP和反向代理web服务器
  2. 架构说明:
    • 用户通过访问我们虚拟出来的ip地址,请求到我们服务器。然后keepalived会转发该请求到对应的Nginx上。然后Nginx通过upstream配置上游服务器,轮询到每台真实服务器上面。
    • 如果主keepalived出现问题,keepalived会自动切换备keepalived,从而达到高可用的目的。

0x02 如何搭建

  1. 在两台机上安装一些依赖库。

    • yum install -y libnl*
    • yum install -y libnfnetlink-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh
  2. 下载keepalived的安装包
    wget https://www.keepalived.org/software/keepalived-2.0.0.tar.gz

    • 如果出现-bash: wget: 未找到命令.则执行下:yum install -y wget
  3. 解压keepalived的安装包
    tar -zxf keepalived-2.0.0.tar.gz

  4. 进入keepalived-2.0.0目录,执行./configure

  5. 等命令执行完后,再执行make && make install.

    • 如果提示-bash: make: 未找到命令.则执行下yum install -y make
  6. 执行完后,输入whereis keepalived查找下keealived的安装目录。

  7. 到此,keepalived已经安装完毕。

  8. 接下来,我们配置下keepalived。配置文件在/usr/local/etc/keepalived/keepalived.conf。主备的配置我都贴出来。

    • master
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      !Configuration File for keepalived
      global_defs {
      router_id Nginx_01 #指定节点名
      }

      vrrp_instance VI_1 {
      state MASTER #指定状态。取值有MASTER BACKUP
      interface ens33 #绑定VIP的网卡名。可以使用ip a查询
      virtual_router_id 51 #虚拟路由的ID号,两个节点设置必须一样,可选IP最后一段使用,相同的VRID为一个组,他将决定多播的MAC地址
      priority 100 #节点优先级,值范围0~254,MASTER要比BACKUP高
      advert_int 1 # 组播信息发送时间间隔,两个节点必须设置一样,默认为1秒
      authentication { #配置授权认证信息,主备要一致
      auth_type PASS
      auth_pass 1111
      }
      virtual_ipaddress { #配置要虚拟的ip。
      192.168.25.100/24 #24是指定子网掩码
      }
      }

    track_script {
    chk_nginx # nginx存活状态检测脚本
    }

     keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
     
     ##如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。如果脚本执行结果非0,
     ##并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。
     vrrp_script chk_nginx {
            script "/usr/local/etc/keepalived/check_nginx.sh"
            interval 2  #每2秒检测一次nginx的运行状态
            weight -20  #失败一次,将自己的优先级-20
     }
     
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33

    - backup
    ```shell
    ! Configuration File for keepalived

    global_defs {
    router_id Nginx_02 #指定节点名
    }

    vrrp_instance VI_1 {
    state BACKUP #指定状态。备机状态为BACKUP
    interface ens33
    virtual_router_id 51
    priority 99
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress {
    192.168.25.100/24
    }
    }

    track_script {
    chk_nginx
    }

    vrrp_script chk_nginx {
    script "/usr/local/etc/keepalived/check_nginx.sh"
    interval 2
    weight -20
    }
  9. check_nginx.sh脚本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    A=`ps -C nginx --no-header | wc -l`
    if [ $A -eq 0 ];then
    /opt/nginx/sbin/nginx #尝试重新启动nginx
    sleep 2 #睡眠2秒
    if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
    killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
    fi
    fi
    • 注意修改权限为755
  10. 在两台机上安装Nginx(这里我就不多说,详见前面几篇)

  11. 配置Nginx

    • 我这里就不启动tomcat了。直接以Nginx自带的静态页面做演示。我在主keepalived机上修改Nginx的静态页面标题为Welcome to Master Nginx,修改备keepalived机上的Nginx静态页面为Welcome to Backup Nginx。直接访问效果如下:


    • 如果访问不了,则需要关闭下防火墙:
      systemctl stop firewalld.service
  12. 启动keepalived

    • 因为我这里没有把keepalived配置为服务,所以我们需要直接使用如下命令启动。我这里的keepalived执行文件路径为/usr/local/sbin/keepalived,配置文件路径为:/usr/local/etc/keepalived/keepalived.conf.所以最终的命令为:
      • cd /usr/local/
      • sbin/keepalived -f /usr/local/etc/keepalived/keepalived.conf
        • -f表示指定keepalived配置文件路径。
  13. 启动keepalived后,我们在主keepalived上执行ip a,查看下是否有虚拟ip。结果如下:



      • 我们可以发现,在备机上没有虚拟ip192.168.25.100.那么如果我们把主上面的keepalived停掉会怎样呢?答案是虚拟ip会漂移到备机上。效果如下:
    • 主挂了,备机ip a的效果。

  14. 启动nginx

0x03 效果

  1. 到此,我们keepalived+Nginx已经搭建好了,我们访问下虚拟ip192.168.25.100看看。效果如下:
  2. 我们把主keepalived(ip尾数为201)的keepalived kill掉。看是否可以继续访问。
    • 发现会直接漂移到备机上。这说明我们已经搭建成功了。也达到了预期的效果

0x04 总结

  1. 通过这篇,我们动手搭建了keepalived+Nginx高可用架构,虽然过程磕磕碰碰,但最终预期效果还是达到了。所以,坚持才是胜利~~
  2. 参考文章:

评论