当前位置: 首页 > news >正文

keepalived的技术原理及其在负载均衡场景中的应用

keepalived的技术原理及其在负载均衡场景中的应用

      • 深入探讨Keepalived及其在负载均衡场景中的应用
        • 1. **Keepalived概述**
        • 2. **Keepalived的技术原理**
          • 2.1 **VRRP协议**
          • 2.2 **健康检查机制**
          • 2.3 **脚本管理**
        • 3. **Keepalived与LVS的结合应用**
          • 3.1 **LVS优缺点**
        • 4. **Nginx与HAProxy的优缺点分析**
          • 4.1 **Nginx优缺点**
          • 4.2 **HAProxy优缺点**
        • 5. **Keepalived的应用场景及案例分析**
          • 5.1 **场景1:网站高可用架构**
          • 5.2 **场景2:数据库集群负载均衡**
          • 5.3 **场景3:文件存储集群**
        • 6. **集群与分布式系统的对比**
        • 7. **集群设计原则与最佳实践**
      • 1. **LVS配置说明**
        • 1.1 **安装LVS**
        • 1.2 **配置LVS的NAT模式**
        • 1.3 **配置LVS的DR模式**
      • 2. **Keepalived配置说明**
        • 2.1 **安装Keepalived**
        • 2.2 **Keepalived的基本配置**
        • 2.3 **启动Keepalived**
      • 3. **Nginx配置说明**
        • 3.1 **安装Nginx**
        • 3.2 **配置Nginx负载均衡**
        • 3.3 **启动Nginx**
      • 4. **HAProxy配置说明**
        • 4.1 **安装HAProxy**
        • 4.2 **HAProxy的基本配置**
        • 4.3 **启动HAProxy**
      • 5. **Keepalived与HAProxy、Nginx结合的使用**
        • 5.1 **Keepalived结合Nginx**
        • 5.2 **Keepalived结合HAProxy**

深入探讨Keepalived及其在负载均衡场景中的应用

1. Keepalived概述

Keepalived是一个高可用性(HA)解决方案,它的主要功能是配合LVS(Linux Virtual Server)实现负载均衡,并通过VRRP(Virtual Router Redundancy Protocol)实现故障转移。Keepalived的工作机制是监控系统资源与服务的健康状态,当发现主节点发生故障时,能够自动切换到备份节点,从而实现服务的高可用性。

2. Keepalived的技术原理

Keepalived的核心技术包括VRRP协议、健康检查机制以及脚本管理。以下是对每个关键技术的深入分析:

2.1 VRRP协议

VRRP是Keepalived实现高可用的核心技术。VRRP允许在一组路由器之间共享一个虚拟IP地址,当主节点故障时,备份节点能够接管该虚拟IP,从而确保外界访问不间断。Keepalived通过监控主节点的运行状态,确保在发生故障时,及时触发主备切换。

2.2 健康检查机制

Keepalived能够对LVS集群中的后端服务器进行健康检查,确保负载均衡器仅将流量分发给正常运行的服务器。这种检查可以通过TCP、HTTP或自定义脚本进行,一旦某台服务器出现问题,Keepalived会自动将其从负载均衡池中移除。

2.3 脚本管理

Keepalived允许管理员自定义脚本来进行更细粒度的管理,如网络接口检查、应用状态检测等。通过这些脚本,可以实现灵活的负载均衡策略和自动化故障处理。

3. Keepalived与LVS的结合应用

Keepalived通常与LVS结合使用,主要负责主备切换及节点健康检查。LVS是一个工作在OSI模型第4层的负载均衡器,它能够处理大量的并发请求并将其分发给多个后端服务器。LVS通过与Keepalived配合,可以实现稳定的高可用集群架构。

3.1 LVS优缺点

优点:

  1. 高性能抗负载能力:LVS工作在OSI模型的第4层,主要负责分发流量,极少占用系统资源,能处理超大规模的并发请求。
  2. 稳定性强:LVS具有完善的双机热备方案,能确保在出现节点故障时无缝切换,如LVS+Keepalived或LVS+Heartbeat的组合。
  3. 广泛适用性:LVS支持几乎所有类型的应用程序负载均衡,包括HTTP、数据库、DNS等服务。
  4. 简单配置:配置选项相对较少,减少了人为配置错误的可能性。

缺点:

  1. 不支持7层分流:由于LVS工作在第4层,它无法处理基于应用层协议的流量调度,如动静分离等。
  2. 复杂性高:对于较为庞大的系统架构,如Windows Server应用的环境,LVS/DR模式下的Keepalived配置复杂,维护成本较高。
4. Nginx与HAProxy的优缺点分析

为了更好地理解Keepalived的作用,我们需要对比与之常配合使用的负载均衡器,如Nginx和HAProxy。

4.1 Nginx优缺点

优点:

  1. 支持7层策略:Nginx工作在OSI模型的第7层,能够根据HTTP协议进行细致的流量分配,如根据域名、URL、目录等信息进行分流。
  2. 配置简单:Nginx的配置相对简单,易于部署与维护,适合中小型企业使用。
  3. 高并发处理能力:Nginx能够承受巨大的并发请求,适用于高流量的静态资源分发。
  4. 多功能性:除了作为负载均衡器,Nginx还是一个高效的Web服务器,能够同时处理反向代理和缓存任务。

缺点:

  1. 不支持URL健康检查:Nginx对后端服务器的健康检查功能相对简单。
  2. 支持协议有限:Nginx仅支持HTTP和Email协议的负载均衡,功能相对较为局限。
4.2 HAProxy优缺点

优点:

  1. 多层支持:HAProxy既可以工作在OSI模型的第4层,也可以工作在第7层,具备极强的灵活性。
  2. 高效会话保持:HAProxy在Session保持和Cookie管理方面比Nginx更为出色,适合需要精细化流量调度的应用场景。
  3. 丰富的负载均衡算法:HAProxy支持多种负载均衡算法,能够根据不同业务需求灵活调整。

缺点:

  1. 性能不及LVS:尽管HAProxy在应用层上表现出色,但在大规模的高并发场景下,性能依然不如LVS。
5. Keepalived的应用场景及案例分析

以下是几个常见的Keepalived应用场景,以帮助读者更好地理解Keepalived的优势与使用方法。

5.1 场景1:网站高可用架构

在一个大型电子商务网站中,前端负载均衡器负责分发流量到多个后端服务器。通过使用LVS+Keepalived的架构,可以确保即使某台服务器出现问题,系统也能自动将流量转移到健康的服务器上,确保用户的访问不中断。

案例分析:某大型电商平台每天处理数百万的并发请求,采用LVS+Keepalived作为前端流量分发层,通过Keepalived的健康检查与主备切换功能,能够在主服务器故障时立即切换到备份服务器,保证服务持续可用。

5.2 场景2:数据库集群负载均衡

在数据库集群中,使用HAProxy与Keepalived能够实现MySQL读请求的负载均衡和故障转移。Keepalived负责管理虚拟IP,并在主数据库节点故障时切换到备用节点。

案例分析:某金融企业使用Keepalived管理MySQL数据库集群的高可用性,HAProxy分发读请求,Keepalived负责在数据库节点故障时自动切换,避免手动干预。

5.3 场景3:文件存储集群

在分布式存储系统中,Ceph、GlusterFS等分布式存储系统常与Keepalived配合使用,确保存储节点的高可用性。通过Keepalived监控存储节点状态,能够保证在节点故障时自动切换存储服务,避免数据丢失。

6. 集群与分布式系统的对比

集群和分布式系统是现代互联网架构的两大核心技术。集群主要是为了提升系统的高可用性和扩展性,而分布式系统则侧重于提高系统的计算和存储能力。

集群特点:

  1. 任务调度核心:通过任务调度技术,集群系统能够将大量的请求均匀地分配到不同的服务器上,从而提高系统整体的处理效率。
  2. 高可用性保障:集群系统能够在任意一台服务器发生故障时,通过负载均衡器或Keepalived等高可用工具实现无缝切换。

分布式特点:

  1. 资源分布:分布式系统中,每个节点处理不同的业务功能,能够通过水平扩展来应对海量请求和数据处理需求。
  2. 独立性强:分布式系统的每个节点功能各不相同,当某个节点故障时,只会影响其负责的子业务,不会影响整个系统。
7. 集群设计原则与最佳实践

在设计高可用集群时,以下原则是确保系统稳定性和扩展性的关键:

  1. 可扩展性:系统应具备横向扩展的能力,能够通过增加服务器节点来提升处理能力。
  2. 高可用性:确保服务的无故障时间(SLA),通过Keepalived等工具实现快速故障切换。
  3. 性能优化:通过负载均衡技术优化响应时间,提升用户体验。
  4. 容量管理:确保在高并发场景下,系统能够处理大量请求而不产生性能瓶颈。

在深入探讨Keepalived、LVS、Nginx和HAProxy等技术原理之后,我我们在一起了解下相关配置:

1. LVS配置说明

LVS主要用于四层负载均衡,可以通过ipvsadm工具配置,常用的模式包括NAT、DR(直接路由)、TUN(IP隧道)模式。以下是LVS的基础配置步骤:

1.1 安装LVS
sudo apt-get install ipvsadm -y  # Ubuntu系统
sudo yum install ipvsadm -y      # CentOS系统
1.2 配置LVS的NAT模式

NAT模式下,LVS会修改数据包的目标地址并转发给后端服务器。

  • 添加虚拟服务(VIP:192.168.1.100:80):
ipvsadm -A -t 192.168.1.100:80 -s rr
  • 添加真实服务器(RIP:192.168.1.101和192.168.1.102):
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -m
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -m
  • 查看LVS配置:
ipvsadm -L -n
1.3 配置LVS的DR模式

DR模式不修改数据包的源或目的IP,适用于局域网内部负载均衡。

  • 添加虚拟服务:
ipvsadm -A -t 192.168.1.100:80 -s rr
  • 添加真实服务器:
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.101:80 -g
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.102:80 -g

2. Keepalived配置说明

Keepalived主要用于实现LVS的高可用性和节点监控,它通过VRRP协议实现主备切换。

2.1 安装Keepalived
sudo apt-get install keepalived -y  # Ubuntu系统
sudo yum install keepalived -y      # CentOS系统
2.2 Keepalived的基本配置

Keepalived的配置文件位于/etc/keepalived/keepalived.conf,可以通过编辑该文件配置虚拟IP和健康检查。

  • 配置主节点:
vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100}
}
  • 配置备节点:
vrrp_instance VI_1 {state BACKUPinterface eth0virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100}
}
2.3 启动Keepalived
sudo systemctl start keepalived
sudo systemctl enable keepalived

3. Nginx配置说明

Nginx支持HTTP和HTTPS协议的七层负载均衡,通过其强大的反向代理功能,可以处理复杂的流量调度需求。

3.1 安装Nginx
sudo apt-get install nginx -y  # Ubuntu系统
sudo yum install nginx -y      # CentOS系统
3.2 配置Nginx负载均衡

Nginx的配置文件通常位于/etc/nginx/nginx.conf,可以通过以下配置实现简单的HTTP负载均衡。

http {upstream backend {server 192.168.1.101;server 192.168.1.102;}server {listen 80;server_name www.example.com;location / {proxy_pass http://backend;}}
}
3.3 启动Nginx
sudo systemctl start nginx
sudo systemctl enable nginx

4. HAProxy配置说明

HAProxy支持四层和七层负载均衡,能够处理复杂的负载均衡策略。

4.1 安装HAProxy
sudo apt-get install haproxy -y  # Ubuntu系统
sudo yum install haproxy -y      # CentOS系统
4.2 HAProxy的基本配置

HAProxy的配置文件通常位于/etc/haproxy/haproxy.cfg,以下是一个简单的HTTP负载均衡配置示例。

globallog /dev/log local0maxconn 4096defaultslog globalmode httptimeout connect 5000mstimeout client 50000mstimeout server 50000msfrontend http_frontbind *:80default_backend http_backbackend http_backbalance roundrobinserver web1 192.168.1.101:80 checkserver web2 192.168.1.102:80 check
4.3 启动HAProxy
sudo systemctl start haproxy
sudo systemctl enable haproxy

5. Keepalived与HAProxy、Nginx结合的使用

Keepalived通常与Nginx或HAProxy一起使用,以实现更高级别的高可用性架构。通过Keepalived管理虚拟IP,并在节点故障时自动切换到备节点,确保系统的持续可用。

5.1 Keepalived结合Nginx

/etc/keepalived/keepalived.conf文件中添加如下配置,保证在Nginx服务器故障时能够自动切换到备份节点。

vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100}track_script {chk_nginx}
}vrrp_script chk_nginx {script "pidof nginx"interval 2
}
5.2 Keepalived结合HAProxy

类似地,可以通过Keepalived对HAProxy进行监控,在HAProxy故障时自动进行切换。

vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.1.100}track_script {chk_haproxy}
}vrrp_script chk_haproxy {script "pidof haproxy"interval 2
}

相关文章:

keepalived的技术原理及其在负载均衡场景中的应用

keepalived的技术原理及其在负载均衡场景中的应用 深入探讨Keepalived及其在负载均衡场景中的应用1. **Keepalived概述**2. **Keepalived的技术原理**2.1 **VRRP协议**2.2 **健康检查机制**2.3 **脚本管理** 3. **Keepalived与LVS的结合应用**3.1 **LVS优缺点** 4. **Nginx与HA…...

树的重心 by江河湖海

引入 重心是什么? 想象你有一个由线悬挂的秋千,秋千的两端坐着两个人,如果这两个人坐在秋千的重心上,秋千就会保持平衡。在树的结构中,重心就是那个让所有节点到它那里的“距离”(可以理解为线的长度)总和最小的点。 重心为什么最多只有两个? 假设树的重心有两个,…...

MySQL存储过程深入指南

MySQL存储过程深入指南 存储过程是MySQL中一个强大的功能,能够显著提升数据库操作的效率和灵活性。本文将全面介绍存储过程的概念、语法、使用方法及最佳实践,帮助读者熟练掌握存储过程的使用。 1. 什么是存储过程? 存储过程(Stored Procedure)是预先编译并存储在数据库…...

牛客算法小题

目录 牛客.求和​编辑 牛客.abb 牛客.合并k个有序链表 牛客.滑雪(暴力->递归->记忆化搜索) 牛客.旋转字符串 牛客.求和 我没想到是dfs,另外我的dfs能力确实也不强,另外难度大的是他的那个输出 import java.util.Scanne…...

小米SU7销量超特斯拉,新车明年上半年发布

小米 SU7,一款国内新能源车品牌纯血新势力旗下首款轿车,上市短短 4 个月卖出超 4 万台,月均销量过万。 该说不说,这放在整个新能源汽车工业史上也足以称得上是一件小刀喇拍屁股,让人开了眼的事儿。 就在本月初&#x…...

基于Java语言的光伏监控系统+光伏发电预测+光伏项目+光伏运维+光伏储能项目

基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 介绍 基于Java语言的光伏监控系统光伏发电系统光伏软件系统光伏监控系统源码光伏发电系统源码 基于Java语言的光伏监控系统光伏发电预测光伏项目光伏运维光伏储能项目 安装教程...

unity json 处理

1. c#对象 -> json public class Item {public int id;public int num;public Item(int id, int num){this.id id;this.num num;} } public class PlayerInfo {public string name;public int atk;public int def;public float moveSpeed;public double roundSpeed;publi…...

如何使用DataGear零编码快速制作MQTT物联网实时数据看板

DataGear是一个开源免费的数据可视化分析平台,企业版在开源版基础上开发,新增了诸多企业级特性,包括:MySQL及更多部署数据库支持、MQTT/WebSocket/Redis/MongoDB数据集、OAuth2.0/CAS/JWT/LDAP统一登录支持、前后端敏感信息加密传…...

Mysql查询日志

Mysql查询日志 Mysql查询日志默认是关闭状态的。 mysql> show variables like %general_log%; --------------------------------------- | Variable_name | Value | --------------------------------------- | general_log | OFF …...

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架,其项目由以下几个部分构成 Airtest : 一个跨平台的,基于图像识别的 UI 自动化测试框架,适用于游戏和 App , 支持 Windows, Android 和 iOS 平台&#xff0c…...

Android更改包名和签名

一、更改包名 1、包名——鼠标右键——Refactor——Rename 修改自己想更改的包名和选择更改范围后点击Refactor就可以了 2.手动修改app的build.gradle文件中的applicationId(改成和我们之前修改的包名相同) 3.修改AndroidManifest.xml文件中的packag…...

tortoisegit下载及其使用流程

下载 官方下载链接:Download – TortoiseGit – Windows Shell Interface to Git 选择适合自己的电脑位数的版本:一般64的兼容32的 按照就不介绍了怎么开心怎么来,本篇暂时为了支持一位粉丝的疑惑 安装的话没有特殊配置暂不介绍&#xff0c…...

Anrdoir 13 关于设置静态IP后,突然断电,在上电开机卡动画

bug描述:设置静态IP成功后,机器突然断电,然后在上电开机,发现机器一直卡在开机动画,无法成功进入桌面 第一时间抓取日志分析,Log如下: 08-13 11:26:42.455 2803 2803 I EthernetServiceImpl: Starting Ethernet service 08-13 11:26:42.457 2803 2924 D ConnectivityServ…...

multimodel ocr dataset

InternLM-XComposer2-4KHD InternLM-XComposer2-4KHD a light-weight Vision Encoder OpenAI ViT-Large/14Large Language Model InternLM2-7B, 这篇论文采用的是一种动态分辨率的输入; 全图有一个global view,resize到336*336; 然后把图片resize再pad…...

兼容并蓄,高效集成:EasyCVR视频综合接入能力助力多元化项目需求

随着视频技术的不断进步,视频监控、视频直播、执法记录仪、语音可视对讲、无人机等视频资源的应用场景日益丰富。这些视频资源不仅在数量上快速增长,而且在质量、格式、编码标准等方面也呈现出多样化的特点。因此,为了有效整合这些资源&#…...

linux 部署YUM仓库及NFS共享服务

目录 简介 一、YUM仓库服务 1.1 YUM概述 1.2 linux系统各家厂家用的安装源 1.3 yum命令 1.4 yum下载方式 1.5 部署YUM软件仓库 二、NFS共享存储服务 2.1 NFS共享存储服务概念 2.2 NFS配置环境 2.3 使用NFS发布共享资源 2.4 在客户端访问NFS共享 简介 yum&#xff…...

LCD 显示字符

1.0 字符显示 使用显示图片的方式显示字符会浪费存储空间,显示字符的时候字符的笔画是一个固定的颜色,因此不用使用显示图片的方式,可以使用1 表示字符的本身,0 表示字符的背景,使用这种方式显示字符节省存储空间。 注…...

NOI2003 逃学的小孩 题解

NOI2003 逃学的小孩 题解 传送门。 题目简述 给定一棵树 T T T,需要选择三个点 A , B , C A,B,C A,B,C,需要从 C C C 走到 A , B A,B A,B​​ 的最远距离。 (第一段题目是在讲剧情吗。。) 前置知识 图树树的直径 思路简…...

硬件服务器操作系统的选择:Linux 还是 Windows?

在这个科技日新月异的时代,云服务器虽然日益普及,但硬件服务器依然是众多云服务和数据中心不可或缺的基石。有趣的是,随着云服务器的兴起,不少工程师竟然未曾亲眼见过实体的硬件服务器。然而,事实是,无论是…...

dataV组件使用——数据更新更新组件

bug 当数据更新只更新一个属性页面不会刷新(this.config1.data arr;) 必须重新赋值整个config 方式一:检测到数据更新重新赋值config this.config1 {data: arr,header: ["所在单位", "人员姓名", "职位", &q…...

solana合约编写

文章目录 solana 合约编写整体思路Cargo.toml配置代码实现在 Solana 智能合约中,定义和管理可能的错误类型自定义一个 Solana 账户结构一个帐户的约束条件什么是bump账号获取指令参数编码基础常用总结format! 格式化字符串Option<String>Vec<u8>编译部署到localne…...

C++调用C#方法(附踩坑点)

C调用C#方法 写在前面效果思路步骤可能的问题 写在后面 写在前面 工作需要用C调用C#写到代码&#xff0c;看来网上写的方法&#xff0c;自己也踩了一些坑&#xff0c;这里总结一下&#xff0c;我只试了CLR的方法。 主要参考了下面几篇博客 C调用C#库简单例程&#xff08;Lucky…...

开源前端埋点监控插件Web-Tracing

Web-Tracing是一款专为前端项目设计的前端监控插件&#xff0c;它基于JavaScript设计&#xff0c;兼容跨平台使用&#xff0c;并提供了全方位的监控功能。 开源地址&#xff1a;https://gitee.com/junluoyu/web-tracing-analysis 以下是关于Web-Tracing的详细介绍&#xff1a;…...

智慧排水远程监测系统物联网解决方案

智慧排水监测系统是一种集成了现代信息技术、物联网技术、大数据分析及云计算能力的高效城市排水管理解决方案。该系统通过全面、实时地监控城市排水网络的运行状态&#xff0c;旨在预防内涝灾害&#xff0c;优化水资源管理&#xff0c;保障城市安全运行&#xff0c;促进可持续…...

【SVN(Subversion)是一个版本控制系统】

Question SVN所有命令 Answer SVN&#xff08;Subversion&#xff09;是一个版本控制系统&#xff0c;用于管理和跟踪文件和目录的更改。以下是一些常用的SVN命令&#xff1a; 检出&#xff08;Checkout&#xff09; svn checkout URL从版本库中检出一个工作副本。 更新&am…...

leetcode108.把升序数组转换成二叉搜索树

题目描述 [-10,-3,0,5,9] 转换成如下二叉搜索树&#xff1a; 解题的核心原理是&#xff1a;二叉搜索树的中序遍历结果是一个升序数组&#xff0c;所以根节点的数值&#xff0c;也位于数组的中部。 class Solution {public TreeNode sortedArrayToBST(int[] nums) {return h…...

用QTdesigner制作自己的双目标定软件

目录 1&#xff0c;设计布局软件界面 2&#xff0c;导出界面ui文件为python的.py文件 3&#xff0c;为界面添加对应的功能 4&#xff0c;导出为exe可执行文件 5&#xff0c;运行测试效果 5.1 双击启动 5.2 添加必要的参数 5.3 &#xff0c;运行结果 效果展示 动手制作双…...

MySQL:基础巩固-DDL

一、对数据库的操作 1.查询所有数据库 SHOW DATABASES;2. 查询当前使用的数据库 SELECT DATABASE();3. 创建数据库 CREATE DATABASE IF NOT EXISTS test DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;4. 删除数据库 DROP DATABASE IF EXISTS test;5. 使用数据库 …...

翻译软件在医学中的应用

翻译软件在医学中的应用非常广泛&#xff0c;主要体现在以下几个方面&#xff1a; 患者沟通&#xff1a;翻译软件可以帮助医务人员与非母语患者进行有效沟通&#xff0c;确保患者能够准确表达自己的症状和需求&#xff0c;也使医生能够清晰地解释治疗方案和用药说明。这对提升…...

政务大数据解决方案(六)

政务大数据解决方案通过建立综合数据平台&#xff0c;将来自各政府部门的异构数据整合并进行深入分析&#xff0c;利用人工智能和机器学习技术实现智能化数据处理与预测&#xff0c;从而提升政府决策的科学性和实时响应能力。方案涵盖数据采集、存储、处理、分析与可视化&#…...