Keepalived与HaProxy的协调合作原理分析
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模块,与其他工具的相互作用,都可以通过自己写脚本,加该模块中,实现与其他工具的相互作用。
相关文章:

Keepalived与HaProxy的协调合作原理分析
Keepalived与HaProxy的协调合作原理分析keepalived与haproxy合作场景更好的理解方式协调合作中考虑的问题一、Keepalived以TCP/IP模型角度来分析:二、HaProxy总结:协调合作中考虑的问题的答案虚拟ip:虚拟IP技术,就是一个未分配给客…...
抖音如何找到博主视频推广?筛选博主要看那些数据
近年来抖音视频推广越来越成为企业宣传的热门选择,今天就来和大家聊聊抖音如何找到博主视频推广,以及几种主流的对接方式。一、什么是抖音博主视频推广?抖音博主视频推广就是通过博主的影响力和粉丝量,吸引用户到短视频平台进行观看相关合作…...

Win11的两个实用技巧系列之如何关闭登录密码?
Win11如何关闭登录密码?Win11关闭登录密码的两种解决方法win11是电脑更新后的全新系统,每次开启需要输入密码。有的用户嫌麻烦想要关闭,下面小编就为大家带来了关闭的方法,一起来看看吧有不少用户在升级或者第一次使用Win11系统的时候&#…...
润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查
润普挂卷失败之老卷宗对接NP无法获取案件信息问题排查 写在最前面 根因:NP的dzjzzzfw与老卷宗dzjz服务用的zookeeper不是同一个,且老卷宗指向的zookeeper没有任何一个匹配的dzjzzzfw。仅有消费者,没有任何生产者,导致老卷宗通过…...
产品经理面试题思考及回答思路(一)
求职产品助理/经理岗位,转行产品岗面试真题 关于产品经理岗位能力的思考: 什么是产品经理?为什么要当/选择做产品经理?怎么理解产品经理?如何理解产品经理的价值?产品日常工作有哪些?工作流程…...

Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model
Routability-Driven Macro Placement with Embedded CNN-Based Prediction Model 2019 Design, Automation & Test in Europe Conference & Exhibition (DATE) DOI: 10.23919/DATE.2019.8715126 目录Abstract一、Introduction二、PROBLEM FORMULATION AND PRELIMINARIE…...

论一个上班族如何一次性通过PMP考试
PMP是我工作后考取的一个证书。从准备到通过,花了大约三个月的时间。我之前在某家互联网公司从事程序员的工作,工作一段时间后,天天敲着代码,改着bug,感觉比较迷茫,不知道未来的发展在哪里,都说…...

Web前端:使用Angular CLI时的最佳实践和专业技巧
在web开发业务中,构建高性能的应用程序是首要因素。此外,用开发人员最流行的语言开发一个健壮的网站将始终为构建高功能的网站提供适当的基础网站。相比之下,不可否认,Angular CLI是建立得最好且正在成长的框架之一。Angular CLI简…...

从0到1一步一步玩转openEuler--15 openEuler使用DNF管理软件包
文章目录15.1 搜索软件包15.2 列出软件包清单15.3 显示RPM包信息15.4 安装RPM包15.5 下载软件包15.6 删除软件包DNF是一款Linux软件包管理工具,用于管理RPM软件包。DNF可以查询软件包信息,从指定软件库获取软件包,自动处理依赖关系以安装或卸…...

【java】Spring Boot --spring boot项目整合xxl-job
文章目录1、源码下载地址2.文档地址3.源码结构4.初始化数据库脚本5.配置调度中心xxl-job-admin5.1 修改调度中心配置文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties5.2 启动调度中心5.3 访问调度中心管理界面6.创建执行器项目6.3 载入配置…...

视图、索引、存储过程、触发器
视图、索引、存储过程、触发器 group by补充: 规范来说,分组查询中,select后的字段只能是group by的字段或者是聚合函数。mysql在这有一个小优化,分组后如果某个字段的所有记录相同,同样可以select。 视图 视图是虚拟…...
ImportError: cannot import name ‘FlattenObservation‘ from ‘gym.wrappers‘ 解决方案
问题描述 今天在运行openai给出的ppo2的baseline的时候遇到了以下bug: File "/root/code/baselines_openai/baselines/common/cmd_util.py", line 12, in <module> from gym.wrappers import FlattenObservation, FilterObservation ImportErr…...

大件传输的9种方法
不知道你有没有试过用电子邮件进行大文件传输,由于文件大小的限制,往往会发送失败。同时,一些文件共享服务对传输的文件有大小限制,使得你无法与朋友分享电影片段或向客户展示你的工作样本。还有一些要求你注册一个账户࿰…...
将vue2的项目《后台管理模式》转变为vue3版本 (一)
本篇主要讲了将v2项目转变为v3版本,以本人经验愿于各位分享 希望大家可以一起交流!!!! 文章目录一、app 出口位置二 、 index.js 路由配置三、package.json 文件四、 main.js 既然安装插件那就需要引入五、 跨域问题总…...

苹果手机怎么下载手机铃声?图文教程,快速学会
很多小伙伴喜欢使用苹果手机,可是苹果手机里的铃声自己并不是很喜欢听,想要下载一些好听的歌曲更换自己的手机铃声。苹果手机怎么下载手机铃声?别着急,今天小编以图文的方式,教教大家如何使用苹果手机下载手机铃声。 苹…...

AJAX笔记(二)Fetch和axios
1、Fetch 1.1、XMLHttpRequest的缺陷 1.2、fetch的get写法 1.3、fetch的post写法 1.4、fetch的put写法 1.5、fetch的patch写法 1.6、fetch的delete写法 2、axios 2.1、axios的介绍 2.2、axios的get写法 2.3、axios的post写法(图一json写法和图二三form写法&#x…...

TOTOLINK NR1800X 系列 CVE 分析
漏洞简介 TOTOLINK NR1800X最近报了一些cve,现主要对其命令注入进行具体分析,以及对其登录绕过进行分析。 固件下载地址:https://www.totolink.net/home/menu/detail/menu_listtpl/download/id/225/ids/36.html 环境搭建 固件提取 binwa…...
IDEA如何将代码进行上下左右移动,改变位置
鼠标光标定位快捷键 1.ctrl Home:定位到一页代码的行头 2.ctrl end :定位到一页代码的行末 3.home:定位到一行的行头 4.end:定位到一行的行末 有的小键盘可能没有home和end键,就需要自行修改IDEA中的快捷键或者使用键盘映射的方法修改。 将…...

【Java 面试合集】HashMap中为什么引入红黑树,而不是AVL树呢
HashMap中为什么引入红黑树,而不是AVL树呢1. 概述 开始学习这个知识点之前我们需要知道,在JDK1.8 以及之前,针对HashMap有什么不同。 JDK 1.7的时候,HashMap的底层实现是数组 链表JDK1.8的时候,HashMap的底层实现是数…...

深度学习Week15-common.py文件解读(YOLOv5)
目录 简介 一.基本组件 1.1autopad 1.2Conv 1.3 Focus 1.4Bottleneck 1.5BottleneckCSP 1.6 C3 1.7 SPP 1.8Concat 1.9Contract、Expand 二、重要类 2.1非极大值抑制(NMS) 2.2AutoShape 2.3 Detections 2.4 Classify 三、实验 …...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
Python的__call__ 方法
在 Python 中,__call__ 是一个特殊的魔术方法(magic method),它允许一个类的实例像函数一样被调用。当你在一个对象后面加上 () 并执行时(例如 obj()),Python 会自动调用该对象的 __call__ 方法…...
基于Java项目的Karate API测试
Karate 实现了可以只编写Feature 文件进行测试,但是对于熟悉Java语言的开发或是测试人员,可以通过编程方式集成 Karate 丰富的自动化和数据断言功能。 本篇快速介绍在Java Maven项目中编写和运行测试的示例。 创建Maven项目 最简单的创建项目的方式就是创建一个目录,里面…...
【大厂机试题解法笔记】矩阵匹配
题目 从一个 N * M(N ≤ M)的矩阵中选出 N 个数,任意两个数字不能在同一行或同一列,求选出来的 N 个数中第 K 大的数字的最小值是多少。 输入描述 输入矩阵要求:1 ≤ K ≤ N ≤ M ≤ 150 输入格式 N M K N*M矩阵 输…...
c++算法学习3——深度优先搜索
一、深度优先搜索的核心概念 DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是: 深度优先:从起点出发,选择一个方向探索到底,直到无路可走 回溯机制:遇到死路时返回最近…...