keepalived高可用介绍

keepalived 是 Linux 一个轻量级的高可用解决方案,提供了心跳检测和资源接管、检测集群中的系统服务,在集群节点间转移共享IP 地址的所有者等。

工作原理

keepalived 通过 VRRP(virtual router redundancy protocol)虚拟路由冗余协议来实现高可用。在这个协议里会将多态功能相同的路由组成一个小组,这个小组会有一个 master 角色 和 N(N >=1)个 backup 角色。

Keepalived 有三个模块:core、check、vrrp。

其中:

core 模块 为 Keepalived 的核心,负责主进程启动、维护以及全局配置文件的加载和解析;

check 模块负责 健康检查;

vrrp 负责实现 vrrp 协议。

keepalived 的体系结构

keepalived 的体系 结构从整体上分为 两层,分别是用户层 (User Space)和 内核空间层(Kernel Space)。

内核空间层处于最底层,它包括 IPVS 和 NETLINK 两个模块。IPVS 模块是 Keepalived 引入 的一个第三方模块,通过 IPVS 可以实现基于 IP 的负载均衡集群。IPVS 默认包含在 LVS 集群软件中。而对于 LVS 集群软件,在 LVS 集群中, IPVS 安装在 一台叫 Director Server 的服务器上,同时在 Director Server 上虚拟出一个 IP 地址对外提供服务,而用户必须通过这个虚拟 IP 地址才能访问服务。这个虚拟 IP 一般成为 LVS 的 VIP,即 Virtual IP。访问的请求首先经过 VIP 到达 Director Server ,然后有 Director Server 从服务器集群节点中选取一个 服务节点响应用户的请求。

Keepalived的配置文件解析

Keepalived的核心组件,包含了一系列功能模块,主要有WatchDog、Checkers、VRRP Stack、IPVS wrapper 和Netlink Reflector,下面介绍每个模块所实现的功能如下:

1、WatchDog

WatchDog是计算机可靠性领域中一个极为简单又非常有效的检测工具,它的工作原理是针对被监视的目标设置一个计数器和一个阈值,WatchDog会自己增加此计数值,然后等待被监视的目标周期性地重置该计数值。一旦被监控目标发生错误,就无法重置此计数值,WatchDog就会检测到,于是采取对应的恢复措施,例如重启或关闭。

在linux中很早就引入了WatchDog功能,而Keepalived正是通过WatchDog的运行机制来监控Checkers和VRRP进程的。

2、 Checkers

这是Keepalived最基础的功能,也是最主要的功能,可实现对服务器运行状态检测和故障隔离。

3、 VRRP Stack

这是Keepalived后来引入的VRRP功能,可以实现HA集群中失败切换(Failover)功能。Keepalived通过VRRP功能再结合LVS负载均衡软件即可部署一个高性能的负载均衡集群系统。

4、 IPVS wrapper

这是IPVS功能的一个实现。IPVS wrapper模块可以将设置好的IPVS规则发送到内核空间并提交给IPVS模块,最终实现IPVS模块的负载均衡功能。

5、 Netlink Reflector

用来实现高可用集群中Failover时虚拟IP(VIP)的设置和切换。Netlink Reflector的所有请求最后都发送到内核空间层的NETLINK模块来完成。

配置文件说明

keepalived配置文件按层级和模块划分的,每层由"{ }"来界定。 在主配置文件中可以通过include来涵盖多个子配置文件。 语法说明:

BOOL: on|off|true|false|yes|no

TIMER: 以秒为单位的时间值,包括小数秒,如3,2.71828。计时器的分辨率是微妙。

关于脚本引用:

双引号"字符串中嵌入其他双引号或空格,那么字符串将仅在带引号的字符串之后结束(如:“abcd” efg h jkl “mnop” 等同于 “abcd efg h jkl mnop”;)。

对于使用参数指定脚本,不带引号的空格将分隔参数。如果参数需要包含空格,则应将其括在单引号(')中

配置文件结构

! Configuration File for keepalived# 全局定义
global_defs {# 指定接收通知的邮箱地址列表notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}# 指定发件人的邮箱地址notification_email_from Alexandre.Cassen@firewall.loc# SMTP 服务器地址,用于发送邮箱通知smtp_server 192.168.200.1# SMTP 连接超时时间smtp_connect_timeout 30# 标识当前节点的唯一 IDrouter_id LVS_DEVEL# 跳过检查 VRRP 广播地址vrrp_skip_check_adv_addr# 其余严格的 VRRP 模式vrrp_strict# 设置 GARP 的时间间隔vrrp_garp_interval 0# 设置 GNA 的时间间隔vrrp_gna_interval 0
}# VRRP 实例
vrrp_instance VI_1 {# 当前节点的角色 (MASTER 或 BACKUP)。主节点设置为 MASTER,从节点设置为 BACKUPstate MASTER# 绑定的网络接口(如 eth0)interface eth0# 虚拟路由的 ID(范围0 - 255),同一组中的所有节点必须使用相同的值virtual_router_id 51# 节点的优先级(范围1 - 254),数值越高优先级越高priority 100# VRRP 广播间隔时间(秒)advert_int 1# VRRP 认证信息authentication {# 认证类型(PASS 表示简单密码认证)auth_type PASS# 认证密码auth_pass 1111}# 虚拟 IP 地址列表,这些 IP 将绑定在当前节点的网络接口上virtual_ipaddress {192.168.200.16192.168.200.17192.168.200.18}
}# 虚拟服务器
# 定义一个虚拟服务器,监听指定的IP 和端口(如:192.168.200.100 443)
virtual_server 192.168.200.100 443 {# 健康检查的间隔时间(秒)delay_loop 6# 负载均衡算法(如 rr 表示轮训)lb_algo rr# 负载均衡模式(如 NAT 表示网络地址转换)lb_kind NAT# 会话保持时间(秒)persistence_timeout 50# 协议类型(TCP)protocol TCP# 定义真实后端服务器real_server 192.168.201.100 443 {# 权重值,用于分配流量的比例weight 1# 使用 SSL 请求进行健康检查SSL_GET {# 检查的目标 URL 及其 MD5 摘要值url {path /digest ff20ad2481f97b1754ef3e12ecd3a9cc}url {path /mrtg/digest 9b3a0c85a887a256d6939da88aabd8cd}# 连接超时时间connect_timeout 3# 失败后重试时间retry 3# 重试前的延迟时间delay_before_retry 3}}
}

配置文件包括以下几个模块:

1.GLOBAL CONFIGURATION

包含配置文件中的global_defs、static_ipaddress、static_route区域,负责定义邮件的相关配置、route_id、vrrp配置、多播地址、节点的ip和路由信息等

global_defs 全局配置
vrrpd1. vrrp_script添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。2. vrrp_sync_group将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover3. garp_group4. vrrp_instance
LVS配置
virtual_serverreal_server
real_server中的健康检查
HTTP_GET or SSL_GET
TCP_CHECK
TCP_CHECK
DNS_CHECK
DNS_CHECK

全局配置模块

! Configuration File for keepalived
global_defs {                                     #全局定义部分notification_email {                          #设置报警邮件地址,可设置多个acassen@firewall.loc                      #接收通知的邮件地址failover@firewall.loc}                        notification_email_from test0@163.com         #设置 发送邮件通知的地址smtp_server smtp.163.com                      #设置 smtp server 地址,可是ip或域名.可选端口号 (默认25)smtp_connect_timeout 30                       #设置 连接 smtp server的超时时间router_id LVS_DEVEL                           #主机标识,用于邮件通知vrrp_strict                                   #严格执行VRRP协议规范,此模式不支持节点单播script_user keepalived_script                 #指定运行脚本的用户名和组。默认使用用户的默认组。如未指定,默认为keepalived_script 用户,如无此用户,则使用rootenable_script_security                        #如过路径为非root可写,不要配置脚本为root用户执行。
}

2.BFD CONFIGURATION

用于快速检测系统之间的通信故障,并在出现故障时通知上层应用。

它具有两优点:

对网络设备间任意类型的双向转发路径提供快速、轻负荷的故障检测

用单一的机制对任何介质、任何协议层进行实时检测,并支持不同的检测时间与开销

3. VRRPD CONFIGURATION

包含配置文件中的vrrp_script、vrrp_instance、vrrp_sync_group、garp_group区域,负责定义每个vrrp虚拟路由器

vrrp_script配置

作用:添加一个周期性执行的脚本。脚本的退出状态码会被调用它的所有的VRRP Instance记录。
注意:至少有一个VRRP实例调用它并且优先级不能为0.优先级范围是1-254.
vrrp_script <SCRIPT_NAME> {...}
选项说明:
script "/path/to/somewhere":指定要执行的脚本的路径。
interval <INTEGER>:指定脚本执行的间隔。单位是秒。默认为1s。
timeout <INTEGER>:指定在多少秒后,脚本被认为执行失败。
weight <-254 --- 254>:调整优先级。默认为2.
rise <INTEGER>:执行成功多少次才认为是成功。
fall <INTEGER>:执行失败多少次才认为失败。
user <USERNAME> [GROUPNAME]:运行脚本的用户和组。
init_fail:假设脚本初始状态是失败状态。
解释:
weight: 
1. 如果脚本执行成功(退出状态码为0),weight大于0,则priority增加。
2. 如果脚本执行失败(退出状态码为非0),weight小于0,则priority减少。
3. 其他情况下,priority不变

vrrp_instance

命令说明:
state MASTER|BACKUP:指定该keepalived节点的初始状态。
interface eth0:vrrp实例绑定的接口,用于发送VRRP包。
use_vmac [<VMAC_INTERFACE>]:在指定的接口产生一个子接口,如vrrp.51,该接口的MAC地址为组播地址,通过该接口向外发送和接收VRRP包。
vmac_xmit_base:通过基本接口向外发送和接收VRRP数据包,而不是通过VMAC接口。
native_ipv6:强制VRRP实例使用IPV6.(当同时配置了IPV4和IPV6的时候)
dont_track_primary:忽略VRRP接口的错误,默认是没有配置的。
track_interface {eth0eth1 weight <-254-254>...
}:如果track的接口有任何一个出现故障,都会进入FAULT状态。
track_script {<SCRIPT_NAME><SCRIPT_NAME> weight <-254-254>
}:添加一个track脚本(vrrp_script配置的脚本。)
mcast_src_ip <IPADDR>:指定发送组播数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
unicast_src_ip <IPADDR>:指定发送单薄数据包的源IP地址。默认是绑定VRRP实例的接口的主IP地址。
version 2|3:指定该实例所使用的VRRP版本。
unicast_peer {<IPADDR>...
}:采用单播的方式发送VRRP通告,指定单播邻居的IP地址。
virtual_router_id 51:指定VRRP实例ID,范围是0-255.
priority 100:指定优先级,优先级高的将成为MASTER。
advert_int 1:指定发送VRRP通告的间隔。单位是秒。
authentication {auth_type PASS|AH:指定认证方式。PASS简单密码认证(推荐),AH:IPSEC认证(不推荐)。auth_pass 1234:指定认证所使用的密码。最多8位。
}
virtual_ipaddress {<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE> label <LABEL>192.168.200.17/24 dev eth1192.168.200.18/24 dev eth2 label eth2:1
}:指定VIP地址。
nopreempt:设置为不抢占。默认是抢占的,当高优先级的机器恢复后,会抢占低优先级的机器成为MASTER,而不抢占,则允许低优先级的机器继续成为MASTER,即使高优先级的机器已经上线。如果要使用这个功能,则初始化状态必须为BACKUP。
preempt_delay:设置抢占延迟。单位是秒,范围是0---1000,默认是0.发现低优先级的MASTER后多少秒开始抢占。
通知脚本:
notify_master <STRING>|<QUOTED-STRING> [username [groupname]]
notify_backup <STRING>|<QUOTED-STRING> [username [groupname]]
notify_fault <STRING>|<QUOTED-STRING> [username [groupname]]
notify <STRING>|<QUOTED-STRING> [username [groupname]]
# 当停止VRRP时执行的脚本。
notify_stop <STRING>|<QUOTED-STRING> [username [groupname]]
smtp_alert

vrrp_sync_group

作用:将所有相关的VRRP实例定义在一起,作为一个VRRP Group,如果组内的任意一个实例出现问题,都可以实现Failover。vrrp_sync_group VG_1 {group {inside_network     # vrrp instance nameoutside_network    # vrrp instance name...}...
}
说明:
如果username和groupname没有指定,则以默认的script_user所指定的用户和组。
1. notify_master /path/to_master.sh [username [groupname]]作用:当成为MASTER时,以指定的用户和组执行脚本。
2. notify_backup /path/to_backup.sh [username [groupname]]作用:当成为BACKUP时,以指定的用户和组执行脚本。
3. notify_fault "/path/fault.sh VG_1" [username [groupname]]作用:当该同步组Fault时,以指定的用户和组执行脚本。
4. notify /path/notify.sh [username [groupname]]作用:在任何状态都会以指定的用户和组执行脚本。说明:该脚本会在notify_*脚本后执行。notify可以使用3个参数,如下:$1:可以是GROUP或INTANCE,表明后面是组还是实例。$2:组名或实例名。$3:转换后的目标状态。有:MASTER、BACKUP、FAULT。
5. smtp_alert:当状态发生改变时,发送邮件。
6. global_tracking:所有的VRRP实例共享相同的tracking配置。
注意:脚本文件要加上x权限,同时指令最好写绝对路径。

4.LVS CONFIGURATION

包含配置文件中的virtual_server_group、virtual_server区域,负责lvs集群配置

LVS模块结构:
virtual_server{...real_server{...}
}

virtual_server

virtual_server IP Port | virtual_server fwmark int | virtual_server group string {delay_loop <INT>:健康检查的时间间隔。lb_argo rr|wrr|lc|wlc|lblc|sh|dh:LVS调度算法。lb_kind NAT|DR|TUN:LVS模式。persistence_timeout 360:持久化超时时间,单位是秒。默认是6分钟。persistence_granularity:持久化连接的颗粒度。protocol TCP|UDP|SCTP:4层协议。ha_suspend:如果virtual server的IP地址没有设置,则不进行后端服务器的健康检查。virtualhost <STRING>:为HTTP_GET和SSL_GET执行要检查的虚拟主机。如virtualhost www.felix.comsorry_server <IPADDR> <PORT>:添加一个备用服务器。当所有的RS都故障时。sorry_server_inhibit:将inhibit_on_failure指令应用于sorry_server指令。alpha:在keepalived启动时,假设所有的RS都是down,以及健康检查是失败的。有助于防止启动时的误报。默认是禁用的。omega:在keepalived终止时,会执行quorum_down指令所定义的脚本。quorum <INT>:默认值1. 所有的存活的服务器的总的最小权重。quorum_up <STRING>:当quorum增长到满足quorum所定义的值时,执行该脚本。quorum_down <STRING>:当quorum减少到不满足quorum所定义的值时,执行该脚本。
}

real_server

real_server IP Port {weight <INT>:给服务器指定权重。默认是1.inhibit_on_failure:当服务器健康检查失败时,将其weight设置为0,而不是从Virtual Server中移除。notify_up <STRING>:当服务器健康检查成功时,执行的脚本。notify_down <STRING>:当服务器健康检查失败时,执行的脚本。uthreshold <INT>:到这台服务器的最大连接数。lthreshold <INT>:到这台服务器的最小连接数。
}

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

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

相关文章

数据分享:汽车测评数据

说明&#xff1a;如需数据可以直接到文章最后关注获取。 1.数据背景 Car Evaluation汽车测评数据集是一个经典的机器学习数据集&#xff0c;最初由 Marko Bohanec 和 Blaz Zupan 创建&#xff0c;并在 1997 年发表于论文 "Classifier learning from examples: Common …

NLP简介及其发展历史

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和计算机科学领域中的一个重要分支&#xff0c;致力于实现人与计算机之间自然、高效的语言交流。本文将介绍NLP的基本概念以及其发展历史。 一、什么是自然语言处理&#xff1f…

HOOPS Visualize:跨平台、高性能的三维图形渲染技术解析

在当今数字化时代&#xff0c;三维可视化技术已成为众多行业的核心竞争力。HOOPS Visualize作为一款功能强大的三维图形渲染引擎&#xff0c;凭借其卓越的渲染能力、跨平台支持、丰富的交互功能、高度定制化以及快速部署等特性&#xff0c;为开发人员提供了构建高质量、高性能3…

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Java面试黄金宝典44

1. 查看进程的运行堆栈信息命令 gstack gstack 是 Linux 系统下用于查看指定进程运行时堆栈信息的工具。当程序出现崩溃、死锁或者性能瓶颈等问题时,借助 gstack 可以查看进程中各个线程的调用栈,从而辅助开发人员定位问题。 定义 gstack 本质上是一个封装了底层 ptrace 系统…

嵌入式硬件篇---TOF陀螺仪SPI液晶屏

文章目录 前言1. TOF传感器&#xff08;Time of Flight&#xff09;原理STM32使用方法硬件连接SDASCLVCC\GND 软件配置初始化I2C外设库函数驱动&#xff1a;读取数据 2. 陀螺仪&#xff08;如MPU6050&#xff09;原理STM32使用方法硬件连接SDA/SCLINTVCC/GND 软件配置初始化I2C…

【scikit-learn基础】--『预处理』之 正则化

数据的预处理是数据分析&#xff0c;或者机器学习训练前的重要步骤。 通过数据预处理&#xff0c;可以 提高数据质量&#xff0c;处理数据的缺失值、异常值和重复值等问题&#xff0c;增加数据的准确性和可靠性整合不同数据&#xff0c;数据的来源和结构可能多种多样&#xff…

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵

目录 前言 一、子串 1. 和为 K 的子数组 2. 滑动窗口最大值 3. 最小覆盖子串 二、普通数组 4. 最大子数组和 5. 合并区间 6. 轮转数组 7. 除自身以外数组的乘积 8. 缺失的第一个正数 三、矩阵 9. 矩阵置零 10. 螺旋矩阵 11. 旋转图像 12. 搜索二维矩阵 II 前言 一、子串&#…

【Git 常用操作指令指南】

一、初始化与配置 1. 设置全局账户信息 git config --global user.name "用户名" # 设置全局用户名 git config --global user.email "邮箱" # 设置全局邮箱 --global 表示全局生效&#xff0c;若需针对单个仓库配置&#xff0c;可省略该参数 2.…

教培行业创建自己品牌的重要意义——教育培训小程序

在竞争激烈的教培行业&#xff0c;创建自身品牌意义重大。 拥有独特品牌能显著提升机构竞争力与辨识度。如今教培市场同质化严重&#xff0c;一个亮眼的品牌小程序可使机构从众多竞争者中脱颖而出&#xff0c;让学员和家长快速识别并记住。 品牌小程序有助于增强信任度和口碑。…

Docker 介绍 · 安装详细教程

为什么选择 Docker&#xff1f; ✅ 环境一致性 – 告别“在我机器上能跑”的问题&#xff0c;确保开发、测试、生产环境一致。 ✅ 高效轻量 – 秒级启动&#xff0c;资源占用远低于传统虚拟机。 ✅ 跨平台支持 – 可在任何支持 Docker 的环境中运行&#xff0c;包括云服务器、…

GitHub 上开源一个小项目的完整指南

GitHub 上开源一个小项目的完整指南 &#x1f680; 第一步&#xff1a;准备你的项目 在开源之前&#xff0c;确保项目是可用且有一定结构的&#xff1a; ✅ 最低要求 项目文件清晰、结构合理&#xff08;比如&#xff1a;src/、README.md、LICENSE&#xff09;项目能在本地正…

React 第三十节 使用 useState 和 useEffect Hook实现购物车

不使用 redux 实现 购物车案例 使用 React 自带的 useState 和 useEffect Hook 即可实现购物车 export default function ShoppingCar() {// 要结算的商品 总数 以及总价const [totalNum, setTotalNum] useState(0)const [totalPerice, setTotalPerice] useState(0)// 商品…

蓝桥杯第十一届省赛C++B组真题解析

蓝桥杯第十一届省赛CB组真题解析 八、回文日期https://www.lanqiao.cn/problems/348/learning 方法一&#xff1a;暴力枚举所有的日期&#xff0c;记录有多少个回文日期。 #include <bits/stdc.h> using namespace std; int month[13]{0,31,28,31,30,31,30,31,31,30,31…

Python和MicroPython的解释器区别

Python和MicroPython的解释器不是同一个&#xff0c;它们在设计目标、实现方式和运行环境上都有显著的区别。以下是它们的主要区别&#xff1a; 1. 底层实现 Python解释器&#xff08;CPython&#xff09;&#xff1a; Python的标准解释器是CPython&#xff08;C语言实现的Pyt…

Cython加密多层目录中的Python脚本方案

近期有一个VueJavaDocker项目中需要加密Python脚本的需求&#xff0c;调研后决定采用Cython。 使用Cython编译为二进制 步骤&#xff1a; 安装Cython&#xff1a;pip install cython创建setup.py&#xff1a; from distutils.core import setup from Cython.Build import c…

力扣DAY40-45 | 热100 | 二叉树:直径、层次遍历、有序数组->二叉搜索树、验证二叉搜索树、二叉搜索树中第K小的元素、右视图

前言 简单、中等 √ 好久没更了&#xff0c;感觉二叉树来回就那些。有点变懒要警醒&#xff0c;不能止步于笨方法&#xff01;&#xff01; 二叉树的直径 我的题解 遍历每个节点&#xff0c;左节点最大深度右节点最大深度当前节点当前节点为中心的直径。如果左节点深度更大…

头歌数据库【数据库概论】第10-11章 故障恢复与并发控制

第1关&#xff1a;数据库恢复技术 1、事务的&#xff08; A&#xff09;特性要求事务必须被视为一个不可分割的最小工作单元 A、原子性 B、一致性 C、隔离性 D、持久性 2、事务的&#xff08;C &#xff09;特性要求一个事务在执行时&#xff0c;不会受到其他事务的影响。 A、原…

windows下,cursor连接MCP服务器

1.下载并安装node 安装后&#xff0c;在cmd命令框中&#xff0c;输入命令node -v可以打印版本号&#xff0c;证明安装完成 2.下载MCP服务器项目 在MCP服务器找到对应项目&#xff0c;这里以server-sequential-thinking为例子 在本地cmd命令窗口&#xff0c;使用下面命令下载…

前端配置husky,commit-lint导致的git提交错误:git xx@0.0.0 lint:lint-staged

前端配置husky&#xff0c;commit-lint导致的git提交错误&#xff1a;git xx0.0.0 lint:lint-staged git commit -m "xxx"时出现以下报错&#xff0c;可能是前端配置husky&#xff0c;commit-lint的原因 //报错信息 git xx0.0.0 lint:lint-staged首先要知道出现这个错…