LVS工作模式 DR 配置要点

ops/2025/2/4 12:00:25/

LVS工作模式 DR direct routing

  • 在DR模式中,所有的RS需要配置两个地址:RIP和VIP
  • 在DR模式中,LVS会通过arp获取到所有RS的IP地址和对应的MAC地址,因此LVS和RS需处于同一二层网络
  • 当User发送请求到LVS后,LVS保持源目IP地址和端口号不变司时将源MAC地址换成自己的MAC地址,目的MAC地址换成调度到的RS MAC进行转发
  • RS在回响应报文时,源地址是VIP地址,源端口号为提供服务的端口号,源MAC地址为自己的MAC地址,目的地址为客户端地址,目的端口号为客户端发起连接请求时的随机端口,目的MAC地址为网关的MAC地址

DR模式配置要点

  • DR是LVS的默认模式,它的本质是重新封装请求报文,将源MAC地址替换为DIP所在接口的MAC地址,目标MAC地址设置为RS的RIP所在接口的MAC地址,源目IP和端口都保持不变。在这个模式下,仅有请求报文经过LVS,响应报文则不经过LVS,这样就可以减轻LVS的负荷,提高整个业务流程的性能
  • RS上配置的VIP需和LVS的VIP保持一致,为了防止地址冲突,需要在RS上关闭VIP所承载网卡的arp广播功能和arp应答功能
  • 在DR模式中, LVS的DIP和RS的RIP需在同一网段。 RIP和VIP可以不在同一网段
  • 所有的VIP一般都配置在回环口上
  • DR模式中,在LVS上不支持修改端口号
  • DR模式中,由于要求DIP和RIP在同一网段,因此无法进行大规模或远距离部署

DR模式调度器DS配置步骤

  1. 配置虚拟IP地址(VIP)
    ip addr add 192.168.xx.xx dev lo
  2. 配置负载分配策略
ipvsadm -C  # 清除所有规则
ipvsadm -A -t 192.168.x.x:80 -s rr  # 添加虚拟服务器,使用轮询(rr)调度算法
ipvsadm -a -t 192.168.x.x:80 -r 192.168.x.xx:80 -g  # 添加真实服务器,使用DR模式(-g)

DR模式真实服务器RS配置步骤

  1. 配置虚拟IP地址(VIP)
    ip addr add 192.168.xx.xx dev lo
  2. 添加路由
    为每个真实服务器添加一条路由记录,将访问VIP的数据限制在本地,以避免通信紊乱:
    ip route add 192.168.xx.xx/32 dev lo
  3. 调整内核ARP响应参数
    /etc/sysctl.conf 文件中添加如下配置
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1

测试时注意事项

当Client、RIP、VIP处于同一网段下时,LVS完成客户端client代理过后,同一客户端由于缓存的存在,再次发起的请求和相应都不会经过DS了,此时会发现客户端得到的响应一直都来自同一RS


http://www.ppmy.cn/ops/155560.html

相关文章

在 Ubuntu 上安装 Node.js 23.x

在 Ubuntu 上安装 Node.js 23.x 前提条件安装步骤1. 下载设置脚本2. 运行设置脚本3. 安装 Node.js4. 验证安装 参考链接总结 在现代 web 开发中,Node.js 是一个不可或缺的工具。它提供了一个强大的 JavaScript 运行时环境,使得开发人员可以在服务器端使用…

web前端13--动画

1、动画 语法:两种写法 csskeyframes big{0%{width: 200px;background-color: aqua;}50%{width: 500px;background-color: rgb(111, 255, 0);}100%{width: 300px;background-color: red;}}keyframes big{from{width: 200px;background-color: aqua;}to{width: 500…

利用matlab寻找矩阵中最大值及其位置

目录 一、问题描述1.1 max函数用法1.2 MATLAB中 : : :的作用1.3 ind2sub函数用法 二、实现方法2.1 方法一:max和find2.2 方法二:max和ind2sub2.3 方法对比 三、参考文献 一、问题描述 matlab中求最大值可使用函数max,对于一维向量&#xff0…

C++游戏开发实战:从引擎架构到物理碰撞

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 1. 引言 C 是游戏开发中最受欢迎的编程语言之一,因其高性能、低延迟和强大的底层控制能力,被广泛用于游戏…

【线程】基于环形队列的生产者消费者模型

1 环形队列 环形队列采用数组来模拟,用取模运算来模拟环状特性。 1.如何判断环形队列为空或者为满? 当环形队列为空时,头和尾都指向同一个位置。当环形队列为满时,头和尾也都指向同一个位置。 因此, 可以通过加计数器或者标记…

SSM开发(九) mybatis多表查询(举例说明)

目录 一、背景 二、一对一查询 三、一对多查询 一、背景 用户表和订单表的关系为,一个用户有多个订单,一个订单只从属于一个用户 mysql表设计: 二、一对一查询 一对一查询的需求:查询一个订单,与此同时查询出该订单所属的用户 实体: @Data public class Order {pr…

Node.js 的底层原理

Node.js 的底层原理 1. 事件驱动和非阻塞 I/O Node.js 基于 Chrome V8 引擎,使用 JavaScript 作为开发语言。它采用事件驱动和非阻塞 I/O 模型,使其轻量且高效。通过 libuv 库实现跨平台的异步 I/O,包括文件操作、网络请求等。 2. 单线程事…

openeuler 22.03 lts sp4 使用 cri-o 和 静态 pod 的方式部署 k8s-v1.32.0 高可用集群

前情提要 整篇文章会非常的长…可以选择性阅读,另外,这篇文章是自己学习使用的,用于生产,还请三思和斟酌 静态 pod 的部署方式和二进制部署的方式是差不多的,区别在于 master 组件的管理方式是 kubectl 还是 systemctl有 kubeadm 工具,为什么还要用静态 pod 的方式部署?…