热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LVS+keepalived+Nginx实现负载均衡时前后端故障全自动化处理

最近帮朋友公司配了一下LVS,实现全自动化处理故障问题,基本环境如下VIP:192.168.101.100LVS1:192.168.101.103LVS2:192.168.101.104RS1:192.168.101.105RS2:192.168.101.108后端还有一些服务器IP就不一一写出来了首先各个服务器上配置
最近帮朋友公司配了一下LVS,实现全自动化处理故障问题,基本环境如下
VIP : 192.168.101.100
LVS1: 192.168.101.103
LVS2: 192.168.101.104
RS1: 192.168.101.105
RS2: 192.168.101.108

后端还有一些服务器IP就不一一写出来了


首先各个服务器上配置好各种需要的环境,所需要依赖包,然后在master 和 backup上装好keepalived 和 LVS,直接yum安装 .不启动LVS,启动keepalived就好,下面直接说配置 全部在keepalived上

[root@localhost shell]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_sync_group VGM {     ###定义一个vrrp组
group {
VI_1
}
notify_master "/data/shell/arp.sh"
notify_backup "/data/shell/arp.sh"
}
vrrp_script chk_nginx {    #### 定义脚本
script "/data/shell/check_nginx.sh"
interval 1
weight -2
}
vrrp_script chk_nginx2 {      #### 定义脚本
script "/data/shell/check_nginx2.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
    state MASTER    ###backup上配置相同,只需要改下相关权重等
    interface eth1
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {    #### 执行脚本检测
chk_nginx
chk_nginx2
}
    virtual_ipaddress {
        192.168.101.100
 }
}
virtual_server 192.168.101.100 80 {
    delay_loop 2
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
    real_server 192.168.101.105 80 {
       weight 3
        HTTP_GET {
        url {
        path /test.html
        digest 9a8acfd3c07a45099bcde1a97a9fb7c5
        }
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
}
}
 real_server 192.168.101.108 80 {
        weight 3
        HTTP_GET {
        url {
        path /test2.html
        digest 9649358e69985102d0da5ff240e1f2a4
        }
        connect_timeout 5
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80
}
}
}

[root@localhost shell]# cat /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_sync_group VGM {     ###定义一个vrrp组
group {
VI_1
}
notify_master "/data/shell/arp.sh"
notify_backup "/data/shell/arp.sh"
}
vrrp_script chk_nginx {    #### 定义脚本
script "/data/shell/check_nginx.sh"
interval 1
weight -2
}
vrrp_script chk_nginx2 {      #### 定义脚本
script "/data/shell/check_nginx2.sh"
interval 1
weight -2
}
vrrp_instance VI_1 {
    state MASTER    ###backup上配置相同,只需要改下相关权重等
    interface eth1
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
track_script {    #### 执行脚本检测
chk_nginx
chk_nginx2
}
    virtual_ipaddress {
        192.168.101.100  
}
}
virtual_server 192.168.101.100 80 {
    delay_loop 2
    lb_algo wrr
    lb_kind DR
    persistence_timeout 60
    protocol TCP
    real_server 192.168.101.105 80 {
       weight 3
    HTTP_GET {
        url {
        path /test.html
        digest 9a8acfd3c07a45099bcde1a97a9fb7c5
        }
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
}
}
real_server 192.168.101.108 80 {
    weight 3
    HTTP_GET {
        url {
        path /test2.html
        digest 9649358e69985102d0da5ff240e1f2a4
        }
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 3
    connect_port 80
}
}    
}


如果你前端开启了防火墙或者selinux,请关闭防火墙测试或者selinux测试,否则你会出现两个master,哈哈,两个vip地址同时出现,或者起不来服务,如果不关闭iptables,请加入以下策略

###允许80端口对外提供服务
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
###DR模式,当用户请求LVS-DR VIP时,只有DR响应客户端的ARP广播包,允许vrrp虚拟路由器冗余协议-A   INPUT   -d   224.0.0.0/8   -j   ACCEPT
-A   INPUT    -p   vrrp   -j   ACCEPT

###允许80端口对外提供服务  
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT  
###DR模式,当用户请求LVS-DR VIP时,只有DR响应客户端的ARP广播包,允许vrrp虚拟路由器冗余协议-A   INPUT   -d   224.0.0.0/8   -j   ACCEPT  
-A   INPUT    -p   vrrp   -j   ACCEPT

下面是几个在master 和backup上执行的高效脚本,检测后端nginx的
[root@localhost shell]# cat arp.sh
#!/bin/bash
VIP=192.168.101.100
GATEWAY=192.168.101.1
/sbin/arping -I eth1 -c 5 -s $VIP $GATEWAY &>/dev/null
########################################################
[root@localhost shell]# cat check_nginx.sh
!/bin/bash
url="http://192.168.101.105"      ####realserver web地址检测
status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}')
if [ "$status" != "200" ]; then
/data/shell/arp.sh start
fi
[root@localhost shell]# cat check_nginx2.sh
!/bin/bash
url="http://192.168.101.108"      ####realserver web地址检测
status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}')
if [ "$status" != "200" ]; then
/data/shell/arp.sh start
fi

[root@localhost shell]# cat arp.sh
#!/bin/bash
VIP=192.168.101.100
GATEWAY=192.168.101.1
/sbin/arping -I eth1 -c 5 -s $VIP $GATEWAY &>/dev/null
########################################################
[root@localhost shell]# cat check_nginx.sh
!/bin/bash
url="http://192.168.101.105"      ####realserver web地址检测
status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}')
if [ "$status" != "200" ]; then
/data/shell/arp.sh start
fi
[root@localhost shell]# cat check_nginx2.sh
!/bin/bash
url="http://192.168.101.108"      ####realserver web地址检测
status=$(/usr/bin/curl -s --head "$url" | awk '/HTTP/ {print $2}')
if [ "$status" != "200" ]; then
/data/shell/arp.sh start
fi

 arp缓存清理shell  {arp.sh}
#!/bin/bash
VIP=192.168.101.100
GATEWAY=192.168.101.1
/sbin/arping -I eth1 -c 5 -s 192.168.101.100 192.168.101.1 &>/dev/null

#!/bin/bash
VIP=192.168.101.100
GATEWAY=192.168.101.1
/sbin/arping -I eth1 -c 5 -s 192.168.101.100 192.168.101.1 &>/dev/null

 这个配置会实现 无论前端调度或者后端nginx服务任意一台中断都会在最短的时间响应到正常的请求,经测试,lvs前端两台故障几乎是0秒切换,后端nginx的web服务故障也就是几秒钟的自动切换,如果是DNS解析,请做好解析定时缓存清理

推荐阅读
  • 本文介绍如何在现有网络中部署基于Linux系统的透明防火墙(网桥模式),以实现灵活的时间段控制、流量限制等功能。通过详细的步骤和配置说明,确保内部网络的安全性和稳定性。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 阿里云ecs怎么配置php环境,阿里云ecs配置选择 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 深入解析Nginx中的Location指令及其属性
    本文将详细探讨Nginx配置文件中关键的location指令,包括其三种匹配方式(精准匹配、普通匹配和正则匹配),以及如何在实际应用中灵活运用这些匹配规则。此外,还将介绍location下的重要子元素如root、alias和proxy_pass,并解释相关参数的使用方法。 ... [详细]
  • 本文详细探讨了 Django 的 ORM(对象关系映射)机制,重点介绍了其如何通过 Python 元类技术实现数据库表与 Python 类的映射。此外,文章还分析了 Django 中各种字段类型的继承结构及其与数据库数据类型的对应关系。 ... [详细]
  • Nginx 反向代理与负载均衡实验
    本实验旨在通过配置 Nginx 实现反向代理和负载均衡,确保从北京本地代理服务器访问上海的 Web 服务器时,能够依次显示红、黄、绿三种颜色页面以验证负载均衡效果。 ... [详细]
author-avatar
huangxianghuo127
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有