通过Keepalived实现NginxHA高可用

摘 要

Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。

概述

随着互联网井喷式发展,单节点服务已经不能满足并发需求,通常利用nginx反向代理来实现集群部署以此解决并发需求(nginx负载均衡实现)。此时虽然保证了应用的集群化和高容灾性,但nginx却单节点运行,这极大的为系统宕机埋下伏笔。为此我们必须来采用一主一备或一主N备的方式来保证nginx的运行,高可用(HA- High Availability)的解决方案很多,本文以Keepalived来进行讲解。

关于Keepalived

Keepalived是由C语言编写,目标是基于Linux为应用提供简单而又强大的负载均衡和高可用的服务。负载均衡是依赖于广泛使用的Linux虚拟服务器(IPVS)内核模块提供的第四层负载均衡。而高可用是通过VRRP协议实现。注:本文暂只针对高可用来讲解。

架构说明

通过Keepalived实现NginxHA高可用

安装Keepalived

  1. #下载keepalived
  2. wget http://www.keepalived.org/software/keepalived-1.2.7.tar.gz
  3. #解压keepalived
  4. ar zxvf keepalived-1.2.7.tar.gz
  5. #进入keepalived目录
  6. cd keepalived-1.2.7
  7. #配置并检查源码
  8. ./configure --prefix=/
  9. #编译
  10. make
  11. #安装
  12. make install

配置Keepalived

配置中的state MASTER决定了节点为主节点
priority决定了优先级,比如在有多个备用节点的时候,主节点故障后优先级值大的接管。
主节点的配置如下:

  1. #校验脚本
  2. vrrp_script chk_nginx {
  3. #  script "killall -0 nginx"
  4.     script "/etc/keepalived/check_nginx.sh"
  5.     interval 2
  6.     weight -5
  7.     fall 3
  8.     rise 2
  9. }
  10. #添加需要设置的ip
  11. vrrp_instance VI_1 {
  12.     state MASTER
  13.     interface eth0
  14.     virtual_router_id 51
  15. #自身机器所在ip
  16. mcast_src_ip    192.168.155.1
  17.     priority 100
  18.     advert_int 1
  19.     authentication {
  20.         auth_type PASS
  21.         auth_pass 1111
  22.     }
  23. #虚拟ip,对外公开
  24.     virtual_ipaddress {
  25.         192.168.155.12
  26.     }
  27. #执行校验函数
  28.  track_script {
  29.        chk_nginx
  30.     }
  31. }

校验脚本如下,意思是判断nginx进程是否存在,如果不存在则尝试启动。如果不能启动将退出keepalived服务,由其他服务器接管。接管的依据依靠priority 的值来决定,哪个节点值最大,则有哪个来接管。

  1. #!/bin/bash
  2. counter=$(ps -C nginx --no-heading|wc -l)
  3. if [ "${counter}" = "0" ]; then
  4.     /opt/nginx/sbin/nginx
  5.    sleep 2
  6.     counter=$(ps -C nginx --no-heading|wc -l)
  7.     if [ "${counter}" = "0" ]; then
  8.         /etc/init.d/keepalived stop
  9.     fi
  10. fi

配置完成后,将两个文件copy到其他keepalived节点。并将priority设置合理。这样我们的nginx高可用就已经完成啦... ...

 

avatar

评论已关闭!

目前评论:1   其中:访客  1   博主  0

    • avatar 小轩轩 0

      学到了