LVS--DR模式

embedded/2024/10/18 21:22:55/

目录

1 DR模式原理

2 DR模式请求回复过程

3 实验环境

4 开始实验

4.1 配置实验环境

4.2 Router 配置路由转发

4.3  LVS 设置转发规则

4.4 解决vip响应问题

4.5 Web1配置

4.6 Web2配置

5 测试效果


1 DR模式原理

  1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间

  2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链

  3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链

  4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

2 DR模式请求回复过程

1、客户端向目标VIP发送请求:客户端发起HTTP/HTTPS等协议的请求,目标地址为虚拟IP(VIP)。

2、负载均衡器接收并处理请求:负载均衡器接收到请求后,会根据预设的负载均衡策略(如轮询、权重、最少连接数等),选择一个合适的后端服务器进行转发。

3、数据包转发至后端服务器:负载均衡器不会更改IP报文的内容,而是将数据包的目的MAC地址更改为所选后端服务器的MAC地址,然后将数据包发送到后端服务器所在的网络。

4、后端服务器处理请求和返回响应:后端服务器接收到数据包后,检查其目的IP地址是否与自己绑定的VIP相同,如果是,则处理该请求。将响应报文通过lo接口传送给物理网卡然后向外发出。处理完成后,后端服务器将响应数据包直接发回给客户端

5、客户端将收到回复报文。客户端认为得到正常的服务,而不会知道是哪一台服务器处理的

3 实验环境

序号                        源                                目的
1

192.168.239.200/24

mac:client

172.25.254.200/24

mac:Router-eth0

2

192.168.239.200/24

mac:Router-eth1

172.25.254.200/24

mac:LVS

3

192.168.239.200/24

mac:LVS

172.25.254.200/24

mac:web1

4

172.25.254.200/24

mac:web1-eth0

172.25.254.100/24

mac:Router-eth1

5

172.25.254.200/24

mac:Router-eth0

172.25.254.100/24

mac:client

4 开始实验

4.1 配置实验环境

# Client
[root@client ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.239.200/24,192.168.239.100
method=manual# Router
[root@router ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=192.168.239.100/24
method=manual
[root@router ~]# cat /etc/NetworkManager/system-connections/eth1.nmconnection 
[connection]
id=eth1
type=ethernet
interface-name=eth1[ipv4]
address1=172.25.254.100/24
method=manual# LVS 配置
[root@LVS ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection 
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.50/24,172.25.254.100
method=manual# web1
[root@web1 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.10/24,172.25.254.100
method=manual# web2
[root@web2 ~]# cat /etc/NetworkManager/system-connections/eth0.nmconnection
[connection]
id=eth0
type=ethernet
interface-name=eth0[ipv4]
address1=172.25.254.20/24,172.25.254.100
method=manual

4.2 Router 配置路由转发

# 虚拟机本身是不开启路由功能的,要想开启请在内核中开启路由转发功能[root@mysql-03 test]# sysctl -a | grep ip_forward
net.ipv4.ip_forward = 0
net.ipv4.ip_forward_update_priority = 1
net.ipv4.ip_forward_use_pmtu = 0[root@mysql-03 test]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
[root@router ~]# sysctl -p
net.ipv4.ip_forward = 1

4.3  LVS 设置转发规则

# 给环回接口填上
[root@LVS test]# ip addr add 172.25.254.200/32 dev lo# 设置转发规则
[root@LVS test]# ipvsadm -A -t 172.25.254.200:80 -s wrr
[root@LVS test]# ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.10 -w 1 -g
[root@LVS test]# ipvsadm -a -t 172.25.254.200:80 -r 172.25.254.20 -w 1 -g# 查看规则
[root@LVS ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags-> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.254.200:80 wrr-> 172.25.254.10:80             Route   1      0          5         -> 172.25.254.20:80             Route   1      0          6 

4.4 解决vip响应问题

DR 模型中各主机上均需要配置 VIP ,解决地址冲突的方式有三种:
  • (1)在前端网关做静态绑定
  • (2)在各RS使用arptables
  • (3)在各RS修改内核参数,来限制arp响应和通告的级别
限制响应级别 :arp_ignore
  • 0:默认值,表示可使用本地任意接口上配置的任意地址进行响应
  • 1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上时,才给予响应
限制通告级别 :arp_announce
  • 0:默认值,把本机所有接口的所有信息向每个接口的网络进行通告
  • 1:尽量避免将接口信息向非直接连接网络进行通告
  • 2:必须避免将接口信息向非本网络进行通告

4.5 Web1配置

# 增加VIP
[root@web1 test]# ip addr add 172.25.254.200/32 dev lo# 查看网关是否指向路由器
[root@web1 test]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0[root@web1 test]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web1 test]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce 
[root@web1 test]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web1 test]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

4.6 Web2配置

# 增加VIP
[root@web2 test]# ip addr add 172.25.254.200/32 dev lo# 查看网关是否指向路由器
[root@web2 test]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.25.254.100  0.0.0.0         UG    100    0        0 eth0
172.25.254.0    0.0.0.0         255.255.255.0   U     100    0        0 eth0[root@web2 test]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 test]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@web2 test]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@web2 test]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore


5 测试效果

[root@client ~]# for i in {1..10}
> do
> curl 172.25.254.200
> done
this is web1
this is web2
this is web1
this is web2
this is web1
this is web2
this is web1
this is web2
this is web1
this is web2


http://www.ppmy.cn/embedded/93496.html

相关文章

vue3父组件向子组件传参的具体写法

在Vue 3中,父组件向子组件传参(也称作传递props)是一种非常基本的通信方式。下面我将详细解释如何在Vue 3中实现这一功能。 1. 定义子组件并接收props 首先,你需要在子组件中定义你想要接收的props。这通过在组件的props选项中完…

模型部署 - docker

docker简介 Docker 是一种开源的容器化平台,允许开发者将应用程序及其依赖项打包到一个标准化的单元中,称为“容器”。这些容器可以在任何支持 Docker 的系统上运行,无需担心环境差异。 为什么需要 Docker? 在传统的开发中&…

Flask 处理响应

Flask 处理响应 直接返回字符串返回重定向返回 JSON 数据返回字典并自动转换为 JSON返回元组基本元组返回包含响应头的元组返回使用 make_response 返回文件自定义响应返回模板 在 Flask 中,处理响应(Response)是 Web 应用开发中的一个核心环…

嵌入式初学-C语言-十五

函数的概述 函数:实现一定功能的,独立的代码模块,我们的函数一定是先定义后使用使用函数的优势 可以通过函数提供功能给别人使用,当然我们也可以使用别人提供的函数,减少代码量借助函数可以减少重复性代码。实现结构…

如何选择最适合您需求的数据恢复工具?适用于 Windows 的 7 大数据恢复工具

数据丢失可能是一种令人沮丧的经历,无论是由于意外删除、磁盘格式化还是系统崩溃造成的。幸运的是,Windows 用户可以使用几种可靠的数据恢复工具来有效地恢复丢失的文件。以下是七大数据恢复工具的汇总,包括奇客数据恢复的产品: 适…

【Material-UI】按钮与第三方路由库的集成详解

文章目录 一、ButtonBase 组件简介二、与第三方路由库的集成1. React Router示例代码 2. Next.js示例代码 三、客户端导航的优势四、其他自定义集成1. 使用自定义组件示例代码 五、总结 在现代前端开发中,单页应用(SPA)变得越来越普遍。这种应…

quark-design 原生引入使用说明

说明:旧项目前后不分离 使用原生html开发的情况下 以动作面板举例: esm全局引入的方式 <script type"module"> import quarkd from "https://cdn.jsdelivr.net/npm/quarkd2.0.4/esm" //直接使用 quarkd.ActionSheet({actions: [{ name: "Opti…

SQL Zoo 9-.Window functions

以下数据均来自SQL Zoo 1.Show the lastName, party and votes for the constituency S14000024 in 2017.&#xff08;显示2017年选区“S14000024”的姓氏、政党和选票&#xff09; SELECT lastName, party, votesFROM geWHERE constituency S14000024 AND yr 2017 ORDER BY…