设为首页 收藏本站
查看: 1394|回复: 1

[经验分享] nginx keepalived 配置

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-12-5 09:04:22 | 显示全部楼层 |阅读模式
前言:
对于大型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源码包:
1
wget http://www.keepalived.org/software/keepalived-1.3.2.tar.gz



安装开发工具:
1
yum install gcc-c++ openssl-devel




iptables 配置:
关闭iptables,或允许主备互通
1
iptables -I INPUT -i eth1 -s 192.168.1.11 -j ACCEPT



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




安装keepalived:
解压:
1
tar zxf keepalived-1.3.2.tar.gz



配置编译安装:
1
2
3
4
cd keepalived-1.3.2
./configure
make
make install



创建配置文件和服务:
1
2
3
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
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
! 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
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
34
35
36
37
38
39
! 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 脚本
1
chmod +x nginx-ha-check



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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 $?




启动服务:
1
service keepalived start




验证:
主备服务安装配置完成后,可通过浏览器方位192.168.1.20地址,同时停掉主nginx服务,再次访问192.168.1.20查看页面
nginx主备服务需要能够确认唯一标识的页面,如在index.html中分别表明主备服务。

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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-309801-1-1.html 上篇帖子: 用goaccess每天自动分析nginx日志 下篇帖子: Nginx安装过程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表