keepalived基础

news2024/9/22 4:19:48

目录

1 高可用集群简介

1.1 高可用的概念

1.2 常见的 HA 集群

1.3 高可用集群软件

2 keepalived的功能与用途

2.1 LVS directors failover功能

2.2 LVS cluster nodes healthchecks功能

3 VRRP协议介绍

4 Keepalived 架构

5 原理总结


1 高可用集群简介

1.1 高可用的概念

高可用集群( High Availability Cluster, HA 集群),其中高可用的含义是最大限度地可以使用。从集群的名字上可以看出,此类集群实现的功能是保障用户的应用程序持久、不间断地提供服务。 当应用程序出现故障或者系统硬件、网络出现故障时,应用可以自动、快速从一个节点切换到另一个节点,从而保证应用持续、不间断地对外提供服务,这就是高可用集群实现的功能 .

1.2 常见的 HA 集群

我们常说的双机热备、双机互备、多机互备等都属于高可用集群的范畴,这类集群一般都由两个或两个以上节点组成。典型的双机热备结构如下图所示 :

1.3 高可用集群软件

高可用集群一般是通过高可用软件来实现的。在 Linux 下常用的高可用软件有开源HeartBeatHA、 Red Hat 提供的 RHCS、商业软件 ROSE、Keepalived、pacemaker 等。

心跳检测:

为了实现负载平衡、高可用性和错误恢复,集群系统采用心跳检测技术。心跳检测通过心跳线完成,可以使用 RS232 串口线、专用网卡或共享磁盘阵列等设备。心跳线数量应等于集群节点数减去 1。若使用网卡进行心跳检测,每个节点需配备两块网卡,一块用于私人网络直接连接到另一节点对应网卡进行心跳检测,另一块则连接至公共网络提供服务。此外,心跳网卡和服务网卡的 IP 地址应避免在同一子网内。心跳检测的效率直接影响故障切换的时间,集群系统依赖心跳技术维持节点间的有效通信。

漂移 IP 地址:

在集群系统中,除了每个节点自身的静态 IP 地址外,还有一个浮动 IP 地址。该地址并非固定不变,例如,在双机热备中,正常状态下浮动 IP 地址位于主节点,一旦主节点发生故障,浮动 IP 地址将自动切换至备用节点。因此,为了确保服务的持续性,在集群系统中必须使用浮动 IP 地址作为对外提供的服务 IP 地址。尽管节点自身的 IP 地址也可提供服务,但当节点失效时,服务将转移到另一个节点,而连接服务的 IP 地址仍为故障节点的 IP 地址,导致服务中断。

Keepalived是一个开源软件,主要用于构建高可用性(High Availability, HA)的服务器环境。它的主要作用是在主服务器发生故障时,自动将请求转移到备份服务器上,从而避免了服务中断的情况。

Keepalived有两个核心组件:检测器和通知器。检测器负责定期对服务器进行健康检查,如果发现服务器出现问题,就会通知通知器。通知器则会根据配置文件中的规则,决定如何处理这个问题,比如切换到备用服务器等。

Keepalived还支持VRRP协议,这是一种用于解决单一路由器故障的方法。通过VRRP,可以创建一个虚拟路由器,由多个物理路由器共享这个虚拟路由器的身份。当主路由器发生故障时,其他路由器就可以接管虚拟路由器的角色,继续提供服务。

2 keepalived的功能与用途

 Keepalived服务两大用途healthcheck & failover

2.1 LVS directors failover功能

Ha failover功能:实现LB Master主机和Backup主机之间故障转移和自动切换。

这是针对有两个负载均衡器Director同时工作而采取的故障转移措施。当主负载均衡器(MASTER)失效或出现故障时,备份负载均衡器(BACKUP)将自动接管主负载均衡器的所有工作;一旦主负载均衡器(MASTER)故障修复,MASTER又会接管回它原来处理的工作,而备份负载均衡管理器(BACKUP)会释放master失效时它接管的工作,此时两者将恢复到最初各自的角色状态。

LVS directors failover功能原理图

图一:keepalived集群正常工作双主架构简图

图二:keepalived集群LVS director2宕机状态

图三:keepalived集群DIP2 takeover图

图四:keepalived集群takeover后正常架构简图

2.2 LVS cluster nodes healthchecks功能

rs healthcheck功能:负载均衡定期检查RS的可用性决定是否非其分发请求。 当虚拟服务器中的某一个甚至是几个真实服务器同时发生故障无法提供服务时,负载均衡器会自动将失效的服务器从转发队列中清除出去,从而保证用户的访问不受影响;当故障的服务器被修复以后,系统又会自动地把他们加入转发队列,分发请求提供正常服务。

LVS cluster nodes healthchecks功能原理图

图一:keepalived集群双主LVS cluser nodes意外宕机示意图

图二:keepalived集群双主LVS cluster nodes意外宕机RS自动清理示意图

3 VRRP协议介绍

vrrp协议,英文名称:Virtual Router Redundancy Protocol,中文名称:虚拟路由器冗余协议。vrrp出现就是为了解决静态路由的单点故障,vrrp是通过一种竞选协议机制来将路由任务交给某台vrrp路由器。

MASTER和BACKUP
       在一个VRRP虚拟路由器中,有多台物理的VRRP路由器,但是这多台物理的机器并不同时工作,而是由一台称为MASTER的负责路由工作其他的都是BACKUP,MASTER并非一成不变,VRRP协议让每个VRRP路由器参与竞选,最终获胜的就是MASTER。MASTER有一些特权,比如拥有虚拟路由器的IP地址,我们的主机就是用这个IP地址作为静态路由的。拥有特权的MASTER要负责转发发送给网关地址的包和响应ARP请求。
       VRRP通过竞选协议来实现虚拟路由器的功能,所有的协议报文都是通过IP多播(multicast)包(多播地址224.0.0.18)形式发送的。虚拟路由器有VRID(范围0-255)和一组IP地址组成,对外表现为一个周知的MAC地址:00-00-5E-00-01{VRID}。所有,在一个虚拟路由器中,不管谁是MASTER,对外都是相同的MAC和IP(称之为VIP)。客户端主机并不需要因为MASTER的改变而修改自己的路由配置,对他们来说,这周主从的切换时透明的。
       在一个虚拟路由器中,只有作为MASTER的VRRP路由器会一直发送VRRP广告包(VRRP Advertisement message),BACKUP不会抢占MASTER,除非它的优先级(priority)更高。当MASTER不可用时(BACKUP收不到广告包),多台BACKUP中优先级最高的这台会被抢占为MASTER。这种抢占式非常快速的(<1s),以保证服务的连续性。
出于安全性考虑,VRRP包使用了加密协议进行加密。

keepalived主要特点如下所示。
1)Keepalived是LVS的扩展项目,因此它们之间具备良好的兼容性。 这点应该是 Keepalived部署比其他类似工具更简洁的原因,尤其是相对于Heartbeat而言,Heartbeat作为HA软件,其复杂的配置流程让许多人望而生畏。
2)通过对服务器池对象的健康检查,实现对失效机器/服务的故障隔离。
3)负载均衡器之间的失败切换,是通过VRRPv2(Virtual Router Redundancy Protocol)stack实现的,VRRP当初被设计出来就是为了解决静态路由器的单点故障问题。
4)通过实际的线上项目,我们可以得知,iptables的启用是不会影响Keepalived的运行的。 但为了更好的性能,我们通常会将整套系统内所有主机的iptables都停用。
5)Keepalived产生的VIP就是整个系统对外的IP,如果最外端的防火墙采用的是路由模式,那就映射此内网IP为公网IP

4 Keepalived 架构

官方文档:
https://keepalived.org/doc/
http://keepalived.org/documentation.html
用户空间核心组件:

vrrp stackVIP消息通告

checkers:监测real server

system call:实现 vrrp 协议状态转换时调用脚本的功能

SMTP:邮件组件

IPVS wrapper:生成IPVS规则

Netlink Reflector:网络接口

WatchDog:监控进程

  • 控制组件:提供keepalived.conf 的解析器,完成Keepalived配置
  • IO复用器:针对网络目的而优化的自己的线程抽象
  • 内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

5 原理总结

VRRP 相关术语
  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIPVirtual IP
  • VMACVirutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:
    • master:主设备
    • backup:备用设备
    • priority:优先级

VRRP 相关技术

通告:心跳,优先级等;周期性

工作方式:抢占式,非抢占式

安全认证:

无认证

简单字符认证:预共享密钥

MD5

工作模式:

  • /备:单虚拟路由器
  • /主:主/备(虚拟路由器1),备/主(虚拟路由器2
vrrp 协议的软件实现,原生设计目的为了高可用 ipvs 服务
官网: http://keepalived.org/
功能:
  • 基于vrrp协议完成地址流动
  • vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • ipvs集群的各RS做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginxhaproxy等服务

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

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

相关文章

数据埋点系列 5|数据驱动决策:形成数据驱动文化

在过去的几篇文章中&#xff0c;我们深入探讨了数据埋点、数据质量保证、数据分析和可视化等主题。现在&#xff0c;让我们站在更高的视角&#xff0c;讨论如何将这些技术和方法整合到实际的业务决策中&#xff0c;以及如何在组织中建立真正的数据驱动文化。 目录 1. 回顾&am…

Github 2024-08-14 C开源项目日报Top10

根据Github Trendings的统计,今日(2024-08-14统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量C项目10Objective-C项目1PHP项目1Python项目1PHP:流行的Web开发脚本语言 创建周期:4710 天开发语言:C, PHP协议类型:OtherStar数量:37340 …

【Pyspark-驯化】一文搞懂Pyspark修改hive表描述以及增加列使用技巧

【Pyspark-驯化】一文搞懂Pyspark修改hive表描述以及增加列使用技巧 本次修炼方法请往下查看 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我工作、学习、实践 IT领域、真诚分享 踩坑集合&#xff0c;智慧小天地&#xff01; &#x1f387; 相关内容文档获取 微…

C++11 STL中的Vector使用细节

容器 支持泛型 Vector常用成员函数示例迭代器操作插入和删除操作 与find 配合:vector 一些复杂操作 Vector 的内存管理策略压入对象 需要无参构造.压入对象指针 高效插入和删除 迭代器失效 代码优化: 二维及多维空间生成 容器 支持泛型 vector<int> vi;vector<double…

中国数据库的前世今生:披荆斩棘,乘风破浪

文章目录 前言国外数据库技术蓬勃发展中国信息化起步与发展&#xff08;数据库技术探索&#xff09;国外数据库商战策略解决燃眉之急学习先进技术 数据库技术的新格局雷声大雨点小的千年虫新型数据库的诞生国产数据库展露头脚 开源助力国产数据库弯道超车去“IOE”化大数据席卷…

使用OIDC登录kubesphere遇到的坑细节

1.通过代理telepresence到本地调试&#xff0c;使用默认账号密码&#xff0c;提示账号密码错误。 2.kubesphere在sso登录的时候&#xff0c;提示签名错误&#xff0c;其实这个错误不是很明确&#xff0c;所以要到本地调试&#xff0c;找到根本原因。 # 错误1 Tnauthorized: fa…

《Linux运维总结:基于ARM64架构CPU使用docker-compose一键离线部署etcd 3.5.15容器版分布式集群》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;《Linux运维篇&#xff1a;Linux系统运维指南》 一、部署背景 由于业务系统的特殊性&#xff0c;我们需要面对不同的客户部署业务系统&#xff0…

skywalking架构

1.整体架构 整个架构&#xff0c;分成上、下、左、右四部分&#xff1a; 在SkyWalking中&#xff0c;trace 数据和 metrics 数据是两种关键的监控数据类型&#xff0c;它们帮助你理解应用的运行状态、性能瓶颈和故障点 1.1Trace 数据 Trace 数据是分布式追踪数据&#xff0c;它…

【原创】java+springboot+mysql学业跟踪指导管理系统设计与实现

个人主页&#xff1a;程序猿小小杨 个人简介&#xff1a;从事开发多年&#xff0c;Java、Php、Python、前端开发均有涉猎 博客内容&#xff1a;Java项目实战、项目演示、技术分享 文末有作者名片&#xff0c;希望和大家一起共同进步&#xff0c;你只管努力&#xff0c;剩下的交…

Centos7安装jdk1.6(jdk-6u45-linux-x64.bin)

目录 一&#xff0c;查看是否安装jdk&#xff1a;二&#xff0c;下载安装文件&#xff1a;三&#xff0c;开始安装a. jdk-6u45-linux-x64-rpm.bin文件安装&#xff1a;b. jdk-6u45-linux-x64.bin文件安装【建议安装此文件】&#xff1a; 四&#xff0c;配置环境变量&#xff1a…

37.docker拉取镜像失败和创建mysql5.6容器

问题 docker pull 拉取镜像文件超时&#xff0c;网络连接不上。 解决方案 在/etc/docker目录下创建daemon.json文件。 文件内容为&#xff1a; { "builder": { "gc": { "defaultKeepStorage": "20GB", "en…

计算机视觉-CS231n

Image classifcation knnRegularizationBack PropagationNeural NetworksConvolutional Networks Training Neural Networks Deep learning 、CNN、RNN Detection and segmentation Visualizing and understanding GAN、Reinforcement learning Generative models

城市信息模型:构建未来智慧城市之基底座

在智慧城市的宏大叙事中&#xff0c;城市信息模型&#xff08;City Information Model, CIM&#xff09;平台如同城市智能的神经中枢&#xff0c;将数据、空间与技术深度融合&#xff0c;为城市规划、管理、服务、居民生活提供了前所未有的洞察与优化途径。CIM平台的构建不仅是…

【Python系列】txt文件读取操作

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

使用mybatis注解和xml映射执行javaWeb中增删改查等操作

Mapper接口 使用注解执行SQL语句操作和相应的Java抽象类&#xff08;对于简单的增删改查使用注解&#xff09; Mapper public interface EmpMapper {// 根据id删除员工信息Delete("delete from mybatis.emp where id#{id}")public int EmpDelete(Integer id);// 查…

2024年最新版小程序云开发数据模型的开通步骤,开始开发微信小程序前的准备工作,认真看完奥!

小程序官方又改版了&#xff0c;搞得石头哥不得不紧急的再新出一版&#xff0c;教大家开通最新版的数据模型。官方既然主推数据模型&#xff0c;那我们就先看看看新版的数据模型到底是什么。 一&#xff0c;什么是数据模型 数据模型是什么 数据模型是一个用于组织和管理数据的…

k-means聚类算法k-means++聚类算法

k-means聚类算法&k-means聚类算法 聚类(Clustering) 是按照某个特定标准(如距离)把一个数据集分割成不同的类或簇&#xff0c;使得同一个簇内的数据对象的相似性尽可能大&#xff0c;同时不在同一个簇中的数据对象的差异性也尽可能地大。也就是说&#xff0c;聚类后同一类的…

从战略到系统架构:信息系统设计的全面解析

在当今数字化时代&#xff0c;信息系统已成为企业运营、管理和创新的核心驱动力。信息系统设计的重要性不仅关乎企业的技术实现&#xff0c;更直接影响到企业的战略执行和市场竞争能力。本文将从战略视角出发&#xff0c;深入探讨信息系统设计的全过程&#xff0c;包括从战略制…

使用Nexus搭建Maven私服仓库

一、私服仓库简介 在Java的世界中&#xff0c;我们通常使用Maven的依赖体系来管理构件&#xff08;artifact&#xff0c;又称为二方库或三方库&#xff09;的依赖&#xff0c;Maven仓库用于存储这些构件。一般的远程仓库&#xff08;比如Maven Central&#xff09;只提供下载功…

微信小程序中实现自动滚动

使用scroll-view组件的scroll-into-view属性&#xff1a; <scroll-view class"container" scroll-y"{{true}}" scroll-into-view"recordBottomScroll"><view class"text_style" style"color: #252526;">{{te…