Keepalived工具的基本介绍(原理:VRRP协议)

目录

一、keepalived工作原理

1、VRRP

1.1 VRRP相关术语

1.2 VRRP相关技术

1.3 VRRP工作过程

2、keepalived介绍

2.1 Keepalived架构

3、keepalived的工作原理 

3.1Keepalived高可用故障切换转移原理

4、脑裂

4.1什么是脑裂?

4.2造成脑裂的原因有哪些?

4.3如何解决keepalived脑裂问题?


一、keepalived工作原理

1、VRRP

VRRP(Virtual Router Redundancy Protocol):虚拟路由冗余协议,解决静态网关单点故障风险,它能够保证当个别节点宕机时,整个网络可以不间断地运行。

  • 物理层:路由器、三层交换机
  • 软件层:keepalived
1.1 VRRP相关术语
  • 虚拟路由器:Virtual Router
  • 虚拟路由器标识:VRID(0-255),唯一标识虚拟路由器
  • VIP:Virtual IP,虚拟路由器的IP地址
  • VMAC:Virutal MAC (00-00-5e-00-01-VRID)
  • 物理路由器:
  1. master:主设备,虚拟路由器中承担报文转发任务的路由器
  2. backup:备用设备,master路由器出现故障时,能够代替master路由器工作的路由器
  3. priority:优先级,VRRP根据优先级来确定虚拟路由器中每台路由器的地位。
1.2 VRRP相关技术

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

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

  • 抢占模式:在抢占模式下,如果Backup设备的优先级比当前Master设备的优先级高,则主动将自己切换成Master。
  • 非抢占模式:在非抢占模式下,只要Master设备没有出现故障,Backup设备即使随后被配置了更高的优先级也不会成为Master设备。

安全认证:

  • 无认证:不进行任何VRRP报文的合法性认证,不提供安全性保障
  • 简单字符认证:预共享密钥,在一个有可能受到安全威胁的网络中,可以将认证方式设置为简单字符认证
  • MD5认证:在一个非常不安全的网络中,可以将认证方式设置为MD5认证

工作模式:

  • 主/备:单虚拟路由器
  • 主/主:主/备(虚拟路由器1),备/主(虚拟路由器2)
1.3 VRRP工作过程

VRRP的工作过程如下:

(1)VRRP备份组中的设备根据优先级选举出Master。Master设备通过发送免费ARP报文,将虚拟MAC地址通知给与它连接的设备或者主机,从而承担报文转发任务。

(2)Master设备周期性向备份组内所有Backup设备发送VRRP通告报文,以公布其配置信息(优先级等)和工作状况。

(3)如果Master设备出现故障,VRRP备份组中的Backup设备将根据优先级重新选举新的Master。

(4)VRRP备份组状态切换时,Master设备由一台设备切换为另外一台设备,新的Master设备会立即发送携带虚拟路由器的虚拟MAC地址和虚拟IP地址信息的免费ARP报文,刷新与它连接的主机或设备中的MAC表项,从而把用户流量引到新的Master设备上来,整个过程对用户完全透明。

(5)原Master设备故障恢复时,若该设备为IP地址拥有者(优先级为255),将直接切换至Master状态。若该设备优先级小于255,将首先切换至Backup状态,且其优先级恢复为故障前配置的优先级。

(6)Backup设备的优先级高于Master设备时,由Backup设备的工作方式(抢占方式和非抢占方式)决定是否重新选举Master。

2、keepalived介绍

keepalived基于VRRP协议的软件实现,原生设计目的为了高可用 ipvs服务

ipvs,IP虚拟服务器(IP Virtual Server,简写为IPVS)。是运行在LVS下的提供负载均衡功能的一种技术。

keepalived的功能:

  • 基于vrrp协议完成地址流动
  • 为vip地址所在的节点生成ipvs规则(在配置文件中预先定义)
  • 为ipvs集群的各RS(后端的Real Server)做健康状态检测
  • 基于脚本调用接口完成脚本中定义的功能,进而影响集群事务,以此支持nginx、haproxy等服务
2.1 Keepalived架构

用户空间核心组件:

  • vrrp stack:VIP消息通告
  • checkers:监测real server
  • system call:实现 vrrp 协议状态转换时调用脚本的功能
  • SMTP:邮件组件
  • IPVS wrapper:生成IPVS规则
  • Netlink Reflector:网络接口
  • WatchDog:监控进程

控制组件:提供keepalived.conf 的解析器,完成Keepalived配置

IO复用器:针对网络目的而优化的自己的线程抽象

内存管理组件:为某些通用的内存管理功能(例如分配,重新分配,发布等)提供访问权限

3、keepalived的工作原理 

Keepalived高可用对之间是通过VRRP进行通信的,VRRP是通过竞选机制来确定主备节点的,主节点的优先级高于备节点,因此,工作时主节点会优先获得所有的资源,备节点处于等待状态,当主节点出现故障时,备节点就会接管主节点的资源,然后顶替主节点对外提供服务。

在Keepalived服务对之间,只有作为主节点的服务器会一直发送 VRRP广播包,告诉备节点它还活着,此时备节点不会抢占主节点资源,当主节点不可用时,即备节点监听不到主节点发送的广播包时,备节点就会启动相关服务接管主节点的资源,保证业务的连续性。接管速度最快可以小于1秒。

3.1Keepalived高可用故障切换转移原理

Keepalived高可用服务之间的故障切换转移,还是通过VRRP(Vritual Route Redundancy Protocol,虚拟路由冗余协议)来实现的 。

在Keepalived服务正常工作时,Master主节点会不断向Backup备节点发送心跳消息(多播的方式),用来告诉备用节点自己还活着,当Master主节点出现故障时,就无法发送心跳消息,备节点也就因此无法继续检测到来自Master主节点的心跳消息了,于是调用自身的接管程序,接管Master主节点的IP资源及服务。而当Master主节点恢复时,Backup备节点默认又会主动释放主节点故障时自身接管的IP资源及服务,恢复到原来的备用角色。

4、脑裂

4.1什么是脑裂?

在高可用(HA)系统中,当联系2个节点的“心跳线”断开时,本来为一整体、动作协调的HA系统,就分裂成为2个独立的个体。

由于相互失去了联系,都以为是对方出了故障。两个节点上的HA软件像“裂脑人”一样,争抢“共享资源”、争起“应用服务”,就会发生严重后果。共享资源被瓜分、两边“服务”都起不来了;或者两边“服务”都起来了,但同时读写“共享存储”,导致数据损坏

4.2造成脑裂的原因有哪些?
  1. 高可用服务器对之间心跳线链路发生故障,导致无法正常通信。
  2. 因心跳线坏了(包括断了,老化)。
  3. 因网卡及相关驱动坏了,ip配置及冲突问题(网卡直连)
  4. 因心跳线间连接的设备故障(网卡及交换机)
  5. 因仲裁的机器出问题(采用仲裁的方案)
  6. 高可用服务器上开启了 iptables防火墙阻挡了心跳消息传输。
  7. 高可用服务器上心跳网卡地址等信息配置不正确,导致发送心跳失败
  8. 其他服务配置不当等原因,如心跳方式不同,心跳广插冲突、软件Bug等。
4.3如何解决keepalived脑裂问题?
  • 同时使用串行电缆和以太网电缆连接、同时使用两条心跳线路,这样一条线路断了,另外一条还是好的,依然能传送心跳消息
  • 当检查脑裂时强行关闭一个心跳节点(这个功能需要特殊设备支持,如stonith、fence)相当于备节点接收不到心跳消息,通过单独的线路发送关机命令关闭主节点的电源
  • 做好对脑裂的监控报警

解决常见方案:

  • 如果开启防火墙,一定要让心跳消息通过,一般通过允许IP段的形式解决
  • 可以拉一条以太网网线或者串口线作为主被节点心跳线路的冗余
  • 开发检测程序通过监控软件检测脑裂

 

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

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

相关文章

力扣--76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数量必须不少于 t 中该字符数量。如…

外边距折叠的原因和解决

参考文章 什么时候出现外边距塌陷 外边距塌陷,也叫外边距折叠,在普通文档流中,在垂直方向上的2个或多个相邻的块级元素(父子或者兄弟)外边距合并成一个外边距的现象,不过只有上下外边距才会有塌陷&#x…

podman checkpoint 性能优化

项目原因,需要使用checkpoint相关功能 团队一直比较熟悉 docker,于是开始对docker的checkpoint进行性能测试。 性能对比 docker环境 麒麟V10 SP3docker: 24criu:3.15进程: java进程, 内存约5GHDD命令 docker checkpoint create 容器ID checkpointName整个checkpoint 耗…

有什么针对新闻媒体行业的安全解决方案

对媒体行业而言,门户网站是最易受到攻击的地方。常见的攻击方式有网页篡改、挂马和被植入暗链等。门户网站作为新闻媒体对外的第一扇门,通常承载了大量的流量,一旦遭到攻击,造成的影响会更具有可怕的“传播力”。那么我们应该如何…

搭建一款实用的个人IT工具箱——it-tools

一、it-tools介绍 IT-Tools是一款开源的个人工具箱,专为IT从业人员打造,支持Docker私有化部署,包含众多实用的IT工具。其功能丰富多样,涵盖二维码生成、数据格式转换、MAC地址生成等,可满足用户多样化的需求。 二、本…

开源的python代码分析工具介绍

本文将为您详细讲解开源的 Python 代码分析工具,以及它们的特点、区别和应用场景。Python 社区提供了多种代码分析工具,这些工具可以帮助您在 Python 应用程序中进行代码质量评估、性能分析、安全检查等功能。 1. Pylint 特点 - 用于检查 Python…

python实现--顺序查找

python实现–顺序查找 python实现–折半查找 python实现–分块查找 python实现B/B树 顺序查找(Sequential Search),也称线性查找,是一种简单直观的查找算法。它的基本思想是逐个遍历数据集合中的元素,直到找到目标元素…

字节3-1大佬分享:字节跳动代码架构设计

最近和字节3-1的大佬交流,他分享了一些字节跳动代码架构设计理念,接下来用故事化的角度阐述。 面试官: 你好,今天我们要讨论的是享元模式。首先,你能解释一下什么是享元模式吗? 求职者: 当然可以。享元模式是一种结构…

怎么在学习强国网上发布文章,学习强国投稿发稿方法途径,附学习强国多少钱价格明细表

学习强国是一款受用户欢迎的学习软件,许多人希望在其平台上发布自己的文章,以分享和传播自己的学习成果和心得体会。那么,怎么在学习强国网上发布文章呢?接下来,我们将介绍一些投稿发稿的方法和途径。 首先&#xff0c…

Feed、RSS、Atom概念对比及ROME实战

概述 在豆瓣等网站里,经常会看到如下订阅Button: 本文记录一下相关概念学习成果。 Feed Feed:消息来源,一种资料格式,网站通过它将最新资讯传播给用户。用户能够订阅某网站的前提条件是网站有提供Feed。Feed被很多…

方程式工具包远程溢出漏洞图形界面版V0.3(内置永恒之蓝、永恒冠军、永恒浪漫等)

Part1 前言 大家好,我是ABC_123。我从年前到现在,一直在整理曾经写过的红队工具,逐步把自己认为比较好用的原创工具发出来给大家用一用,方便大家在日常的攻防比赛、红队评估项目中解放双手,节省时间精力和体力。本期给…

Linux智能网关结合Node-RED实现实时工业数据采集

工业4.0的发展,物联网技术在制造业中的应用越来越广泛。其中,基于Linux系统的工业物联网智能网关因其开放性、稳定性和安全性而备受青睐。这类智能网关创新性地集成了开源工具Node-RED,为从各种工业设备(如PLC)中高效收…

LInux系统架构----Apache与Nginx动静分离

LInux系统架构----Apache与Nginx动静分离 一.动静分离概述 Nginx的静态处理能力比较强,但是动态处理能力不足,因此在企业中常采用动静分离技术在LNMP架构中,静态页面交给Nginx处理,动态页面交给PHP-FPM模块处理。在动静分离技术…

elementui的el-upload图片上传到服务器的对象储存cos并且展示出来

目录 0.前提1.准备工作1.买一个腾讯云服务器(你可以买其他的),我这里是去买了61元一年的轻量级应用云服务器,操场系统是宝塔Linux2.买一个对象储存cos(这里腾讯云可以不用购买,因为开通的时候可以有180天的…

Linux 之八:Linux 的 Shell 编程

简介 Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。 Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务 Shell 脚本 S…

云原生应用架构-微服务开发最佳实践

第1章云原生时代下的微服务 微服务架构是一种将单个应用程序开发为一组小型服务的方法,每个服务在自己的进程中运行,并通过轻量级的通信机制(如HTTP API)进行交互。这些服务围绕业务功能构建,可以通过完全自动化的部署…

单链表的基本操作--增删改查

增删改查 #include <stdio.h> #include <stdlib.h>#define OK 1 #define ERROR 0 typedef int Status; typedef char ElemType;typedef struct Lnode {ElemType data; //结点的数据域struct Lnode* next; //节点的指针域 }Lnode,*LinkList;初始化 Status InitLis…

【PCL】(二十八)超体素聚类分割点云

&#xff08;二十九&#xff09;超体素聚类分割点云 论文&#xff1a;Voxel Cloud Connectivity Segmentation - Supervoxels for Point Clouds supervoxel_clustering.cpp #include <pcl/console/parse.h> #include <pcl/point_cloud.h> #include <pcl/poin…

重启 explorer 进程的正确做法(二)

重启资源管理器进程的方法不唯一&#xff0c;但长期以来大家对实施方法用的不到位。 在上一篇中我认为&#xff1a;“我们往往使用 TerminateProcess 并传入 PID 和特殊结束代码 1 或者 taskkill /f /im 等方法重启资源管理器( explorer.exe )&#xff0c;其实这是不正确的。我…

21 卷积层里的多输入多输出通道【李沐动手学深度学习v2课程笔记】

目录 1. 多输入输出通道&相应代码实现 1.1 多输入 1.2 多输出 1.3 1x1 卷积层 1.4 小结 1. 多输入输出通道&相应代码实现 1.1 多输入 为了加深理解&#xff0c;我们实现一下多输入通道互相关运算。 简而言之&#xff0c;我们所做的就是对每个通道执行互相关操作&a…