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

centos8上实现lvs集群负载均衡dr模式

1.前言

个人备忘笔记,欢迎探讨。

centos8上实现lvs集群负载均衡nat模式

centos8上实现lvs集群负载均衡dr模式

之前写过一篇lvs-nat模式。实验起来相对顺利。dr模式最大特点是响应报文不经调度器,而是直接返回客户机。

dr模式分同网段和不同网段。同网段实现简单,容易达成效果,而不同网段需要思路清晰,我更感兴趣的事实验不同网段。

不同网段时,我用了一个centos8做路由器,用于把后端服务器的http响应返回给客户机。起初tcpdump抓包实验可以在内网接口抓到响应包,但外网接口抓不到包。已经开启内核转发和关闭防火墙,甚至selinux。就是响应包过不去。为这个曾怀疑人生,但还是在努力和机缘下解决了,详见下文。

因为有上一篇铺垫,所以下面涉及网路、系统操作、web服务器,就不再赘述,重点是思路和过程。

2.实验目标:

使用调度方法rr,配合web短连接,最终在客户端访问director8080端口,要看到网页在node1/2之间切换。

数据包走向:客户机 > director > rs > 客户机。

3.客户机准备:

两台客户机如下:

物理机win11,cip=192.168.0.2。

虚拟机win11一块网卡,VMware桥接,cip=192.168.0.116。

2.同网段实验

2.1.网络结构

物理机win11的cip,虚拟机win11的cip,虚拟机director的dip和vip,虚拟机rs的rip,都桥接在一起。

还是从centos8克隆出director,rs(node1,node2)。它们只有一个桥接网卡。也就是都跟物理机一个网络。每一个centos都启用内核转发ip_forward=1。

还是要强调一下,我实验设置网路ip的工具是用NetworkManager,亦即nmcli和nmtui,用ifconfig查看。设置ip后要使用nm把连接重启一下,仅适用systemctl restart NetworkManager不行。

2.2.调度器director网络:

一块vmware桥接网卡。使用nmtui设置dip=192.168.0.3,设置完要把ens160这个连接禁用启用一下,重启连接后ifconfig可以看到ip生效。

接着把vip绑定在ens160:0别名上。

还需要加一条路由,确保请求数据包由vip响应。

2.3.后端服务器rs(node1/2)网络:

一块vmware桥接网卡,分别设置rip=192.168.0.4/5,gw=192.168.0.1(家里的路由器)。

配置好以后,director的dip192.168.0.3,vip192.168.0.8,rs的192.168.0.4,192.168.0.5,互相能ping通。

为实现dr模式三种方法,但最易用是修改内核参数。应该先修改参数再给rs绑定vip,以免局域网故障。

然后把vip绑定到lo:0别名,同时给一条路由。这条路由的意义就是让接受包途径有vip的接口,回应时把源地址“伪装”成vip。

rs上以前配置过lvs-nat测试的nginx站点,分别显示“page in node1”和“page in node2”以示区别。

设置好web服务后,稳妥起见可以分别对rip访问试试,因为现在是相同网络下。不再赘述。

2.4.调度器director策略:

dr模式不支持端口映射。

2.5.lvs-dr同网段效果:

以上设置好后,分别在物理机或虚拟机win11上尝试访问192.168.0.8:8080,刷新会看到两个页面切换。

实验成功。

3.不同网段实验:

3.1.网络结构:

下图中客户机只画了一个,不影响。

调度器需要两个网卡,一个对外一个对内。方便起见,对外接口直接和客户机桥接。对内使用vmware主机网络vmnet1。

两台后端服务器(RealServer)都是一个网络接口,使用vmnet1。

添加一个路由,两个网络接口,一个对外一个对内。

3.2.调度器director网络:

需要两个网卡,ens160对外vip=192.168.0.8,ens224对内dip=172.16.100.2。

策略修改,不用像上述“lvs-dr同网段实验”那样加路由(删掉那条即可)。

3.3.后端服务器rs网络:

由于基于上一个“lvs-dr同网段”实验,rs已经修改内核参数,lo:0接口上已经绑定vip,且做好路由。因此只是改rip:

node1是172.16.100.3,node2是172.16.100.4,网关都指向路由172.16.100.254,其它不用动。

3.4.路由router:

也是centos8克隆的,两块网卡,ens160对外192.168.0.254,ens224对内172.16.100.254,开启内核转发。它作为内网网关。我希望http的回应包先到达router的ens224内网口,再转发到ens160外网口,从而实现路由。

先说结论:原本centos8配置好网口,并开启内核转发ip_forward,它就是个天生的路由器,啥也不用动。但由于rs的回应包用vip伪装了源地址,所以router还需要设置内核参数rp_filter。就像设置rs的arp_ingore和arp_announce一样。

        #sysctl -w net.ipv4.conf.all.rp_filter=0

        #sysctl -w net.ipv4.conf.default.rp_filter=0(默认就是)

这里划重点,起初实验,我就卡在这里了。一定要详细记录并自省!

使用tcpdump分别在两个接口抓包。rs使用ping客户机时,可以明确看到ping的icmp包,在ens224和ens160都有抓到,亦即顺利通过路由到达ens160接口。当然,由于没处理ping回应,所以在后端服务器rs的命令行不一定看到ping通。

但是,lvs-dr的rs回应包,原本我们希望它能经此路由到达客户机,但就是通不过。使用tcpdump可以在ens224内网接口抓到,在ens160外网接口抓不到,显然没通过。

已经反反复复确认,有开启内核转发,关闭了防火墙firewalld和selinux。甚至咨询了以前的网工兄弟,他提到vmware有时候会跟实际网络不一样,有可能过滤掉“伪装”过的包,建议开启混杂模式。

于是又研究混杂模式,实际上tcpdump本身就是混杂模式,查看系统日志也看到每次抓包它就会临时开启混杂模式。所以问题不在这。

更甚至,我尝试构建了更复杂的网络,让vip和客户机不在一个网络,效果还是一样,不行。

解决:

还是要时刻熟知linux网络实现原理才行,当学习防火墙iptables时就知道,osi四层以下工作在内核空间,防火墙通过钩子函数工作在内核,跟ipvs一样,只要在内核它就时刻存在,只需要我们使用用户空间工具定制策略它就生效。而所谓数据包走向,先经过网络接口(网卡)再进入内核,然后内核决定如何转发或使用策略,属于本机该接收的包,会发给用户空间进程……总之,一旦想到原理,就立刻定位了故障点:

根据上述思路搜索原因,结果是,内核确实默认开启了“伪装”包过滤,内核参数rp_filter,就像上面后端服务器rs中修改内核参数一样。它是net.ipv4.conf.all.rp_filter和net.ipv4.conf.default.rp_filter。

改完这个参数,立竿见影,成功了。

3.5.lvs-dr不同网段效果:

每次刷新页面会在两个后端服务器上切换,不一定非是1-2-1-2这样,也可能是1-2-2-1,总之rr策略是轮巡的,负载均衡。

4.总结

本文3.4部分是最耽误我时间的,也许对于高手早就完成了。而我一开始就打算做不同网段实验一次搞定,结果总不成功,但不服输。最终还是从最简单同网段开始,需要先建立信心。

痛定思痛,基础知识还是要扎实,善于深入思考和定位问题。其实,我所谓的深入,可能对于大家来说太简单。不怕暴漏自己弱点。所以总结几点:

4.1.ping:

能否ping通,不一定能作为网络通不通的标准。ping包有去有回才“ping通”。像本文记录的,只要ping过去就可以,实际是看不到ping通的。

4.2.tcpdump:

上述我常用的:

#tcpdump -i ens224 src 192.168.0.8 and port 8080 -nn 

#tcpdump -i ens160 src 192.168.0.8 and port 8080 -nn

总之看man手册就都有了,常用这些对我足够了,挺好用的。

journalctl命令可以看到tcpdump本身就是混杂模式工作的。

4.3.结束:

本文完。

相关文章:

centos8上实现lvs集群负载均衡dr模式

1.前言 个人备忘笔记,欢迎探讨。 centos8上实现lvs集群负载均衡nat模式 centos8上实现lvs集群负载均衡dr模式 之前写过一篇lvs-nat模式。实验起来相对顺利。dr模式最大特点是响应报文不经调度器,而是直接返回客户机。 dr模式分同网段和不同网段。同…...

uniapp如何接入星火大模型

写在前面:最近的ai是真的火啊,琢磨了一下,弄个uniappx的版本开发个东西玩一下,想了想不知道放啥内容,突然觉得deepseek可以接入,好家伙,一对接以后发现这是个付费的玩意,我穷&#x…...

三、FFmpeg学习笔记

​ FFmpeg是一个开源、跨平台的多媒体处理框架,能够实现音视频的录制、转换、剪辑、编码、解码、流媒体传输、过滤与后期处理等几乎所有常见的多媒体操作。其强大之处在于几乎支持所有的音视频格式、编解码器和封装格式,是业界公认的“瑞士军刀”。 FFmp…...

Linux常用基础命令应用

目录 一、文件与目录操作(12个核心命令)​​ ​​1. pwd - 显示当前路径​​ ​​2. ls - 查看目录内容​​ ​​3. cd - 切换目录​​ ​​4. mkdir - 创建目录​​ ​​5. touch - 创建文件​​ ​​6. cp - 复制文件/目录​​ ​​7. mv - 移动…...

【python中级】关于Cython 的源代码pyx的说明

【python中级】关于Cython 的源代码pyx的说明 1.背景2.编译3.语法1.背景 Cython 是一个编程语言和工具链,用于将 Python 代码(或类 Python 的代码)编译成 C 语言,再进一步生成高性能的 Python 扩展模块(.so 或 .pyd 文件)。 在 Python 中,.pyx 文件是 Cython 的源代码文…...

第十八节课:Python编程基础复习

课程复习 前三周核心内容回顾 第一周:Python基本语法元素 基础语法:缩进、注释、变量命名、保留字数据类型:字符串、整数、浮点数、列表程序结构:赋值语句、分支语句(if)、函数输入输出:inpu…...

MySQL vs MSSQL 对比

在企业数据库管理系统中,MySQL 和 Microsoft SQL Server(MSSQL)是最受欢迎的两大选择。MySQL 是一款开源的关系型数据库管理系统(RDBMS),由 MySQL AB 开发,现归属于 Oracle 公司。而 MSSQL 是微…...

解决LeetCode“使括号有效的最少添加”问题

目录 问题描述 解题思路 复杂度分析 示例分析 暴力替换“不讲码德” 总结 问题描述 给定一个仅由 ( 和 ) 组成的字符串 s,我们需要通过添加最少数量的括号(( 或 ))使得字符串有效。有效字符串需满足: 空字符串是有效的。 …...

python基础-10-组织文件

文章目录 【README】【10】组织文件(复制移动删除重命名)【10.1】shutil模块(shell工具)【10.1.1】复制文件和文件夹【10.1.1.1】复制文件夹及其下文件-shutil.copytree 【10.1.2】文件和文件夹的移动与重命名【10.1.3】永久删除文件和文件夹【10.1.4】用…...

ORA-09925 No space left on device 问题处理全过程记录

本篇文章关键字:linux、oracle、审计、ORA-09925 一、故障现像 朋友找到我说是他们备份软件上报错。 问题比较明显,ORA-09925,看起来就是空间不足导致的 二、问题分析过程 这里说一下逐步的分析思路,有个意外提前说一下就是我…...

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测

多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测 目录 多输入多输出 | Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 Matlab实现BO-GRU贝叶斯优化门控循环单元多输入多输出预测&#…...

27信号和槽_自定义信号(2)

自定义信号和槽 绑定信号和槽 如何才能触发出自定义的信号呢?(上诉代码只是将信号和槽绑定在一起,但并没有触发信号) Qt 内置的信号,都不需要咱们手动通过代码来触发 用户在 GUI, 进行某些操作,就会自动触发对应信号.(发射信号的代码已经内置…...

人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开!

人工智能在生物医药领域的应用地图:AIBC2025将于6月在上海召开! 近年来,人工智能在生物医药行业中的应用受到广泛关注。 2024年10月,2024诺贝尔化学奖被授予“计算蛋白质设计和蛋白质结构预测”,这为行业从业人员带来…...

2025.3.19

1、用vim编辑/etc/hosts文件,将本机和第二个虚拟机的ip地址和主机名写入该文件,然后ping 两个主机的主机名能否ping通; (1)在第一个虚拟机编辑/etc/hosts: 首先使用hostname、hostnamectl、hostname -f指令查看主机名…...

深度学习 Deep Learning 第16章 结构化概率模型

深度学习 Deep Learning 第16章 结构化概率模型 内容概要 本章深入探讨了结构化概率模型(Graphical Models,包含有向图和无向图模型)的概念及其在深度学习中的应用。结构化概率模型通过图结构描述随机变量之间的直接交互,从而简…...

HTML5 vs HTML 和 CSS3 vs CSS:全面对比

HTML5 与 HTML HTML 概述 HTML (HyperText Markup Language) 是构建网页的标准标记语言。HTML 经历了多个版本的发展: HTML 2.0 (1995年):最早的标准化版本 HTML 4.01 (1999年):增加了样式表支持 XHTML (2000年):基于XML的更严…...

鸿蒙 harmonyOS 网络请求

应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 第一步 : 在module.json5文件里面添加网络…...

进程概念(Linux)

目录 一. 冯诺依曼体系结构 二. 操作系统(OS(操作系统的英文缩写Operator System)) 2.1概念 2-2 设计OS的目的 2.3 核心功能 2.4 如何管理(先描述再组织) 2.5 系统调用和库函数概念 三.进程 3.1 基本概念与基本操作 3.2 描述进程-PCB 3.3 如何…...

程序化广告行业(59/89):广告验证与反作弊实战技巧

程序化广告行业(59/89):广告验证与反作弊实战技巧 大家好!在程序化广告领域,想要做好投放,除了了解基本的架构和原理,还得掌握一些关键的技能,比如广告验证和反作弊。今天就和大家一…...

链路聚合配置命令

技术信息 加入捆绑组,加大链路间带宽等 配置命令 华三 静态聚合 将接口加入聚合口后再进行配置 //创建静态链路聚合口1,不启用lacp[SWB]interface Bridge-Aggregation 1 [SWB-Bridge-Aggregation1]port link-type trunk [SWB-Bridge-Aggregation…...

免费在线MBTI性格测试工具 - 探索你的性格特质

免费在线MBTI性格测试工具 - 探索你的性格特质 简介 我很高兴为大家分享这个专业的MBTI性格测试工具。这是一个完全免费的在线测试系统,基于迈尔斯-布里格斯类型指标(MBTI)理论开发,旨在帮助您更好地了解自己的性格特征,发现职业发展方向。…...

zk基础—2.架构原理和使用场景二

大纲 1.zk的使用场景 2.zk主要会被用于那些系统 3.为什么在分布式系统架构中需要使用zk集群 4.zk分布式系统具有哪些特点 5.zk集群机器的三种角色 6.客户端与zk之间的长连接和会话 7.zk的数据模型znode和节点类型 8.zk最核心的Watcher监听回调机制 9.ZAB协议的主从同步…...

AI 数理逻辑基础之统计学基本原理(上)

目录 文章目录 目录统计学统计学基本概念描述性统计数据可视化图表工具 汇总统计统计数据的分布情况:中位数、众数、平均值统计数据的离散程度:极差、方差、标准差、离散系数 相关分析Pearson 线性关系相关系数Spearman 单调关系相关系数 回归分析回归模…...

积分赛——读取实时时间

设计要求 调用DS1302芯片驱动程序,读取DS1302中的实时时分秒数据,并显示在数码管上。 23时59分59秒 通过串口发送时间作为定时时间,定时时间到则蜂鸣器响2s后静音。 串口发送格式:“12:35:66”。 备注&…...

12.青龙面板自动化我的生活

安装 docker方式 docker run -dit \ -v /root/ql:/ql/data \ -p 5700:5700 \ -e ENABLE_HANGUPtrue \ -e ENABLE_WEB_PANELtrue \ --name qinglong \ --hostname qinglong \ --restart always \ whyour/qinglongk8s方式 https://truecharts.org/charts/stable/qinglong/ he…...

进程和线程的概念及Linux操作

文章目录 一、进程与线程1、进程2、线程3、查看进程与线程 二、Linux的“虚拟内存管理”,它与stm32中的 真实物理内存(内存映射)有什么区别?三、Linux系统调用函数 fork()、wait()、exec() 等1、fork()函数…...

uniapp中uploadFile的用法

基本语法 uni.uploadFile(OBJECT)OBJECT 是一个包含上传相关配置的对象,常见参数如下: 参数类型必填说明urlString是开发者服务器地址。filePathString是要上传文件资源的本地路径。nameString是文件对应的 key,开发者在服务端可以通过这个 …...

VirtualBox 配置双网卡(NAT + 桥接)详细步骤

在 VirtualBox 中为 CentOS 虚拟机配置双网卡(NAT 桥接),使其既能访问外网(NAT),又能与宿主机(Windows 10)或局域网通信(桥接)。 步骤 1:关闭虚…...

APang网联科技项目报告【服务器篇】

APang网联科技:连接未来,智能领航 公司简介 APang网联科技成立于 [2005年],总部位于 [广东深圳],是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…...

[MySQL初阶]MySQL表的操作

MySQL表的操作 1. 创建表2. 查看表结构3. 修改表(修改表的属性而非表的数据)4. 删除表 1. 创建表 语法: CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…...