Keepalived+Lvs(dr)调度器主备配置小实验
目录
前言
一、实验拓扑图
二、配置LVS(dr)模式
三、配置调配器热备
四、测试
总结
前言
Keepalived和LVS(Linux Virtual Server)是两个常用的开源软件,通常结合使用以提供高可用性和负载均衡的解决方案。
Keepalived是一种用于实现高可用性的软件,它可以监控服务器的健康状态,并在主服务器出现故障时自动切换到备份服务器。它使用VRRP(Virtual Router Redundancy Protocol)协议来实现服务器之间的冗余和故障恢复,确保服务的连续性。Keepalived还可以配合其他负载均衡软件(如LVS)一起使用,以提供更可靠的高可用性解决方案。
LVS(Linux Virtual Server)是一种用于构建高性能和可扩展的负载均衡集群的软件。LVS使用IP负载均衡技术将客户端的请求分发到多个后端服务器上,提高了整个系统的处理能力和吞吐量。LVS支持多种负载均衡算法(如轮询、加权轮询、最少连接等),可以根据实际需求灵活配置。LVS的工作模式有多种,其中DR(Direct Routing)模式是一种常用的模式,它通过修改数据包的目的MAC地址实现请求的转发,提高了转发的效率。
综合起来,使用Keepalived+LVS(dr)的解决方案可以实现高可用性和负载均衡的效果。Keepalived负责监控服务器的健康状态,并在主服务器发生故障时自动切换到备份服务器,保证服务的连续性。而LVS负责将客户端的请求分发到多个后端服务器上,提高系统的性能和可扩展性。通过结合使用这两个软件,可以构建出稳定可靠的高可用性和负载均衡的系统架构。
一、实验拓扑图
按要求准备好下列的设备

二、配置LVS(dr)模式
不多说了,开整!
1、配置2台web节点
##安装nginx
yum -y install epel
yum -y install nginx
##分别书写两台web服务器的测试页面
echo nginx1 > /usr/share/nginx/html/index.html
echo nginx2 > /usr/share/nginx/html/index.html
##启动nginx
systemctl start nginx
测试
2、调整web节点的APR参数
##调整ARP参数
vim /etc/sysctl.conf
##插入
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.default.arp_ignore=1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce=2
##是它生效
sysctl -p
3、配置web节点虚拟IP
##配置虚拟IP地址
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
##插入
DEVICE=lo:0
IPADDR=192.168.115.200
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback:0
##重启网卡并添加路由
systemctl restart network
route add -host 192.168.115.200/32 dev lo:0

4、配置主调配器192.168.115.128
##设置APR参数
vim /etc/sysctl.conf
##插入
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects=0
net.ipv4.conf.ens33.send_redirects = 0
##是之生效
sysctl -p
##配置网卡
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens33:0
##插入
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.115.200
PREFIX=24
##安装ipvsadm
yum -y install ipvsadm
##加载查看模块
modprobe ip_vs
lsmod |grep ip_vs
##启动ipvsadm
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service
##添加策略
ipvsadm -A -t 192.168.115.200:80 -s rr
ipvsadm -a -t 192.168.115.200:80 -r 192.168.115.131:80 -g
ipvsadm -a -t 192.168.115.200:80 -r 192.168.115.134:80 -g
##保存策略
ipvsadm-save > /etc/sysconfig/ipvsadm
##重启网卡
systemctl restart network
浏览器验证


三、配置调配器热备
1、来到我们的负载调度器在两台调度器上下载keepalived
192.168.115.128作为主
192.168.115.131作为备
yum -y install keepalived
2、配置主的keepalived
vim /etc/keepalived/keepalived.conf
####此处我就设置了一个虚拟IP192.168.115.200一个虚拟IP对应着我2个真实的web服务器IP
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL1 ##名字(主从不要一样)vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER ##身份为主interface ens33 ##网卡virtual_router_id 51 ##主从 id要一致priority 100 ##优先级advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.115.200 ###虚拟IP}
}virtual_server 192.168.115.200 80 { ##虚拟ip,下面对应的是2台web的真实ipdelay_loop 6lb_algo rr ##轮询模式lb_kind DR ##这里我们是dr模式下进行的,所以设置为drpersistence_timeout 50protocol TCPreal_server 192.168.115.131 80 { ##web1真实IPweight 1SSL_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.115.134 80 { ##web2真实IPweight 1SSL_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
#########如果想配置多个虚拟IP,那么参照上面的方法照猫画虎###########
3、配置从负载调配器(建议使用scp把主的传输过来后修改比较省事)安装ipvsadm服务
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL2 ###服务名vrrp_skip_check_adv_addr#vrrp_strictvrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUP ###角色interface ens33virtual_router_id 51priority 90advert_int 1authentication {auth_type PASSauth_pass 1111}virtual_ipaddress {192.168.115.200}
}virtual_server 192.168.115.200 80 {delay_loop 6lb_algo rrlb_kind DRpersistence_timeout 50protocol TCPreal_server 192.168.115.131 80 {weight 1SSL_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}real_server 192.168.115.134 80 {
weight 1SSL_GET {url {path /}connect_timeout 3nb_get_retry 3delay_before_retry 3}}
}
启动分别启动主备的keepalived并查看主备的ipvsadm策略,ip
##启动
systemctl start keepalived
##查看
ipvsadm -Ln
主ip
策略
备IP
策略 
在这里说明一下,只要配置的keepalived是对的,启动keepalived后会自己根据配置文件生成策略
4、页面测试

这里访问是没什么问题的,并且是轮询,我们抓个包看看只有200的地址符合DR模式
四、测试
宕掉主调配器,观查是否还能实现轮询
查看备调度器IP,IP漂移说明主备生效了
访问网页,可以访问并且轮询正常

抓包,与之前一样
ok,配置成功
总结
这里主要理解的是keepalived与ipvsadm的关系;一般情况下启动了keepalived后ipvsadm也会启动,并且会根据keepalived的文件生成策略;相对而言keepalived的配置文件很长需要理解记忆,可以参考我上面的配置,这里主要就是理解配置文件,理清思路,在本实验中配置了大量的IP地址容易混淆。
相关文章:
Keepalived+Lvs(dr)调度器主备配置小实验
目录 前言 一、实验拓扑图 二、配置LVS(dr)模式 三、配置调配器热备 四、测试 总结 前言 Keepalived和LVS(Linux Virtual Server)是两个常用的开源软件,通常结合使用以提供高可用性和负载均衡的解决方案。 Keepalive…...
第四讲Java基本语法——数组结构(多维数组)
前言 前面几讲,我们讲了Java基本语法,初学者也能够有一定的入门。本讲,我们也是继续来讲解一下Java另一个基础语法——数组,其实在前面讲解数据类型的时候,我们也有提到数组是引用类型,那今天我们就来分析一下什么是数组,怎么用数组呢? 一、数组是什么 数组是…...
【题解】JZOJ6578 / 洛谷P5201[USACO2019Jan]Shortcut G
洛谷 P5201 [USACO19JAN] Shortcut G 题意 在一个带权无向连通图上,每个点有 a i a_i ai 只奶牛,奶牛会走最短路径到 1 1 1,如果有多条路径,选择字典序最小的,定义移动总时间为所有奶牛走到 1 1 1 的时间之和。…...
npm install sentry-cli失败的问题
1. 目前报错 2. 终端运行 npm set ENTRYCLI_CDNURLhttps://cdn.npm.taobao.org/dist/sentry-cli npm set sentrycli_cdnurlhttps://cdn.npm.taobao.org/dist/sentry-cli3. 再安装 npx sentry/wizardlatest -i nextjs即可成功...
Node opensslErrorStack 错误解决方法记录
从Git仓库中下载了一个老项目,使用npm install 安装后没有问题,当我使用npm run dev 的时候遇到了 OpenSSL 相关错误,例如 opensslErrorStack: [error:03000086:digital envelope routines::initialization error] 网上找了一下相关信息&am…...
你知道什么是Grandmillennial风格吗,进来看看吧
如果你既欣赏祖母的印花棉布扶手椅和大胆的图案,又喜欢千禧一代朋友现代家居中的开放空间和时尚家具,那么 "千禧一代 “风格就是为你量身打造的。它借鉴了几十年来的流行趋势,形成了一种独特的、带有现代风格的老式设计。 在典型的 &quo…...
App Inventor 2 开发 ChatGPT 对话App
ChatGPT大家应该不会陌生,它的回答内容非常的专业及深入,具有实际的可指导性。我们通过App Inventor 2开发一个简单的对话App,先看效果: App Inventor 2 ChatGPT教育领域对话演示 代码块如下: 用到的核心组件“ChatBot…...
SQL 大小敏感问题
在SQL中,关键字和函数名 是不区分 大小写的 比如(select、where、order by 、group by update 等关键字),以及函数(ABS、MOD、round、min等) window系统默认是大小写不敏感 (ZEN文件和zen 文件 不能同时存在ÿ…...
微信小程序+Taro 混编,Taro 使用微信原生 behaviors
最近有一个小程序项目,因为一些原因项目架构选择了微信小程序原生Taro 混编的方式进行开发,在开发的过程中发现 Taro 不支持使用原生的 behaviors 特性,因为混编的原因项目当中已有原生页面在使用 behaviors,所以需要一个方案在不…...
b树/b+树、时间轮、跳表、LSM-Tree
b树、b树:关系型数据库核心存储结构 1、为什么磁盘数据存储结构用B树、而不用红黑树 磁盘每次读取不是读一个节点、是返回一页数据。 红黑树每次遍历一个节点排除一半数据。 B树通常映射相邻的磁盘页数据。4K mysql索引一个节点隐射16k故而映射4倍,故…...
Unity OnDrawGizmos的简单应用 绘制圆形
编辑器和配置表各有各的好。 卡牌游戏即使再复杂,哪怕是梦幻西游,大话西游那种,甚至wow那种,用配表都完全没问题。但是崩坏3,或者鬼泣,格斗游戏,可视化编辑器是唯一的选择。 开发初期刚开始配技…...
Uniapp笔记(四)uniapp语法3
一、商品详情 1、从商品列表页跳转到商品详情页 在商品列表的项中绑定单击事件,并传递商品id值 <view class"goods-item" v-for"(item,index) in goodsList" :key"index" click"goGoodsDetail(item.goods_id)"> &…...
leetcode做题笔记105. 从前序与中序遍历序列构造二叉树
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。 思路一:递归 struct TreeNode* buildTree(int* preorder, int preorderSize, int* ino…...
Python里的列表List求和
1、使用sum()函数 numbers [1, 2, 3, 4, 5] total sum(numbers) print(total) # 输出 15 2、注意事项 在使用 sum() 函数获取列表的总和时,需要注意以下几点: sum() 函数只能用于数字类型的可迭代对象,如果 iterable 中包含了非数字类…...
启动docker容器的几种方法和注意事项(docker-compose,dockerfile)
1:要启动容器必须都先创建好镜像文件 C:\Users\dell>docker images REPOSITORY TAG IMAGE ID CREATED SIZE poi 1.0 22738bb31074 4 hours ago 105MB redis latest 506734eb5e71 6 days ago 138MB ng…...
bash: conda: command not found
问题描述: 在Pycharm上用SSH远程连接到服务器,打开Terminal准备查看用 conda 创建的虚拟环境时,却发现调用 conda 指令时出现以下报错: -bash: conda: command not found如果使用Xshell 利用端口号直接连接该 docker 容器&#…...
Leetcode-每日一题【剑指 Offer 36. 二叉搜索树与双向链表】
题目 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表…...
ctfshow-萌新专属红包题
0x00 前言 CTF 加解密合集CTF Web合集 0x01 题目 0x02 Write Up 访问之后是一个登录页面,扫了目录,试了sql注入,没办法于是跑一跑弱口令,所以有事没事,admin弱口令跑一跑 搜索 微信公众号 皓月当空w 发送关键字 字典…...
谷歌面试-扔鸡蛋
今天想跟大家分享一个有意思的面试题,这让我再一次感叹思维的奇妙,接下来我们一起看看吧~ 首先来看看题目: 你有2颗鸡蛋,需要以最少的尝试次数来判断在100层的高楼上,哪一层楼是鸡蛋的安全层。 换句话说,…...
Unity血条制作
一、使用UGUI制作血条 我一般使用image制作血条,当然,也可以使用滑动组件Slider。image的具体操作步骤如下 普通血条 1、在Hierarchy面板中,创建两个image组件,将其中一个设置为另外一个的子节点 2、在Inspector面板中&#…...
191k Star 的 Superpowers:把 AI 从“会写代码“改造成“守纪律的工程师“
路易乔布斯 2026-05-14 AI Daily 深度拆解 数据时间锚点:本文写作时 obra/superpowers 数据为 191k stars / v5.1.0 (2026-04-30) / 8 个编码代理平台已支持。一、那条让我点进去的 AI 日报 今早翻 AI 日报,第 9/10 条标着 🔥 重磅…...
基于MCP协议构建AI助手与开发环境的安全桥梁:Merx MCP实战指南
1. 项目概述:一个为开发者服务的“智能副驾”最近在折腾一个内部工具链的自动化项目,发现很多重复性的查询、数据转换和文档生成工作,虽然能写脚本解决,但每次都要翻找不同的API文档和命令行工具,效率很低。就在这个当…...
用了半年只留下这1个!2026年我上课录音转文字亲测好用真心安利
测了大半年市面上主流的录音转文字工具,删来删去最后我手机、电脑里只留了一个——听脑AI,说真的,这是我用过同类工具里最值得入手的,没有之一。很多人选工具都踩了只看表面订阅价的坑,其实真不是越便宜越好࿰…...
AI推理模型工程2026:从o3到DeepSeek-R1的工程化落地实践
推理模型(Reasoning Model)正在重新定义AI应用的边界。当OpenAI o3在ARC-AGI测试上突破人类基准,当DeepSeek-R1以极低成本实现顶级推理能力,工程师们面临的问题已经不是"推理模型能做什么",而是"怎么把…...
MatrixFlow:Transformer加速的协同设计与矩阵计算优化
1. MatrixFlow:Transformer加速的革命性协同设计在人工智能计算领域,Transformer模型已经成为自然语言处理、计算机视觉等任务的事实标准架构。然而,这些模型的巨大成功背后隐藏着一个关键瓶颈——矩阵乘法操作(GEMM)占据了整体计算时间的99%…...
别再折腾驱动了!一招搞定Linux下Intel AX210网卡的固件版本冲突问题
Linux下Intel AX210网卡固件冲突的深度解析与通用解决方案 引言:当硬件升级遇上系统固执 每次拆开笔记本后盖更换网卡时,我们总期待一次完美的性能飞跃——直到系统启动后那个令人心碎的Wi-Fi图标上出现一个小小的红叉。对于选择Intel AX210这款Wi-Fi 6网…...
Mysql JOIN 的物理执行流程
一、关联字段在两个表中都没有索引 当两个参与 join 的表在关联字段上都没有索引时,MySQL 无法使用高效的索引树搜索,而是被迫采用 Block Nested-Loop Join (BNL) 算法。 为了清晰讲解物理流程,我们设定如下 SQL 示例 : 表 t1t1t1…...
互联网大厂 Java 求职面试:微服务与云原生
互联网大厂 Java 求职面试:微服务与云原生 在某互联网大厂的面试中,面试官与求职者燕双非展开了一场关于微服务与云原生的深入对话。以下是他们的问答记录。第一轮提问 面试官:燕双非,首先请你简单介绍一下你对微服务架构的理解。…...
别再让POI吃掉你的内存了!用SAX模式轻松处理10万行Excel数据(附完整Java代码)
高效解析海量Excel数据的Java实践指南 在处理企业级数据时,Excel文件往往是不可避免的数据交换格式。但当数据量达到数万行甚至更多时,传统的POI用户模式会迅速耗尽JVM内存,导致系统崩溃。本文将深入探讨如何利用SAX事件驱动模型解决这一痛点…...
电解电容储存寿命解析:失效机理、评估方法与激活技术
1. 项目概述:一个被忽视的“保质期”问题“电解电容放多久会坏?”这个问题,乍一听像是电子爱好者仓库角落里的一次闲聊,或者维修师傅面对一堆旧板卡时的嘀咕。但在我十多年的硬件设计、生产管理和失效分析经历里,这个问…...
