LVS+Keepalived 高可用
目录
一、核心概念
1. LVS(Linux Virtual Server)
2. Keepalived
二、高可用架构设计
1. 架构拓扑图
2. 工作流程
三、部署步骤(以 DR 模式为例)
1. 环境准备
2. 主 LVS 节点配置
(1)安装 Keepalived
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
3. 备 LVS 节点配置
4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
(2)关闭 IP 转发
(3)启动 Nginx 服务
四、验证与维护
1. 状态检查
2. 故障切换测试
五、注意事项
六、扩展场景
命令解析
全局配置部分
VRRP 实例配置
LVS 虚拟服务器配置
后端服务器配置
配置总结
一、核心概念
1. LVS(Linux Virtual Server)
- 定义:基于 Linux 内核的负载均衡器,工作在 OSI 模型的第四层(传输层),通过 IP 和端口实现流量分发。
- 工作模式:
- NAT 模式:客户端请求经 LVS 转发至后端服务器,响应流量需通过 LVS 返回(需配置 SNAT/DNAT)。
- DR 模式(Direct Routing):LVS 仅转发请求,后端服务器直接响应客户端(需共享 VIP,配置路由或调整内核参数)。
- TUN 模式(隧道模式):通过 IP 隧道封装技术将请求转发至后端服务器(适用于跨网段场景)。
- 调度算法:
- 轮询(Round Robin)、加权轮询(Weighted RR)、最少连接(Least Connections)、加权最少连接(Weighted LC)等。
2. Keepalived
- 定义:基于 VRRP(Virtual Router Redundancy Protocol)协议的高可用解决方案,用于监控 LVS 节点状态,实现主备切换。
- 核心功能:
- 健康检查:通过 TCP、HTTP、SSL 等方式检测后端服务器和 LVS 节点的存活状态。
- 虚拟路由冗余:多个 Keepalived 节点组成 VRRP 组,共享一个虚拟 IP(VIP),主节点故障时自动切换至备节点。
二、高可用架构设计
1. 架构拓扑图
客户端 <---- VIP ----> [主LVS+Keepalived] <---- 内网 ----> 后端服务器集群└---- VIP ----> [备LVS+Keepalived]
- 关键组件:
- 主备 LVS 节点:运行 LVS 负载均衡服务,共享 VIP。
- Keepalived 服务:部署在主备 LVS 节点上,通过心跳机制同步状态。
- 后端服务器:处理实际业务请求,需配置为 LVS 的 Real Server。
2. 工作流程
- 正常状态:
- 主节点持有 VIP,接收客户端请求并通过 LVS 调度算法分发给后端服务器。
- 备节点处于待命状态,定期监听主节点心跳。
- 主节点故障:
- 备节点检测到主节点心跳丢失,接管 VIP 并成为新的主节点,继续处理流量。
- 原主节点恢复后,自动转为备节点(需配置抢占模式)。
三、部署步骤(以 DR 模式为例)
1. 环境准备
角色 | IP 地址 | 软件组件 |
---|---|---|
主 LVS 节点 | 192.168.1.100 | LVS+Keepalived |
备 LVS 节点 | 192.168.1.101 | LVS+Keepalived |
虚拟 IP(VIP) | 192.168.1.200 | - |
后端服务器 1 | 192.168.1.110 | Nginx+Keepalived(健康检查) |
后端服务器 2 | 192.168.1.111 | Nginx+Keepalived(健康检查) |
2. 主 LVS 节点配置
(1)安装 Keepalived
yum install keepalived -y
(2)配置 Keepalived 主节点(/etc/keepalived/keepalived.conf)
global_defs {router_id LVS_MASTER # 节点标识,主备需不同
}vrrp_instance VI_1 {state MASTER # 主节点状态(备节点为BACKUP)interface eth0 # 绑定VIP的网卡virtual_router_id 51 # VRRP组ID(主备需一致)priority 100 # 优先级(备节点设为90)advert_int 1 # 心跳间隔(秒)authentication {auth_type PASSauth_pass 1111 # 认证密码(主备需一致)}virtual_ipaddress {192.168.1.200/24 # 虚拟IP}
}# LVS健康检查(监控后端服务器)
virtual_server 192.168.1.200 80 {delay_loop 6 # 健康检查间隔(秒)lb_algo rr # 调度算法(轮询)lb_kind DR # 工作模式(DR)protocol TCP # 协议类型# 后端服务器配置real_server 192.168.1.110 80 {weight 1 # 服务器权重TCP_CHECK { # TCP健康检查connect_port 80connect_timeout 3retry 3delay_before_retry 3}}real_server 192.168.1.111 80 {weight 1TCP_CHECK {connect_port 80connect_timeout 3retry 3delay_before_retry 3}}
}
(3)配置 LVS 内核参数(DR 模式需关闭 ARP 响应)
echo "1" > /proc/sys/net/ipv4/conf/eth0/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
3. 备 LVS 节点配置
- Keepalived 配置:与主节点基本一致,需修改:
state BACKUP # 状态改为BACKUP priority 90 # 优先级低于主节点 router_id LVS_BACKUP # 节点标识不同
- 内核参数配置:与主节点相同。
4. 后端服务器配置(以 Nginx 为例)
(1)绑定 VIP(lo 接口,避免响应 ARP 请求)
ifconfig lo:0 192.168.1.200 netmask 255.255.255.255 broadcast 192.168.1.200
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
(2)关闭 IP 转发
echo "0" > /proc/sys/net/ipv4/ip_forward
(3)启动 Nginx 服务
yum install nginx -y
systemctl start nginx
四、验证与维护
1. 状态检查
- 查看 Keepalived 状态:
systemctl status keepalived # 主节点应显示"Master",备节点显示"Backup"
- 查看 VIP 绑定情况:
ip addr show eth0 | grep 192.168.1.200 # 主节点应存在VIP
- LVS 规则检查:
ipvsadm -L -n # 应显示后端服务器列表
2. 故障切换测试
- 停止主节点 Keepalived 服务:
systemctl stop keepalived
- 检查备节点是否接管 VIP,且 LVS 规则正常。
- 重启主节点 Keepalived,验证是否恢复为备节点(非抢占模式需手动切换)。
五、注意事项
- 网络互通性:
- 主备 LVS 节点需与后端服务器网络互通(DR 模式需共享 VIP 所在网段)。
- 后端服务器响应流量需直接返回给客户端,避免经过 LVS(需配置路由或环回接口)。
- 健康检查优化:
- 根据业务类型选择检查方式(如 HTTP 检查需配置 URL 路径)。
- 调整检查间隔(
delay_loop
)和重试次数,避免误判。
- 防火墙配置:
- 开放 Keepalived 心跳端口(UDP 112)和业务端口(如 80、443)。
- 在 DR 模式中,确保后端服务器不响应 VIP 的 ARP 请求。
六、扩展场景
- 多 VRRP 组:为不同业务配置独立的 VRRP 组,实现更细粒度的高可用。
- 负载均衡与高可用分离:使用独立节点部署 Keepalived,避免与 LVS 共享资源。
- 结合云平台:在云环境中通过浮动 IP(EIP)和私有网络实现 LVS+Keepalived 架构。
命令解析
全局配置部分
global_defs {router_id LVS_MASTER # 节点标识,主备需不同
}
global_defs
:定义全局参数
router_id
:标识 Keepalived 实例的唯一名称,主备节点必须不同,用于区分不同的 Keepalived 节点
VRRP 实例配置
vrrp_instance VI_1 {state MASTER # 主节点状态(备节点为BACKUP)interface eth0 # 绑定VIP的网卡virtual_router_id 51 # VRRP组ID(主备需一致)priority 100 # 优先级(备节点设为90)advert_int 1 # 心跳间隔(秒)authentication {auth_type PASSauth_pass 1111 # 认证密码(主备需一致)}virtual_ipaddress {192.168.1.200/24 # 虚拟IP}
}
vrrp_instance VI_1
:定义 VRRP 实例,名称为 VI_1state MASTER
:当前节点的初始状态,主节点为 MASTER,备节点为 BACKUPinterface eth0
:绑定虚拟 IP 的物理网卡virtual_router_id 51
:VRRP 组 ID,取值范围 1-255,主备节点必须相同priority 100
:节点优先级,数值越大优先级越高,主节点应高于备节点advert_int 1
:发送 VRRP 通告的时间间隔(心跳间隔)authentication
:VRRP 认证配置,防止非法节点加入auth_type PASS
:密码认证方式auth_pass 1111
:认证密码,主备必须一致
virtual_ipaddress
:定义虚拟 IP 地址,可配置多个
LVS 虚拟服务器配置
virtual_server 192.168.1.200 80 {delay_loop 6 # 健康检查间隔(秒)lb_algo rr # 调度算法(轮询)lb_kind DR # 工作模式(DR)protocol TCP # 协议类型
virtual_server
:定义虚拟服务器,即负载均衡的 VIP 和端口delay_loop 6
:健康检查的时间间隔(秒)lb_algo rr
:负载均衡调度算法- rr:轮询(Round Robin)
- wrr:加权轮询
- lc:最少连接(Least Connections)
- wlc:加权最少连接
lb_kind DR
:LVS 工作模式- DR:直接路由模式(Direct Routing)
- NAT:网络地址转换模式
- TUN:IP 隧道模式
protocol TCP
:使用 TCP 协议进行负载均衡
后端服务器配置
real_server 192.168.1.110 80 {weight 1 # 服务器权重TCP_CHECK { # TCP健康检查connect_port 80connect_timeout 3retry 3delay_before_retry 3}}
real_server
:定义真实服务器(后端服务器)的 IP 和端口weight 1
:服务器权重,数值越大被分配的请求越多TCP_CHECK
:TCP 健康检查配置connect_port 80
:检查的端口connect_timeout 3
:连接超时时间(秒)retry 3
:重试次数delay_before_retry 3
:重试前的延迟时间(秒)
配置总结
这个配置文件实现了一个基于 DR 模式的 LVS 负载均衡器的高可用方案:
- 使用 Keepalived 实现主备节点自动切换
- 虚拟 IP 地址为 192.168.1.200,绑定在 eth0 网卡上
- 负载均衡采用轮询算法,工作在 DR 模式
- 对两个后端服务器(192.168.1.110 和 192.168.1.111)进行健康检查
- 当主节点出现故障时,备节点将接管虚拟 IP 继续提供服务
配置注意事项:
- 主备节点的 virtual_router_id 和 auth_pass 必须相同
- 主备节点的 state 和 priority 必须不同
- 后端服务器需要配置 VIP 的回环地址,并设置合适的 ARP 参数
- DR 模式下,后端服务器需要和 LVS 在同一个物理网段
相关文章:
LVS+Keepalived 高可用
目录 一、核心概念 1. LVS(Linux Virtual Server) 2. Keepalived 二、高可用架构设计 1. 架构拓扑图 2. 工作流程 三、部署步骤(以 DR 模式为例) 1. 环境准备 2. 主 LVS 节点配置 (1)安装 Keepali…...

Linux正则三剑客篇
一、历史命令 history 命令 :用于输出历史上使用过的命令行数量及具体命令。通过 history 可以快速查看并回顾之前执行过的命令,方便重复操作或追溯执行过程。 !行号 :通过指定历史命令的行号来重新执行该行号对应的命令。例如,若…...
HTML5 视频播放器:从基础到进阶的实现指南
在现代Web开发中,视频播放功能是许多网站的重要组成部分。无论是在线教育平台、视频分享网站,还是企业官网,HTML5视频播放器都扮演着不可或缺的角色。本文将从基础到进阶,详细介绍如何实现一个功能完善的HTML5视频播放器ÿ…...
鸿蒙HarmonyOS (React Native)的实战教程
一、环境配置 安装鸿蒙专属模板 bashCopy Code npx react-native0.72.5 init HarmonyApp --template react-native-template-harmony:ml-citation{ref"4,6" data"citationList"} 配置 ArkTS 模块路径 在 entry/src/main/ets 目录下创建原生模块&…...
函数栈帧深度解析:从寄存器操作看函数调用机制
文章目录 一、程序运行的 "舞台":内存栈区与核心寄存器二、寄存器在函数调用中的核心作用三、函数调用全流程解析:以 main 调用 func 为例阶段 1:main 函数栈帧初始化**阶段 2:参数压栈(右→左顺序&#x…...

【计算机网络】第3章:传输层—可靠数据传输的原理
目录 一、PPT 二、总结 (一)可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心:滑…...
rv1126b sdk移植
DDR rkbin bin/rv11/rv1126bp_ddr_v1.00.bin v1.00 板子2 reboot异常 [ 90.334976] reboot:Restarting system DDR 950804cb85 wesley.yao 25/04/02-15:54:40,fwver: v1.00In Derate1 tREFI1x SR93 PD13 R ddrconf 4 rgef0 rgcsb0 1 ERR: Read gate CS0 err error ERR …...
第6节 Node.js 回调函数
Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。 例如,我们可以一边读取文…...

OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::equalizeHist 用于增强图像的对比度,通过将图像的灰度直方图重新分布,使得图像整体对比度更加明显。 这在医学…...

构建系统maven
1 前言 说真的,我是真的不想看构建了,因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja,Android BP。。。感觉学不完,根本学不完。。。 但是没办法最近又要用一下Maven,所以咬着牙再简单整理一下…...

day13 leetcode-hot100-23(链表2)
206. 反转链表 - 力扣(LeetCode) 1.迭代 思路 这个题目很简单,最主要的就是了解链表的数据结构。 链表由多个节点构成,每个节点包括值与指针,其中指针指向下一个节点(单链表)。 方法就是将指…...
Java面试八股(Java基础,Spring,SpringBoot篇)
java基础 JDK,JRE,JVMJava语言的特点Java常见的运行时异常Java为什么要封装自增自减的隐式转换移位运算符1. 左移运算符(<<)2. 带符号右移运算符(>>)3. 无符号右移运算符(>>>) 可变…...
Python编程基础(二)| 列表简介
引言:很久没有写 Python 了,有一点生疏。这是学习《Python 编程:从入门到实践(第3版)》的课后练习记录,主要目的是快速回顾基础知识。 练习1: 姓名 将一些朋友的姓名存储在一个列表中…...
支持向量机(SVM):解锁数据分类与回归的强大工具
在机器学习的世界中,支持向量机(Support Vector Machine,简称 SVM)一直以其强大的分类和回归能力而备受关注。本文将深入探讨 SVM 的核心功能,以及它如何在各种实际问题中发挥作用。 一、SVM 是什么? 支持…...

代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍蛋白质组定义与基因的关系蛋白质组学(Proteomics)检测技术蛋白质的鉴定与定量分析蛋白质“鉴定”怎么做蛋白质“定量”怎么做蛋白质鉴定与定量对比应用领域代谢组定义代谢组学(M…...

002 flutter基础 初始文件讲解(1)
在学习flutter的时候,要有“万物皆widget”的思想,这样有利于你的学习,话不多说,开始今天的学习 1.创建文件 进入trae后,按住ctrlshiftP,输入Flutter:New Project,回车,…...
AI 让无人机跟踪更精准——从视觉感知到智能预测
AI 让无人机跟踪更精准——从视觉感知到智能预测 无人机跟踪技术正在经历一场前所未有的变革。曾经,我们只能依靠 GPS 或简单的视觉识别来跟踪无人机,但如今,人工智能(AI)结合深度学习和高级视觉算法,正让无人机的跟踪变得更加智能化、精准化。 尤其是在自动驾驶、安防监…...

Launcher3体系化之路
👋 欢迎来到Launcher 3 背景 车企对于桌面的排版布局好像没有手机那般复杂,但也有一定的需求。部分场景下,要考虑的上下文比手机要多一些,比如有如下的一些场景: 手车互联。HiCar,CarPlay,An…...

用wireshark抓了个TCP通讯的包
昨儿个整理了下怎么用wireshark抓包,链接在这里:捋捋wireshark 今天打算抓个TCP通讯的包试试,整体来说比较有收获,给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端,问了下deepseek,…...

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破
在 VR/AR 设备逐渐走进大众生活的今天,显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过,随着铁电液晶技术的重大突破,这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…...
【前端】Vue中实现pdf逐页转图片,图片再逐张提取文字
给定场景:后端无法实现pdf转文字,由前端实现“pdf先转图片再转文字”。 方法: 假设我们在< template>中有一个元素存放我们处理过的canvas集合 <div id"canvasIDpdfs" />我们给定一个按钮,编写click函数&…...
焦虑而烦躁的上午
半年了,每逢周末或者节假日都被催着去医院。 今天早上依旧,还在睡梦之中,就被喊醒“赶紧得,抢上儿童医院的票了!” 无奈,从床上爬起来,草草用过早餐之后,奔赴儿童医院!…...

Python使用
Python学习,从安装,到简单应用 前言 Python作为胶水语言在web开发,数据分析,网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后,安装参考其他教程…...

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型,核心…...

【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.
目录 一、长时间显示:Task is queued 二、GraphRAG消耗大量Token 三、error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“ 四、ModuleNotFoundError: No module named infinity.common; infinity is not a package 五…...

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力
前言 电商数据分析在现代商业中具有重要的战略价值,通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析,企业能够获得对市场动态的精准洞察,优化运营决策,预测市场趋势、优化广告投放、提升供应链效率,并通…...

高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享
目录 高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享 一、什么是设计模式?为什么前端也要学? 1、设计模式是什么 2、设计模式的产出 二、设计模式在 JS 里的分类 三、常用设计模式实战讲解 1、单例模式(S…...
unix/linux source 命令,其发展历程详细时间线、由来、历史背景
追本溯源,探究技术的历史背景和发展脉络,能够帮助我们更深刻地理解其设计哲学和存在的意义。source 命令(或者说它的前身和等效形式)的历史,与 Unix Shell 本身的发展紧密相连。 让我们一起踏上这段追溯之旅,探索 source 命令的由来和发展历程。 早期 Unix Shell 与命令…...

2023年电赛C题——电感电容测量装置
一、赛题 二、题目分析——损耗角正切值 对于一个正常的正弦波信号,如果通过的是一个电阻或一条导线,那么它的电流信号和电压信号是一致的(有电压才有电流),没有相位差。 但是如果正弦波经过了一个电感或电容…...

pycharm打印时不换行,方便对比观察
原来: 优化: import torch torch.set_printoptions(linewidth200) 优化结果:...