首页 > 代码库 > nginx keepalived 配置

nginx keepalived 配置

前言:

对于大型web项目来说,必不可少的就是高可用。

那随着公司业务的发展,虽然用nginx做负载均衡仍可以支撑日均百万PV的访问,且运行两年之久未出现单点故障,但仍要考虑避免单点故障导致的业务中断。


keepalived 简介:

keepalived 项目主要的目标是为linux系统和linux基础设施提供负责均衡和高可用。

负载均衡架构依赖于IPVS内核模块提供四层负载均衡,keepalived实现了动态检查和基于负载池的管理服务。另一方面,高可用性是通过VRRP协议实现。简单的框架可以单独或一起提供弹性基础设施。


keepalived配置文件:

keepalived.conf文件由三个配置部分组成:

  • Globals configurations   全局配置

  • VRRP configuration    VRRP配置

  • LVS configuration    LVS配置


约定:

此文不做nginx安装介绍,有关nginx安装可参考前面的文章

系统:采用centos 6.8 最小化

源文件目录:/usr/local/src

master_ip:192.168.1.10

backup_ip:192.168.1.11

vip:192.168.1.20

keepalived官网http://www.keepalived.org/

keepalived master列出的配置项相对要多,可根据情况选择使用。 

分别在主备nginx安装配置keepalived


准备:

下载keepalived源码包:

wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz

安装开发工具:

yum install gcc-c++ openssl-devel


iptables 配置:

关闭iptables,或允许主备互通

iptables -I INPUT -i eth1 -s 192.168.1.11 -j ACCEPT
iptables -I INPUT -i eth1 -s 192.168.1.10 -j ACCEPT


安装keepalived:

解压:

tar zxf keepalived-1.3.2.tar.gz

配置编译安装:

cd keepalived-1.3.2
./configure
make
make install

创建配置文件和服务:

cp -r keepalived/etc/keepalived/ /etc/
cp keepalived/etc/init.d/keepalived.rh.init /etc/init.d/keepalived
cp keepalived/etc/sysconfig/keepalived /etc/sysconfig/


配置keepalived:

master keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@firewall.loc    #接收通知的邮件地址
   }
   notification_email_from Alexandre.Cassen@firewall.loc    #发送邮件通知的地址
   smtp_server 192.168.200.1    #发送邮件的SMTP服务地址,可是ip或域名.可选端口号 (默认25)
   smtp_connect_timeout 30    #smtp连接超时时间秒
   router_id LVS_DEVEL    #主机标识,用于邮件通知
   vrrp_skip_check_adv_addr    
   #vrrp_strict    #严格执行VRRP协议规范,此模式不支持节点单播
   vrrp_garp_interval 0
   vrrp_gna_interval 0
   script_user keepalived_script       # 指定运行脚本的用户名和组。默认使用用户的默认组。
                                           # 如未指定,默认为keepalived_script 用户,如无此用户,则使用root
   enable_script_security                 #如过路径为非root可写,不要配置脚本为root用户执行。
}

vrrp_script chk_nginx_service {    #VRRP 脚本声明
    script "/usr/local/keepalived/nginx-ha-check"    #周期性执行的脚本
    interval 3    #运行脚本的间隔时间,秒
    weight -50    #权重,调整优先级(-255-255)。priority值减去此值要小于备服务的priority值
                            #否则备服务选举为主服务时会失败。
    fall 3              # 检测几次失败才为失败,整数
    rise 2              # 检测几次状态为正常的,才确认正常,整数
    user keepalived_script    # 执行脚本的用户或组
}

vrrp_instance VI_1 {    #VRRP 实例声明
    state MASTER    #实例默认状态,MASTER|BACKUP
    interface eth0    #绑定的接口
    #mcast_src_ip 192.168.1.10        # VRRP 报文使用的源ip地址
    unicast_src_ip 192.168.1.10        # VRRP 报文使用的源ip地址 (alias to mcast_src_ip)
    unicast_peer {            # 不使用VRRP多播,既用单播
      192.168.1.11            #  备节点ip,可以是多个
    virtual_router_id 51    #VRRP 路由标识(-1-255),主备相同
    priority 100    #优先数,-1-255,主服务要大于备服务
    advert_int 1    #VRRP 广告间隔
    authentication {    #主备认证
        auth_type PASS    #认证方式
        auth_pass 1111    #主备需统一
    }
    virtual_ipaddress {    #VRRP 地址,可有多个
        192.168.1.20
    }
    track_script {    #脚本监控状态
        chk_nginx_service    #可加权重,但会覆盖声明的脚本权重值。chk_nginx_service weight -20
    }
}


backup keepalived.conf

! Configuration File for keepalived

global_defs {
   notification_email {
     acassen@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_service {
    script "/usr/local/keepalived/nginx-ha-check"
    interval 3
    weight -10
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.1.20
    }
    track_script {
        chk_nginx_service
    }
}


nginx-ha-check 脚本

chmod +x nginx-ha-check
#!/bin/sh

PATH=/bin:/sbin:/usr/bin:/usr/sbin

STATEFILE=/var/run/nginx-ha-keepalived.state

if [ -s "$STATEFILE" ]; then
    . "$STATEFILE"
    case "$STATE" in
        "BACKUP"|"MASTER"|"FAULT")
                service nginx status
                exit $?
                ;;
        *|"")
                logger -t nginx-ha-keepalived "Unknown state: ‘$STATE‘"
                exit 1
                ;;
    esac
fi

service nginx status
exit $?


启动服务:

service keepalived start


验证:

主备服务安装配置完成后,可通过浏览器方位192.168.1.20地址,同时停掉主nginx服务,再次访问192.168.1.20查看页面

nginx主备服务需要能够确认唯一标识的页面,如在index.html中分别表明主备服务。


同时可观察/var/log/messages 日志信息





本文出自 “morrowind” 博客,请务必保留此出处http://morrowind.blog.51cto.com/1181631/1879447

nginx keepalived 配置