一次故障记录keepalived配置疏忽导致的故障

author author     2022-08-08     724

关键词:

负载均衡keepalived+lvs

负载nginx

应用tomcat

nginx负载通过公网,每一台nginx都负载了多聊链路到后端应用,突然部分客户无法访问业务,负载均衡没有问题,部分nginx服务器到后端应用超时,nginx日志中报出错误;但是keepalived配置为

TCP_CHECK {
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
            connect_port 8080
            bindto <ip>  
          }

检测是nginx服务是否异常,并未考虑到nginx到应用可能出现无法连接情况,所以导致keepalived没有将故障nginx踢出集群;立即手动将故障机nginx停掉,使keepalived将故障nginx踢出集群。后期修改keepalived配置文件将TCP_CHECK修改为

HTTP_GET {
    url{
         path /
         status_code 200
        }

通过url返回值,判断该链路是否正常,如果出现异常,keepalived自动将故障机踢出集群。



1、keepalived原理

keepalived可提供vrrp以及health-check功能,可以只用它提供双机浮动的vip(vrrp虚拟路由功能),这样可以简单实现一个双机热备高可用功能。

keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web 服务器的状态。 Layer3,4&5工作在IP/TCP协议栈的IP层,TCP层,及应用层,原理分别如下:

   Layer3:Keepalived使用Layer3的方式工作式时,Keepalived会定期向服务器群中的服务器

   发送一个ICMP的数据包(既我们平时用的Ping程序),如果发现某台服务的IP地址没有激活,Keepalived便报告这台服务器失效,并将它从服务器群中剔除,这种情况的典型例子是某台服务器被非法关机。Layer3的方式是以服务器的IP地址是否有效作为服务器工作正常与否的标准。在本文中将采用这种方式。

   Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的状态来决定服务器工作正常与否。如web server的服务端口一般是80,如果Keepalived检测到80端口没有启动,则Keepalived将把这台服务器从服务器群中剔除。

   Layer5:Layer5就是工作在具体的应用层了,比Layer3,Layer4要复杂一点,在网络上占用的带宽也要大一些。Keepalived将根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。

 vip即虚拟ip,是附在主机网卡上的,即对主机网卡进行虚拟,此IP仍然是占用了此网段的某个IP。


2、配置文件

global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到的对象,一行一个
    [email protected]
   }
   notification_email_from [email protected] #指定发件人
   smtp_server localhost #指定smtp服务器地址
   smtp_connect_timeout 30 #指定smtp连接超时时间
   router_id LVS_DEVEL #运行keepalived机器的一个标识
}
vrrp_sync_group VG_1{ #监控多个网段的实例
group {
inside_network #实例名
outside_network
}
notify_master /path/xx.sh #指定当切换到master时,执行的脚本
netify_backup /path/xx.sh #指定当切换到backup时,执行的脚本
notify_fault "path/xx.sh VG_1" #故障时执行的脚本
notify /path/xx.sh
smtp_alert #使用global_defs中提供的邮件地址和smtp服务器发送邮件通知
}
vrrp_instance inside_network {
    state BACKUP #指定那个为master,那个为backup,如果设置了nopreempt这个值不起作用,主备考priority决


    interface eth0 #设置实例绑定的网卡
    dont_track_primary #忽略vrrp的interface错误(默认不设置)
    track_interface{ #设置额外的监控,里面那个网卡出现问题都会切换
    eth0
    eth1
    }
    mcast_src_ip #发送多播包的地址,如果不设置默认使用绑定网卡的primary ip
    garp_master_delay #在切换到master状态后,延迟进行gratuitous ARP请求
    virtual_router_id 50 #VPID标记
    priority 99 #优先级,高优先级竞选为master
    advert_int 1 #检查间隔,默认1秒
    nopreempt #设置为不抢占 注:这个配置只能设置在backup主机上,而且这个主机优先级要比另外一台高
    preempt_delay #抢占延时,默认5分钟
    debug #debug级别
    authentication { #设置认证
        auth_type PASS #认证方式
        auth_pass 111111 #认证密码
    }
    virtual_ipaddress { #设置vip
        192.168.202.200
    }
}
virtual_server 192.168.202.200 23 {
    delay_loop 6 #健康检查时间间隔
    lb_algo rr  #lvs调度算法rr|wrr|lc|wlc|lblc|sh|dh
    lb_kind DR  #负载均衡转发规则NAT|DR|RUN
    persistence_timeout 5 #会话保持时间
    protocol TCP #使用的协议
    persistence_granularity <NETMASK> #lvs会话保持粒度
    virtualhost <string> #检查的web服务器的虚拟主机(host:头)   
    sorry_server<IPADDR> <port> #备用机,所有realserver失效后启用
real_server 192.168.200.5 23 {
            weight 1 #默认为1,0为失效
            inhibit_on_failure #在服务器健康检查失效时,将其设为0,而不是直接从ipvs中删除
            notify_up <string> | <quoted-string> #在检测到server up后执行脚本
            notify_down <string> | <quoted-string> #在检测到server down后执行脚本
           
TCP_CHECK {
            connect_timeout 3 #连接超时时间
            nb_get_retry 3 #重连次数
            delay_before_retry 3 #重连间隔时间
            connect_port 23  健康检查的端口的端口
            bindto <ip>  
          }
HTTP_GET | SSL_GET{
    url{ #检查url,可以指定多个
         path /
         digest <string> #检查后的摘要信息
         status_code 200 #检查的返回状态码
        }
    connect_port <port>
    bindto <IPADD>
    connect_timeout 5
    nb_get_retry 3
    delay_before_retry 2
}

SMTP_CHECK{
    host{
    connect_ip <IP ADDRESS>
    connect_port <port> #默认检查25端口
    bindto <IP ADDRESS>
         }
    connect_timeout 5
    retry 3
    delay_before_retry 2
    helo_name <string> | <quoted-string> #smtp helo请求命令参数,可选
}
MISC_CHECK{
    misc_path <string> | <quoted-string> #外部脚本路径
    misc_timeout #脚本执行超时时间
    misc_dynamic #如设置该项,则退出状态码会用来动态调整服务器的权重,返回0 正常,不修改;返回1,

检查失败,权重改为0;返回2-255,正常,权重设置为:返回状态码-2
}
    }





本文出自 “运维基础” 博客,请务必保留此出处http://phospherus.blog.51cto.com/7824598/1861662

一次arp防护配置错误导致的故障

故障描述,客户那里能够获得ip地址和dns等信息,但上不了网。三层核心是思科6509,二层设备是华三5130。处理过程,由于dhcp信息能够获得证明二层是通的,cisco6509上分配ip等信息,查看相关vlan和网关信息,查看其他三层设备能... 查看详情

keepalived工作原理与配置文件讲解(代码片段)

1、简介Keepalived:高可用或热备软件,用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构不可用)的发生,keepalived就是VRRP协议的实现。2、原理keepalived采用是模块化设计,不同模块实现不同的功能,keepali... 查看详情

keepalived脑裂现象

参考技术AKeepalived的作用是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将... 查看详情

keepalived配置

1、什么是keepalived?keepalived是集群管理中保证集群高可用的一个服务软件,用来检测服务器的状态以及loadbbalance主机和backup主机之间的failover(故障切换)防止单点故障。在集群当中如果有一台服务器宕机或工作出现故障,keepalived... 查看详情

一次服务器非法重启后导致的故障排查记录(代码片段)

大家好,我是杰哥。前段时间遇到一个服务器问题:非法重启设备后,服务器进入救援模式,数据盘也不显示挂载是否成功。说来这个问题,我觉得还挺奇葩。今天就来跟大家分享下整个过程以及我的处理方法。避免大家在今后... 查看详情

keepalived双机热备实现故障时发送邮件通知

...241backup:192.168.1.242漂移IP:192.168.1.2431。主备调度器都安装keepalived软件安装步骤例如以下:./configure--p 查看详情

一次keepalived高可用的事故,让我重学了一遍它!

...MySQL故障的事故,这次我又遇到了另外一个奇葩的问题:Keepalived高可用组件的虚拟IP持续漂移,导致MySQL主从不断切换,进而导致MySQL主从数据同步失败。虽然没能重现Keepalived的这个问题,但是我深入研究了下Keepalived的原理以及... 查看详情

手动命令以故障回复 keepalived 集群

】手动命令以故障回复keepalived集群【英文标题】:Manualcommandtofailbackakeepalivedcluster【发布时间】:2017-06-2114:35:38【问题描述】:我正在使用nopreempt选项运行具有两个节点的测试keepalived集群。这使我可以防止在崩溃后自动故障回... 查看详情

keepalived常见故障

...200  10.0.0.201这个登录一下,帮我测试一下nginx那个keepalived的功能正常不系统是centos7keepalived和  nginx都可以重启测试:1、pkillnignx后,故障切换一切正常,恢复nginx后也可以抢占回VIP2、在修改nginx配置文件后,在pkilln... 查看详情

运维随笔记录一次rabbitmq启动故障排查

由于故障排查已经过了一段时间再写的这个随便,故这次无相关截图某天,运行正常的rabbitmq挂掉了,然后去重启的时候报错,启动不了,通过查看systemctlstatusrabbitmq-l和journalctl-urabbitmq查看错误信息,发现也没有什么有价值的信... 查看详情

keepalived组播故障排查

虚拟机无法接收keepalived的vrrp组播现象:    在Ubuntu1404的系统下安装了三台虚拟机,然后配置了一个简单的keepalived+haproxy服务。结果启动后发现三台虚拟机都配上vip,keepalived.log日志中也未看见error的报错信息。排... 查看详情

keepalived+lvs

一、Keepalived1.1介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障(单点故障是指一旦某一点... 查看详情

keepalived:vrrp实例故障转移(keepalived+haproxy)(代码片段)

keepalived使用脚本进行健康检查时的相关配置项。例如keepalived+haproxy实现haproxy的高可用。keepalived分为vrrp实例的心跳检查和后端服务的健康检查。如果要配置后端服务,则后端服务只能是LVS。但vrrp能独立与lvs存在,例如keepalive结... 查看详情

小谈keepalivedvip漂移原理与vrrp协议

参考技术Ahttps://www.cnblogs.com/lixuwu/p/8476997.html什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。之所以说keepalived... 查看详情

keepalived介绍及工作原理

keepalived介绍keepalived观察其名可知,保持存活,在网络里面就是保持在线了,也就是所谓的高可用或热备,它集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障(单点故障是指一旦某一点出现故... 查看详情

记一次hbaseregionserver经常挂掉故障排查过程

参考技术A原始采集数据采用HBase进行存储。实时采集数据流量很大,在入库的时候,有时候会发生阻塞。 测试环境正常,生产环境下,时不时出现HRegionServer挂掉的情况,而HMaster正常。重启Hbase之后,短时间内恢复正常,然... 查看详情

架构设计:线上服务故障应急机制讨论

最近由于疏忽误操作导致一次大故障,在此结合网上和实践经验,总结一下线上服务故障应急机制,警惕自己时刻注意服务稳定性问题。前言海恩法则   ·事故的发生是量的积累的结果。   ·再好的技术、再完美... 查看详情

架构设计:线上服务故障应急机制讨论

最近由于疏忽误操作导致一次大故障,在此结合网上和实践经验,总结一下线上服务故障应急机制,警惕自己时刻注意服务稳定性问题。前言海恩法则   ·事故的发生是量的积累的结果。   ·再好的技术、再完美... 查看详情