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

LVS----DR模式

一、LVS-DR工作原理

1、LVS-DR数据包流向分析

  1. 客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。
  2. Director Server 和Real Server 在同一个网络中,数据通过二层数据链路层来传输。
  3. 内核空间判断数据包的目标IP是本机VIP,此时IPVS(IP虛拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包修改源MAC地址为Director server 的MAC地址,修改目标MAC地址为Real Server 的MAC 地址,源IP 地址与目标IP地址没有改变,然后将数据包发送给Real Server。

  4. 到达Real server 的请求报文的MAC地址是自身的MAC地址,就接收此报文。数据包重新封装报文(源IP地址为VIP,目标IP为CIP),将响应报文通过lo接口传送给物理网卡然后向外发出。

  5. Real Server 直接将响应报文传送到客户端。客户端收到回复报文,认为得到正常的服务,而不会知道是哪一台服务器处理的。

2、DR模式的特点

  1. Director Server(调度器) 和 Real Server(节点服务器) 必须在同一个物理网络中。
  2. Real Server可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。
  3. Director Server作为群集的访问入口,但不作为网关使用。
  4. 所有的请求报文经由Director Server, 但回复响应报文不能经过Director Server。
  5. Real Server 的网关不允许指向Director Server IP, 即Real Server发送的数据包不允许经过Director Server。(RS的网关地址只能指定真实的路由器网关)
  6. Real Server 上的 lo 接口配置VIP的IP地址。

二、LVS-DR中的ARP问题

1、VIP地址相同导致响应冲突

原因:

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地 址,势必会造成各服务器ARP通信的紊乱。

当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会收到ARP广播。

只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。

解决方案:

对节点服务器进行处理,使其不响应针对VIP的ARP请求

使用虚接口lo:0承载VIP地址。

设置内核参数 arp_ ignore=1:系统只响应目的IP为本地IP(物理网卡的地址,而不是lo网卡的虚接口地址)的ARP请求。

2、解决ARP问题的设置方法

修改/etc/sysctl.conf 文件,调整内核的ARP响应参数。

 vim /etc/sysctl.conf     //添加以下四行参数net.ipv4.conf.lo.arp_ignore = 1  net.ipv4.conf.lo.arp_announce = 2net.ipv4.conf.all.arp_ignore = 1net.ipv4.conf.all.arp_announce = 2sysctl -p  //刷新配置,读取修改后的配置#arp_ignore=1 :使本机系统只响应目的IP为本地物理网卡IP的ARP请求。#arp_announce=2:使本机系统不使用即将返回的IP数据包的源地址来作为ARP请求报文的源地址,而采用发送接口(物理网卡)的IP作为ARP请求报文源地址。

三、LVS-DR模式(直接路由)

直接路由(Direct Routing):简称 DR 模式,采用半开放式的网络结构,与 TUN模式的结构类似,但各节点并不是分散在各地,而是与调度器位于同一个物理网络。

负载调度器与各节点服务器通过本地网络连接,不需要建立专用的 IP 隧道

直接路由,LVS默认模式,应用最广泛,通过请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变

DR模式两种解决方法:

绑定ARP绑定Ivs 代理服务器(碰不到客户端,一般不用)
关闭ARP 广播 真实服务器(一般采用它)

LVS调度服务器也可以使用公网ip,也可以买公网ip

DR模式的特点:

  1. Director(调度器)和各RS(真实服务器)都配置有VIP(虚拟ip)

  2. 确保前端路由器将目标IP为VIP的请求报文发往Director

  • 在前端网关做静态绑定VIP和Director的MAC地址

  • 在RS上使用arptables工具

arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP

在RS上修改内核参数以限制arp通告及应答级别

/proc/sys/net/ipv4/conf/all/arp_ignore  忽略arp广播
/proc/sys/net/ipv4/conf/all/arp_announce  关闭无敌arp

RS(真实服务器)的RIP(真实ip)可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director

  1. RS和Director要在同一个物理网络

  2. 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client

  3. 不支持端口映射(端口不能修改

  4. 无需开启 ip_forward(路由转发)

  5. RS可使用大多数OS系统

操作系统(Operating System,缩写为OS)是一种控制和管理计算机硬件与软件资源的计算机程序

回环网卡上配置虚拟ip,四台机器共用一个虚拟ip,在Linux中,回环网卡是指用于本地回环测试的虚拟网络接口,通常被标识为lo

实验环境:

  1. 调度服务器:192.168.10.100
  2. 后端服务器:192.168.10.101
  3. 后端服务器:192.168.10.102
  4. 客户端:192.168.10.103
  5. vip虚拟回环:192.168.10.188
###先将4台机子的防火墙及核心防护全部关闭
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0

7-0配置负载调度器

[root@localhost ~]#ifconfig ens33:0 192.168.10.188/32[root@localhost ~]#ip a[root@localhost ~]#vim /etc/sysctl.conf
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0[root@localhost ~]#sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0[root@localhost ~]#modprobe ip_vs
[root@localhost ~]#cat /proc/net/ip_vs[root@localhost ~]#yum install ipvsadm.x86_64 -y[root@localhost ~]#ipvsadm-save > /etc/sysconfig/ipvsadm[root@localhost ~]#systemctl start ipvsadm.service [root@localhost ~]#systemctl status ipvsadm.service[root@localhost ~]#ipvsadm -A -t 192.168.10.188:80 -s rr[root@localhost ~]#ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.101:80 -g[root@localhost ~]#ipvsadm -a -t 192.168.10.188:80 -r 192.168.10.102:80 -g[root@localhost ~]#ipvsadm -ln

net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0

#调整/proc响应参数  对于 DR 群集模式来说,由于 LVS 负载调度器和各节点需要共用 VIP 地址,应该关闭 Linux 内核的重定向参数响应服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能

7-1 真实服务器配置

[root@localhost ~]#rpm -q httpd[root@localhost ~]#yum install httpd -y[root@localhost ~]#systemctl start httpd[root@localhost ~]#ifconfig lo:0 192.168.10.188/32[root@localhost ~]#ip a[root@localhost ~]#cd /var/www/html/[root@localhost html]#echo welcome to 7-1 > index.html[root@localhost html]#cat index.html 
welcome to 7-1[root@localhost html]#sysctl -a |grep arp[root@localhost html]#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  [root@localhost html]#sysctl -p    ###刷新配置
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

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

7-2 真实服务器配置

[root@localhost ~]#rpm -q httpd[root@localhost ~]#yum install httpd -y[root@localhost ~]#systemctl start httpd[root@localhost ~]#ifconfig lo:0 192.168.10.188/32[root@localhost ~]#ip a[root@localhost ~]#cd /var/www/html/[root@localhost html]#echo welcome to 7-2 > index.html[root@localhost html]#cat index.html 
welcome to 7-1[root@localhost html]#sysctl -a |grep arp[root@localhost html]#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  [root@localhost html]#sysctl -p    ###刷新配置
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

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

7-3客户机检测:

四、arp_announce   arp_ignore

vim /etc/sysctl.conf

#添加系统只响应目的IP为本地IP的ARP请求
#系统不使用原地址来设置ARP请求的源地址,而是物理mac地址上的IP

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

五、ARP协议

arp作用:①把ip地址转化为mac地址

                 ② 检测地址是否冲突

arp中没有源ip和目的ip,是发送方ip和接受方ip

arp中没有源ip和目的ip,是发送方ip和接收方ip

相关文章:

LVS----DR模式

一、LVS-DR工作原理 1、LVS-DR数据包流向分析 客户端发送请求到Director Server (负载均衡器),请求的数据报文(源IP是CIP,目标IP是VIP)到达内核空间。Director Server 和Real Server 在同一个网络中,数据通过二层数据…...

操作系统(笔记)(一)

1、操作系统的功能和目标 1.1功能 存储管理文件管理设备管理处理机管理进程管理 1.2目标 方便性:操作系统作为用户与计算机硬件系统之间的接口,提供了直观的命令和界面,使得用户能够更容易地操作计算机。有效性:操作系统旨在提…...

Redis线程模型解析

引言 Redis是一个高性能的键值对(key-value)内存数据库,以其卓越的读写速度和灵活的数据类型而广受欢迎。在Redis 6.0之前的版本中,它采用的是一种独特的单线程模型来处理客户端的请求。尽管单线程在概念上似乎限制了其扩展性和并…...

ros2 launch如何控制node的启动顺序

ros2 launch如何控制node的启动顺序 文章目录 引言如何写launch文件启动流程图具体launch代码总结引言 本文用来说明如何控制ros2 launch 节点的先后顺序,我们有时候需要一个节点启动完成后再启动其它节点,实现这个功能有两种方式: 在launch.py时写event根据事件触发使用li…...

Android13 framework层添加关机接口

framework层修改: t0_sys/frameworks/base/core/api/current.txt method RequiresPermission(android.Manifest.permission.REBOOT) public void reboot(Nullable String);method public void rebootp();t0_sys/frameworks/base/core/java/android/os/IPowerManager…...

GDB调试入门笔记

文章目录 What?WhyHow安装GDB安装命令查看是否安装成功调试简单的程序预备一个程序调试 使用breakinfolistnextprintstep一些小技巧在gdb前shell日志功能watch point| catch point 调试core调试一个运行的程序 What? GDB是什么? 全称GNU sym…...

JavaScript的`call`方法:实现函数间的调用!

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…...

qt5-入门-使用拖动方式创建Dialog

参考: C GUI Programming with Qt 4, Second Edition 本地环境: win10专业版,64位,Qt5.12 目录 实现效果基本流程逐步实操1)创建和初始化子部件2)把子部件放进布局中3)设置tab顺序4&#xff09…...

【Redis】RedisTemplate和StringRedisTemplate的区别

两者的关系是 StringRedisTemplate 继承 RedisTemplate 。 两者的数据是不共通的:也就是说 StringRedisTemplate 只能管理 StringRedisTemplate 里面的数据,RedisTemplate 只能管理 RedisTemplate 中的数据。 RedisTemplate 看这个类的名字后缀是 Temp…...

面试经典150题(101-104)

leetcode 150道题 计划花两个月时候刷完之未完成后转,今天(第1天)完成了4道(101-104)150: 101.(215. 数组中的第K个最大元素) 题目描述: 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请…...

Java实现读取转码写入ES构建检索PDF等文档全栈流程

背景 之前已简单使用ES及Kibana和在线转Base64工具实现了检索文档的demo,并已实现WebHook的搭建和触发流程接口。 传送门: 基于GitBucket的Hook构建ES检索PDF等文档全栈方案 使用ES检索PDF、word等文档快速开始 实现读取本地文件入库ES 总体思路&…...

主流开发环境和开发语言介绍

主流开发环境和开发语言介绍 一、主流开发环境介绍 主流开发环境是指广泛应用于软件开发的集成开发环境(Integrated Development Environment,简称IDE)。IDE是一种集成了编辑器、编译器、调试器等工具的软件,提供了一站式的开发环…...

C++ 使用 nlohmann::json存储json文件

C 使用 nlohmann::json存储json文件 nlohmann::json 概述JSON 存储的示例以追加的方式存储json文件 nlohmann::json 概述 nlohmann::json 是 C 中一个流行的 JSON 库,由 Niels Lohmann 开发。它提供了一个简单而强大的 API,用于解析、构建、操作和序列化…...

何为OOM(Out of Memory)?

OOM(Out of Memory) 是指程序运行过程中内存不足的情况。在 Spark 应用程序中,OOM 是一个非常常见的问题,尤其是在处理大规模数据集或执行资源密集型的操作时。当 Spark 作业尝试使用的内存超过了为其分配的内存限制时&#xff0c…...

SpringBoot+Mybatis-plus+shardingsphere实现分库分表

SpringBootMybatis-plusshardingsphere实现分库分表 文章目录 SpringBootMybatis-plusshardingsphere实现分库分表介绍引入依赖yaml配置DDL准备数据库ds0数据库ds1 entitycotrollerserviceMapper启动类测试添加修改查询删除 总结 介绍 实现亿级数据量分库分表的项目是一个挑战…...

FPGA DDR3简介及时序

一,DDR3基础知识 1、DDR3全称第三代双倍速率同步动态随机存储器。 特点:①掉电无法保存数据,需要周期性的刷新。 ②时钟上升沿和下降沿都会传输数据。 ③突发传输,突发长度Burst Length一般为8 2、DDR3的存储: bank、行地址和列地址 数据怎么存入到D…...

java网络编程 02 socket

01.socket定义 02.TCP编程 import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket;public class clientSocket {public static void main(String[] args) throws IOException {Socket socket new Socket(Ine…...

【Web安全】SQL各类注入与绕过

【Web安全】SQL各类注入与绕过 【Web安全靶场】sqli-labs-master 1-20 BASIC-Injection 【Web安全靶场】sqli-labs-master 21-37 Advanced-Injection 【Web安全靶场】sqli-labs-master 38-53 Stacked-Injections 【Web安全靶场】sqli-labs-master 54-65 Challenges 与62关二…...

C++ 设计模式

文章目录 类图泛化实现关联聚合组合依赖总结 类内部的三种权限(公有、保护、私有)类的三种继承方式描述与图总结 面向对象七大原则单一职责原则(Single Responsibility Principle)里氏替换原则(Liskov Substitution Pr…...

安卓使用ExoPlayer出现膨胀类异常

1.导包 implementation com.google.android.exoplayer:exoplayer-core:2.15.1implementation com.google.android.exoplayer:exoplayer-ui:2.15.1 2.在Androidifest.xml加入权限&#xff0c;我这里加了网络与读写权限 <uses-permission android:name"android.permissio…...

从原理到实践:深入解析调频连续波雷达的核心技术与应用

1. 调频连续波雷达的基本原理 我第一次接触调频连续波(FMCW)雷达是在2015年做智能停车项目时。当时为了检测车位占用情况&#xff0c;试过超声波、红外等多种传感器&#xff0c;最后发现毫米波雷达才是最佳选择。FMCW雷达与传统脉冲雷达最大的区别在于它持续发射频率变化的电磁…...

告别文献混乱!用Zotero+OneDrive打造你的跨设备论文库(附ZotFile插件配置)

告别文献混乱&#xff01;用ZoteroOneDrive打造你的跨设备论文库 实验室电脑里躺着三百篇未分类的PDF&#xff0c;笔记本桌面堆满"新建文件夹(1)"&#xff0c;平板上还存着上周下载但找不到的会议论文——这可能是每个科研人的数字噩梦。当文献管理变成一场与自己的捉…...

2026年选对工作钢格板厂家,这三大核心标准决定你的采购成败

在工业厂房、化工厂、电厂等生产场景中&#xff0c;工作钢格板作为至关重要的安全承重平台与通道&#xff0c;其产品质量直接关系到人员安全与生产稳定。2026年的制造业竞争愈发激烈&#xff0c;供应链选择也更为审慎。面对市场上琳琅满目的供应商&#xff0c;您是否正为找到一…...

求职路上的守护与成长

你有没有过这样的时刻——深夜对着海量的招聘信息发呆&#xff0c;投了无数简历却石沉大海&#xff0c;突然觉得前途一片迷茫&#xff0c;特别无助&#xff1f;记得有个学生&#xff0c;为了进心仪的央企准备了半年&#xff0c;却在二面屡屡受挫。那天老师陪他复盘到凌晨&#…...

从开发板到工业边缘计算平台:UP Board二代的硬件解析与应用实战

1. 项目概述&#xff1a;从“开发板”到“边缘计算平台”的认知跃迁最近在整理手头的嵌入式设备&#xff0c;翻出了这块研扬的UP Board二代。说实话&#xff0c;第一次拿到它的时候&#xff0c;我下意识地还是把它归类为“一块性能不错的x86开发板”&#xff0c;就像树莓派之于…...

实在Agent实战录:解决委外加工成本核算不准,实现项目利润精准统计的架构演进路径

摘要&#xff1a; 步入2026年&#xff0c;离散制造与复杂供应链体系下的“委外加工”已成为企业调节产能的核心手段&#xff0c;但随之而来的“成本黑盒”与“利润虚标”依然是首席财务官&#xff08;CFO&#xff09;与首席信息官&#xff08;CIO&#xff09;的头号难题。本文由…...

IT6520:USB‑C 转 MIPI 芯片方案 4K@120Hz 高清显示

一、前言平板、便携屏、AR/VR 头显、车载中控、会议终端等设备&#xff0c;对USB‑C 一线通视频输出的需求越来越强。 传统方案必须用&#xff1a;PD 控制器 DP 接收芯片 MIPI 桥接芯片 外置 MCU Flash&#xff0c;多芯片拼凑导致电路复杂、成本高、兼容性差、开发周期长。…...

保姆级教程:在Ubuntu 22.04上搞定DCU-Z100(ZiFang)驱动安装与验证

保姆级教程&#xff1a;在Ubuntu 22.04上搞定DCU-Z100&#xff08;ZiFang&#xff09;驱动安装与验证 国产DCU&#xff08;Deep Computing Unit&#xff09;正逐渐成为高性能计算领域的新选择&#xff0c;而DCU-Z100&#xff08;代号ZiFang&#xff09;作为其中的代表产品&…...

EPLAN端子图表修改避坑指南:从占位符到动态区域,手把手教你定制专属端子连接图

EPLAN端子图表深度定制指南&#xff1a;从占位符优化到动态布局实战 在电气工程设计领域&#xff0c;EPLAN作为行业标杆软件&#xff0c;其端子图表功能直接影响项目交付的专业度和效率。许多工程师在项目后期常遇到这样的困境&#xff1a;标准端子图表无法满足客户特殊规范要求…...

12306智能抢票助手终极指南:5步实现自动化抢票,告别手动刷票烦恼

12306智能抢票助手终极指南&#xff1a;5步实现自动化抢票&#xff0c;告别手动刷票烦恼 【免费下载链接】12306 12306智能刷票&#xff0c;订票 项目地址: https://gitcode.com/gh_mirrors/12/12306 还在为节假日抢不到火车票而烦恼吗&#xff1f;&#x1f62b; 12306智…...