Keepalived与HaProxy的协调合作原理分析

news2025/7/13 21:43:24

Keepalived与HaProxy的协调合作原理分析

    • keepalived与haproxy合作场景
      • 更好的理解方式
      • 协调合作中考虑的问题
    • 一、Keepalived
        • 以TCP/IP模型角度来分析:
    • 二、HaProxy
        • 总结:
      • 协调合作中考虑的问题的答案

虚拟ip:虚拟IP技术,就是一个未分配给客户端真实主机的IP,也就是说对外提供数据库服务器除了有一个真实IP外还有一个虚IP,使用任意一个IP都可以连接到这台主机。当服务器发生故障无法对外提供服务时,动态将这个虚IP切换到备用主机。
连接保持:开启连接保持功能后,当服务与旧主节点(即高可用切换前的主节点)连接断开时,当前服务与前端应用的连接保持不断(即应用程序看到的Session),同时服务会与新主节点(即高可用切换后的主节点)重新建立连接并且恢复之前的会话状态,以实现对应用程序端无感知的高可用切换。
负载均衡:含义就是指通过调度算法将负载(工作任务)进行平衡、分摊到多个操作单元上进行运行,从而协同完成工作任务。负载均衡构建在原有网络结构之上,它提供了一种透明且廉价有效的方法扩展服务器和网络设备的带宽、加强网络数据处理能力、增加吞吐量、提高网络的可用性和灵活性。

对于采用haproxy实现负载均衡时,担心由于haproxy挂掉导致整体失效,所以对haproxy做高可用功能。这就是产生了haprocy+keepalived的协作方式。

keepalived与haproxy合作场景

在这里插入图片描述
在Keepalived与Haproxy协调工作的场景中,常见场景如上图。
主要分为三个部分:客户端、调度服务器、服务器集群。
调度服务中通过Keepalived负责将集群对用户显示为一个整体,提供VIP,并且提供调度服务器的故障转移,确保调度服务的高可用。HaProxy工具负责进行负载均衡功能,与服务器集群相连接。

更好的理解方式

用一个生活常见的场景来展示这个过程。
从前小c要去斯坦福报道。虽然他不知道学校在哪,但是斯坦福安排了接站的服务,可以坐接站车去学校。小c满心欢喜的下了高铁准备,去找接站的指示牌,看见了一个个指示牌,上面写着那边是接站的老师。小辰跟着指示牌走,找到了接站的老师。老师见到小c,知道了小c是要坐接站车的同学,就负责安排,让小c上了第六排第一辆车。到此小c成功了坐上了接站车。
上面这个故事中,指示牌相当于就是Keepalived提供的VIP,老师相当于是负责负载均衡调度的HaProxy,小c跟着指示牌找到了(通过Keepalived的VIP)负责安排上车的老师(提供负载均衡调度的HaProxy),在老师的安排下小c上了车(客户端的信息/请求到达了后端的提供服务的服务器)。
接下来我们提出几个问题,学习完原理后再进行回答。

协调合作中考虑的问题

Q1:Keepalived怎样监控HaProxy工具是否状态正常/如何协作的?
Q2:使用Keepalived实现集群中的故障转移,如何避免脑裂?
Q3:Keepalived有什么功能?

一、Keepalived

Keepalived使用VRRP(虚拟路由冗余协议)实现故障转移。VRRP协议是为路由器备份提供底层设计的。在VRRP协议中有两组概念:VRRP路由器和虚拟路由器,主路由器和备份路由器。
1、VRRP路由器是物理实例,虚拟路由器是逻辑概念。而虚拟路由器,是一组VRRP路由器共同构成的一台虚拟路由器。虚拟路由器对外表现固定的IP地址和MAC地址。

2、主控路由器是负责ARP解析和转发IP数据包的路由器,而其他备份路由器处于待命状态。一个VRRP组只有一个主控路由器进行工作,其他一个或多个备份路由器随时待命,当主控路由器故障时,备份路由器根据选举协议或者优先级将自己设为主控路由器,继续提供服务,保证服务不中断

3、Keepalived的故障转移原理如上,如上图中的两个调度服务器合起来看做一个VRRP组,一个为主控、另一个为备份,这一个VRRP组对客户端提供一个固定的VIP。
注:这里与原VRRP协议有一个不同点(一般情况下),Keepalived只对外提供一个固定的VIP,而不提供固定的虚拟MAC地址。

4、在搭建Keepalived时,主机一(Master)会向局域网发送一个ARP包,包中有IP地址与MAC的映射关系为VIP:MAC1,这时访问VIP,就会根据对应的MAC1访问到主机一,当主机二(backup)检测到主机一故障,将自己升为主控机,则主机二会向局域网中发送ARP包,包含IP与MAC的映射关系为VIP:MAC2,之后访问VIP,就会根据对应的MAC2访问主机二。
但是为了减少接管的影响,某些网络环境需要使用VMAC,可以通过Keepalived配置文件中调用use_mac关键字来实现VMAC支持。在内部,Keepalived代码引入虚拟接口,每个接口专用于特定的virtual_router。Keepalived使用linux内核macvlan驱动程序定义这些接口。因此,必须使用支持macvlan编译的内核。

5、Keepalived服务正常工作时,主Master节点会不断向备节点发送心跳消息(组播的方式),用来告诉备用节点自己还活着,当主Master节点发送故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自主Master的心跳消息了,于是调用自身的接管程序根据优先级进行选举,接管主Master节点的IP资源及服务。当原来的主Master节点重新起来后,可能重新接管,可能不接管,根据配置文件的设定(抢占式和非抢占式)。

6.Keepalived服务器间的联系使用脚本文件,监测心跳,传递心跳信息;监测服务器,业务服务结束会触发预制监测脚本,实现vip漂移。

以TCP/IP模型角度来分析:

Keepalived工作在TCP/IP参考模型的三层、四层、五层(物理层,链路层):
网络层(3):Keepalived通过ICMP协议向服务器集群中的每一个节点发送一个ICMP数据包(有点类似与Ping的功能),如果某个节点没有返回响应数据包,那么认为该节点发生了故障,Keepalived将报告这个节点失效,并从服务器集群中剔除故障节点。

传输层(4):Keepalived在传输层里利用了TCP协议的端口连接和扫描技术来判断集群节点的端口是否正常,比如对于常见的WEB服务器80端口。或者SSH服务22端口,Keepalived一旦在传输层探测到这些端口号没有数据响应和数据返回,就认为这些端口发生异常,然后强制将这些端口所对应的节点从服务器集群中剔除掉。

应用层(5):,Keepalived的运行方式也更加全面化和复杂化,用户可以通过自定义Keepalived工作方式,例如:可以通过编写程序或者脚本来运行Keepalived,而Keepalived将根据用户的设定参数检测各种程序或者服务是否允许正常,如果Keepalived的检测结果和用户设定的不一致时,Keepalived将把对应的服务器从服务器集群中剔除。

简单的说就是,Keepalived的目的是模拟路由器的高可用,所以一般Keepalived是实现前端高可用,常用的前端高可用的组合有,就是我们常见的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。
总结一下,Keepalived中实现轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。
LVS的负载均衡方式更快,应付更大的流量,超过十台机器仍适用。

在这里插入图片描述
IPVS wrapper:这个是IPVS功能的一个实现,IPVSwarrper模块将可以设置好的IPVS规则发送的内核空间并且提供给IPVS模块,最终实现IPVS模块的负载功能。因为IPVS是一个第三方模块,在Keepalived当中IPVS模块是可配置的,如果需要负载均衡功能,可以在编译Keepalived时开打负载均衡功能,也可以通过编译参数关闭。

二、HaProxy

1、HaProxy是一个专注于负载均衡的软件,有基于四层的负载均衡、七层的负载均衡。

2、HaProxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。(1)

3、HaProxy由前端(frontend)和后端(backend),前端和后端都可以有多个。也可以只有一个listen块来同时实现前端和后端。
前端(frontend)区域可以根据HTTP请求的header信息来定义一些规则,然后将符合某规则的请求转发到相应后端(backend)进行处理。

由此不难看出,当Keepalived与HaProxy共同部署在一台服务器上时,二者之间的协作过程,先是由客户端的消息通过访问Keepalived的VIP到该服务器的相应的端口上,HaProxy由frontend或者listen模块配置监听的服务端口(配置文件自行配置)。再根据HaProxy配置的某些规则分配给backend模块配置的后端服务器群。

总结:

Keepalived负责的是高可用集群(HA集群),HaProxy负责的是负载均衡集群(LB集群)。Keepalived与HaProxy合用时,Keepalived只用到其故障转移功能(提供VIP、VIP漂移)。Keepalived自身并没有解决脑裂的方法,需要自己另外找方法解决。HaProxy主要通过frontend模块接受请求,通过backend模块调度分配给负责处理的服务器集群。
在Keepalived + HaProxy组成的高可用集群,永远会浪费服务器。只有主Master工作。

协调合作中考虑的问题的答案

Q1:Keepalived怎样监控HaProxy工具是否状态正常?
答:使用Keepalived提供的vrrp_script和track_script模块,写脚本实现定期检查HaProxy的状态是否在线,如果不在线则自动把HaProxy拉起来。

Q2:使用Keepalived实现集群中的故障转移,如何避免脑裂?
keepalived脑裂的原因有以下几个方面:
1、心跳线出现老化、断裂。
2、网卡等相关驱动损坏,IP配置冲突等。
3、仲裁服务器出现问题(如果有)。
4、高可用服务器开启防火墙。
5、高可用服务器上的心跳、网卡等信息配置不正确。
6、Keepalived配置中统一VRRP实例的virtual_router_id两端参数不同。

预防/解决方法:
1、连两根线,使用串行电缆和以太网电缆连接,同时用两条心跳线路。
2、检测到脑裂时强关一个,需要特殊设备支持。
3、做脑裂的监控报警,发邮件、短信等,可以让人为第一时间介入。
4、增加仲裁机制,引入第三方仲裁软件。
5、启用磁盘锁。
6、用Keepalived提供的vrrp_script和track_script模块,写脚本实现仲裁,例如心跳完全断了,自己ping一下www.baidu.com,看看谁ping不通,就谁有问题。

Q3:Keepalived有什么功能?
答:Keepalived有三个功能:健康检测、LVS负载均衡、故障转移(VRRP)。Keepalived之间的功能。通常与HaProxy搭配使用时,一般只使用故障转移功能。可用通过命令加不同参数开启单独的一项功能,例如-P, –vrrp只开启故障转移功能;-C, –check,只开启健康检查功能等。Keepalived提供的vrrp_script和track_script模块,与其他工具的相互作用,都可以通过自己写脚本,加该模块中,实现与其他工具的相互作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/347624.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文笔记:Vision Transformers for Dense Prediction

中文标题: 密集预测的视觉Transformers 创新点 DPT是一种密集预测架构,它基于编码器-解码器的设计,利用一个Transformer作为编码器的基本模块。具体来说,我们使用最近提出的ViT作为主干架构。我们将ViT提供的tokens表示重新组合成不同分辨率…

【人脸识别】Partial-FC:让你在一台机器上训练1000万个id人脸数据集成为可能!

论文题目:”Killing Two Birds with One Stone: Efficient and Robust Training of Face Recognition CNNs by Partial FC“ -CVPR 2022 代码地址:https://arxiv.org/pdf/2203.15565.pdf 代码地址:https://github.com/deepinsight/insightfac…

Maxwell简介、部署、原理和使用介绍

Maxwell简介、部署、原理和使用介绍 1.Maxwell概述简介 1-1.Maxwell简介 ​ Maxwell是由美国Zendesk公司开源,使用Java编写的MySQL变更数据抓取软件。他会实时监控Mysql数据库的数据变更操作(包括insert、update、delete),并将变…

【DockerCE】Docker-CE 23.0.1正式版发布

很意外啊!Docker社区版竟然直接从20.xx.xx版本,升级到23.xx.xx版本了。官网地址(For RHEL/CentOS 7.9):https://download.docker.com/linux/centos/7/x86_64/stable/Packages/23.0.1版本官方安装包如下:# l…

给初级开发人员的建议

#初学者#生产率#代码新手#学习在我超过 15 年的开发生涯中,我学到了一些可以显着提高我的效率的东西。在这篇文章中,我将与您分享这些经验教训。结构:基础建议——以下内容的重要背景和动机技术咨询——主菜推荐读物——指向非常适合入门的高…

30-Golang中的排序和查找

排序和查找排序的基本介绍交换式排序法交换式排序法-冒泡排序查找顺序查找二分查找排序的基本介绍 排序是将一组数据,依指定的顺序进行排列的过程 排序的分类: 1.内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。包括(交换…

20N65-ASEMI高压MOS管20N65

编辑-Z 20N65在ITO-220AB封装里的静态漏极源导通电阻(RDS(ON))为0.42Ω,是一款N沟道高压MOS管。20N65的最大脉冲正向电流ISM为80A,零栅极电压漏极电流(IDSS)为10uA,其工作时耐温度范围为-55~150摄氏度。20N65功耗&…

Spring Boot最核心的27个注解,你了解多少?

https://blog.csdn.net/ManuMAX/article/details/129017443 导读 Spring Boot方式的项目开发已经逐步成为Java应用开发领域的主流框架,它不仅可以方便地创建生产级的Spring应用程序,还能轻松地通过一些注解配置与目前比较火热的微服务框架SpringCloud集成…

前端学习第一阶段——第五章CSS(下)

5-9 浮动 08-浮动导读 09-传统网页布局三种方式 10-为什么需要浮动 11-什么是浮动 12-浮动特性-脱标 13-浮动特性-浮动元素一行显示 14-浮动特性-浮动元素具有行内块特性 15-浮动元素经常搭配标准流的父元素 16-浮动布局练习1 <!DOCTYPE html> <html lang"en&quo…

从青铜到王者,揭秘 Serverless 自动化函数最佳配置

作者&#xff1a;丛霄 背景介绍 全托管的 Serverless 计算平台能给用户带来更少的运维代价、更强的稳定性和更快的弹性能力。 Serverless 的目标之一是免运维&#xff0c;但仍旧存在一些障碍&#xff0c;在 Serverless 场景特有的一些关键服务配置比如**“并发度”、“最小实…

史上最详细的PyCharm快速上手指南,你值得拥有

上一节中我们介绍了Python并安装了环境&#xff0c;有了Python环境我们就可以开发了吗&#xff1f;各位朋友们。 也可以也不可以&#xff01;哈哈哈不要怪我朋友们&#xff0c;我说的是事实。 如果你喜欢Python自带的Python命令开发&#xff0c;即我们所说的交互式&#xff0…

5.33 综合案例2.0 -ESP32拍照上传阿里云OSS

综合案例2.0 - ESP32拍照上传阿里云OSS案例说明连线功能实现1.阿里云平台连接2.OSS对象存储服务3.ESP32-CAM开发环境4.代码ESP32-CAM开发板代码HaaS506开发板代码测试数据转图片方法案例说明 使用ESP32拍照,将照片数据上传阿里云OSS&#xff08;通过4G网络上传&#xff09;。 …

【ArcGIS Pro二次开发】(4):ArcGIS Pro封装的窗体控件

在ArcGIS Pro&#xff0c;有一类窗体控件是系统已经封装好的&#xff0c;比如消息框、提醒框等。下面通过代码来学习一下。 新建一个项目&#xff0c;命名为【ProWindow】&#xff0c;添加5个按钮&#xff0c;命名为【Show_MessageBox、Show_NoticeBox、Show_OpenDialog、Show…

交通部互通互联码的根证书规则

引言 为了更好的服务交通互通互联码而更新这篇文章。 中金根证书其实是可以自己生成的。 代码内调整 中心公钥索引要保证自己的唯一性。 此处的唯一&#xff0c;是要保证在机具侧的唯一&#xff0c;因为他要根据这个索引去查找证书以及公钥。 提供根公钥给机具侧 生成的公钥…

“黑洞”竟是外星人的量子计算机?

宇宙中的黑洞可以用作终极量子计算机&#xff0c;我们可以从中探索它们的特征。&#xff08;图片来源&#xff1a;网络&#xff09;我们完全有理由怀疑生命在我们的宇宙中很常见&#xff0c;但是为什么我们从未发现过其他生命存在的迹象&#xff1f;这个问题几乎自现代天文学诞…

JavaScript 教程

手册简介JavaScript 是世界上最流行的脚本语言。 JavaScript 是属于 web 的语言&#xff0c;它适用于 PC、笔记本电脑、平板电脑和移动电话。 JavaScript 被设计为向 HTML 页面增加交互性。 许多 HTML 开发者都不是程序员&#xff0c;但是 JavaScript 却拥有非常简单的语法。几…

SpringBoot Data JPA配置多数据源

SpringBoot Data JPA配置多数据源1. Dependency2. Application.properties3. Code3.1 Datasource config3.2 Primary Config3.3 Second Config4. Awakening1. Dependency <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jd…

常用设计模式介绍

java设计模式类型创建型模式&#xff1a;将对象的创建与使用分离结构型模式&#xff1a;如何将类和对象按照某种布局组成更大的格局行为型模式&#xff1a;用于描述类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务23种设计模式介绍1.单例&#xff08;Singleton&…

linux高级命令之软件安装

软件安装学习目标能够使用apt-get命令安装软件1. 软件安装的介绍Ubuntu软件安装有两种方式:离线安装(deb文件格式安装&#xff09;在线安装(apt-get方式安装)2. deb文件格式安装是 Ubuntu 的安装包格式&#xff0c;可以使用 dpkg 命令进行软件的安装和卸载。命令说明dpkg安装和…

以“大数据”赋能产业链精准招商

​ 随着我国产业发展的不断迭代升级&#xff0c;传统招商模式的不足逐步凸显&#xff0c;侧重土地与税费优惠的同质化竞争招商以及来者不拒的无门槛型招商已经遏制了区域产业的发展&#xff0c;导致各产业园区很难形成产业集聚及持续的吸引力。在这样的大环境下&#xff0c;产业…