DPVS-2:单臂负载均衡测试

news/2025/2/22 5:41:31

上一篇编译安装了DPVS,这一篇开启DPVS负载均衡测试 : 单臂 + FULL NAT模式

拓扑-单臂

单臂模式
DPVS 单独物理机
CLINET,和两个RS都是另一个物理机的虚拟机,它们网卡都绑定在一个桥上br0 , 二层互通。
在这里插入图片描述

DPVS_9">启动DPVS

dpvs.conf 使用默认的dpvs.conf.single-nic.sample的配置

root@r750-132:~/dpvs/bin#  ./dpvs -- -a 98:00.1 -l 0-9 
current thread affinity is set to FFFFFFFF
EAL: Detected 32 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Detected static linkage of DPDK
EAL: Multi-process socket /var/run/dpdk/rte/mp_socket
EAL: Selected IOVA mode 'PA'
EAL: No available hugepages reported in hugepages-1048576kB
EAL: Probing VFIO support...
EAL: VFIO support initialized
EAL: Probe PCI driver: mlx5_pci (15b3:1017) device: 0000:98:00.1 (socket 1)
EAL: No legacy callbacks, legacy socket not created
DPVS: dpvs version: 1.9-8, build on 2025.02.20.15:37:58
DPVS: dpvs-conf-file: /etc/dpvs.conf
DPVS: dpvs-pid-file: /var/run/dpvs.pid
DPVS: dpvs-ipc-file: /var/run/dpvs.ipc
CFG_FILE: Opening configuration file '/etc/dpvs.conf'.
CFG_FILE: log_level = WARNING
NETIF: dpdk0:rx_queue_number = 8
NETIF: worker cpu1:dpdk0 rx_queue_id += 0
NETIF: worker cpu1:dpdk0 tx_queue_id += 0
NETIF: worker cpu2:dpdk0 rx_queue_id += 1
NETIF: worker cpu2:dpdk0 tx_queue_id += 1
NETIF: worker cpu3:dpdk0 rx_queue_id += 2
NETIF: worker cpu3:dpdk0 tx_queue_id += 2
NETIF: worker cpu4:dpdk0 rx_queue_id += 3
NETIF: worker cpu4:dpdk0 tx_queue_id += 3
NETIF: worker cpu5:dpdk0 rx_queue_id += 4
NETIF: worker cpu5:dpdk0 tx_queue_id += 4
NETIF: worker cpu6:dpdk0 rx_queue_id += 5
NETIF: worker cpu6:dpdk0 tx_queue_id += 5
NETIF: worker cpu7:dpdk0 rx_queue_id += 6
NETIF: worker cpu7:dpdk0 tx_queue_id += 6
NETIF: worker cpu8:dpdk0 rx_queue_id += 7
NETIF: worker cpu8:dpdk0 tx_queue_id += 7
SAPOOL: sapool_filter_enable = on
IPVS: dp_vs_conn_init: lcore 9: nothing to do.
NETIF: Ethdev port_id=0 invalid tx_offload: 0x1000e, valid value: 0xc96af

配置指令

VIP=192.168.100.100
LIP=192.168.100.200
RS1=192.168.100.4
RS2=192.168.100.5

# 为接口配置一个虚拟IP
./dpip addr add 192.168.100.100/24 dev dpdk0

# 添加一个虚拟服务,地址为VIP,端口80,负载均衡策略为 轮询(rr= Round Robin)
./ipvsadm -A -t 192.168.100.100:80 -s rr

# 为虚拟服务添加一个真实服务器, -b FullNAT模式(源目的地址都转换) 
./ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.4:80 -b
./ipvsadm -a -t 192.168.100.100:80 -r 192.168.100.5:80 -b

# 为虚拟服务添加一个本地地址,FNAT之后访问真实服务器的源地址
./ipvsadm --add-laddr -z 192.168.100.200 -t 192.168.100.100:80 -F dpdk0

查看配置

root@r750-132:~/dpvs/bin# ./ipvsadm -L -n
IP Virtual Server version 1.9.8 (size=0)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.100:80 rr
  -> 192.168.100.4:80             FullNat 1      0          0         
  -> 192.168.100.5:80             FullNat 1      0          0   

服务器配置

RS host 192.168.100.4 中,nginx返回值中设为 1

RS host 192.168.100.5中,nginx 返回值中设为 2

root@ubuntu22-1:~# cat /var/www/html/index.nginx-debian.html 
This is Server 1 !

root@ubuntu22-2:~# cat /var/www/html/index.nginx-debian.html
This is Server 2 !

服务器ping 负载均衡器,连同正常

root@ubuntu22:~# ping 192.168.100.100
PING 192.168.100.100 (192.168.100.100) 56(84) bytes of data.
64 bytes from 192.168.100.100: icmp_seq=1 ttl=64 time=0.381 ms
64 bytes from 192.168.100.100: icmp_seq=2 ttl=64 time=0.106 ms
^C
--- 192.168.100.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1026ms
rtt min/avg/max/mdev = 0.106/0.243/0.381/0.137 ms
root@ubuntu22:~# ping 192.168.100.200
PING 192.168.100.200 (192.168.100.200) 56(84) bytes of data.
64 bytes from 192.168.100.200: icmp_seq=1 ttl=64 time=0.295 ms
64 bytes from 192.168.100.200: icmp_seq=2 ttl=64 time=0.125 ms
^C
--- 192.168.100.200 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1005ms
rtt min/avg/max/mdev = 0.125/0.210/0.295/0.085 ms

CURL测试

测试成功

负载均衡轮询模式看起来生效了。

但是存在有连续的数字,可能与curl测试同时只有一个连接有关,或者每一次被RSS分配到不同的worker有关,具体后续再读源码分析。

root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 2 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !
root@ubuntu22:~# curl 192.168.100.100:80
This is Server 1 !

查看邻居表

这里会显示每一个worker的邻居表, 当有一个邻居更新时,会同步到所有的worker。

root@r750-132:~/dpvs/bin# ./dpip neigh show dev dpdk0
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 1  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 1  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 1  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 3  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 3  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 3  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 2  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 2  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 2  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 4  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 4  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 4  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 5  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 5  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 5  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 6  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 6  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 6  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 7  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 7  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 7  
ip: 192.168.100.3                                    mac: 52:54:00:b3:0d:e5   state: REACHABLE     dev: dpdk0  core: 8  
ip: 192.168.100.4                                    mac: 52:54:00:77:2b:73   state: REACHABLE     dev: dpdk0  core: 8  
ip: 192.168.100.5                                    mac: 52:54:00:8c:53:e9   state: REACHABLE     dev: dpdk0  core: 8  

抓包验证

在RS1上抓包,请求SRC IP已经是DPVS的 LocalIP, DST IP为RS1 IP, 确实是FULL NAT模式。
在这里插入图片描述


http://www.niftyadmin.cn/n/5861660.html

相关文章

备忘录模式:快速恢复原始数据

📝 备忘录模式:快速恢复原始数据 🚀 🧐 问题描述 在开发中,我们经常会遇到需要恢复对象状态的情况。传统的解决方案通常是为每个对象创建一个保存状态的对象,但这种方法不仅保存不方便,还会增…

深度强化学习实践 Maxim Lapan 章节13:A3C方法

写在前面 上一章节我们就提到了,A2C有几个问题,第一必须在线,第二数据有太大的相关性,所以会导致我们的学习可能向不是我们想要的地方去发展了 A3C 为了解决数据的相关性的问题,我们主要通过了如下的办法&#xff0…

XML XML约束 二、DTD

1 什么是DTD DTD&#xff08;Document Type Definition&#xff09;&#xff0c;文档类型定义&#xff0c;用来约束XML文档。例如要求xml文档的根元素必须是<students>&#xff0c;在<students>元素下可以包含0~n个<student>元素&#xff0c;每个<studen…

Redis存在线程安全吗?为什么?

Redis 在设计和使用层面具备较高的线程安全性&#xff0c;下面从多个方面详细阐述其线程安全特性及原因。 Redis 单线程模型下的线程安全 Redis 在处理网络请求时采用单线程模型&#xff08;Redis 6.0 之前核心网络 I/O 和命令执行都是单线程&#xff0c;Redis 6.0 引入了多线…

分布式 IO 模块:造纸设备的降本增效利器

在造纸行业竞争日益激烈的今天&#xff0c;如何实现高效生产、降低成本成为企业关注的焦点。分布式 IO 模块作为一种先进的自动化控制技术&#xff0c;正逐渐在造纸设备中发挥着关键作用&#xff0c;为造纸企业带来了前所未有的发展机遇。 传统的造纸设备控制系统存在诸多弊端&…

美的楼宇科技基于阿里云 EMR Serverless Spark 构建 LakeHouse 湖仓数据平台

作者&#xff1a;美的楼宇科技事业部 先行研究中心智能技术部 美的楼宇科技 IoT 数据平台建设背景 美的楼宇科技事业部&#xff08;以下简称楼宇科技&#xff09;是美的集团旗下五大板块之一&#xff0c;产品覆盖多联机组、大型冷水机组、单元机、机房空调、扶梯、直梯、货梯…

nigix面试常见问题(2025)

一、Nginx基础概念 1. 什么是Nginx? Nginx是一款高性能的HTTP/反向代理服务器及IMAP/POP3/SMTP代理服务器,由俄罗斯工程师Igor Sysoev开发。其核心优势在于事件驱动架构与异步非阻塞处理模型,能够高效处理高并发请求(如C10K问题),广泛应用于负载均衡、静态资源服务、AP…

云夹平台:一站式学习与生活效率工具

在数字化时代&#xff0c;高效管理知识、资源和日常事务成为现代人的核心需求。云夹平台正是这样一款集多功能于一体的智能工具&#xff0c;致力于为用户提供便捷、个性化的服务体验。无论你是学生、职场人士还是终身学习者&#xff0c;云夹都能成为你的得力助手。 1. 书签管理…