【Linux】LVS负载均衡群集 DR模式

news2024/11/25 10:53:26

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

LVS负载均衡群集 DR模式

    • 数据包流向分析
    • DR 模式的特点
    • LVS-DR中的ARP问题
      • VIP地址相同导致响应冲突
      • 返回报文时源地址使用VIP,导致网关设备的ARP缓存表紊乱
    • DR模式 LVS负载均衡群集部署
      • 配置负载调度器
      • 部署共享存储
      • 配置节点服务器
      • 测试 LVS 群集


数据包流向分析

(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 直接将响应报文传送到客户端。

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。
(6)Real Server 上的 lo 接口配置 VIP 的 IP 地址。

LVS-DR中的ARP问题

VIP地址相同导致响应冲突

问题原因:

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址,在局域网中具有相同的IP地 址,势必会造成各服务器ARP通信的紊乱。
当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会收到ARP广播。
只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播。

解决方法:

对节点服务器进行处理,使其不响应针对VIP的ARP请求
使用虚接口lo:0承载VIP地址
设置内核参数 arp_ ignore=1:系统只响应目的IP为本地IP(物理网卡的地址,而不是lo网卡的虚接口地址)的ARP请求。

返回报文时源地址使用VIP,导致网关设备的ARP缓存表紊乱

问题原因:

RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址。发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址。路由器收到ARP请求后,将更新ARP表项。原有的VIP对应Director的MAC地址,会被更新为VIP对应的Real Server的MAC地址。导致网关设备的ARP缓存表紊乱。
路由器根据ARP表项,会将新来的请求报文转发给Real Server,导致Director的VIP失效。

解决方法:

对节点服务器进行处理,设置内核参数arp_announce=2:系统不使用IP数据包的源地址来设置ARP请求的源地址,而选择发送接口(物理网卡)的IP地址。

DR模式 LVS负载均衡群集部署

DR 服务器:192.168.142.20
Web 服务器1192.168.142.30
Web 服务器2192.168.142.50
vip:192.168.142.188
客户端:192.168.142.200

配置负载调度器

systemctl stop firewalld.service
setenforce 0
modprobe ip_vs
cat /proc/net/ip_vs
yum -y install ipvsadm

(1)配置虚拟 IP 地址(VIP:192.168.142.188)

cd /etc/sysconfig/network-scripts/
cp ifcfg-ens32 ifcfg-ens32:0				#若隧道模式,复制为ifcfg-tunl0
vim ifcfg-ens32:0
DEVICE=ens32:0
ONBOOT=yes
IPADDR=192.168.142.188
NETMASK=255.255.255.255

ifup ens32:0
ifconfig ens32:0

(2)调整 proc 响应参数

#由于 LVS 负载调度器和各节点需要共用 VIP 地址,需要关闭 icmp 的重定向,不充当路由器。
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

sysctl -p

(3)配置负载分配策略

ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm

ipvsadm -C
ipvsadm -A -t 192.168.142.188:80 -s rr
ipvsadm -a -t 192.168.142.188:80 -r 192.168.142.30:80 -g			#若隧道模式,-g替换为-i
ipvsadm -a -t 192.168.142.188:80 -r 192.168.142.40:80 -g
ipvsadm

ipvsadm -ln					#查看节点状态,Route代表 DR模式

部署共享存储

systemctl stop firewalld.service
setenforce 0

yum -y install nfs-utils rpcbind
mkdir /opt/kgc /opt/benet
chmod 777 /opt/kgc /opt/benet

vim /etc/exports
/usr/share *(ro,sync)
/opt/kgc 192.168.142.0/24(rw,sync)
/opt/benet 192.168.142.0/24(rw,sync)

systemctl start rpcbind.service
systemctl start nfs.service

配置节点服务器

systemctl stop firewalld.service
setenforce 0

(1)配置虚拟 IP 地址(VIP:192.168.142.188)

#此地址仅用作发送 Web响应数据包的源地址,并不需要监听客户机的访问请求(改由调度器监听并分发)。因此使用虚接口 lo∶0 来承载 VIP 地址,并为本机添加一条路由记录,将访问 VIP 的数据限制在本地,以避免通信紊乱。
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0		
vim ifcfg-lo:0
DEVICE=lo:0
ONBOOT=yes
IPADDR=192.168.142.188
NETMASK=255.255.255.255
						#注意:子网掩码必须全为 1

ifup lo:0
ifconfig lo:0
route add -host 192.168.142.188 dev lo:0

vim /etc/rc.local
/sbin/route add -host 192.168.142.188 dev lo:0

chmod +x /etc/rc.d/rc.local

(2)调整内核的 ARP 响应参数以阻止更新 VIP 的 MAC 地址,避免发生冲突

vim /etc/sysctl.conf
......
net.ipv4.conf.lo.arp_ignore = 1			#系统只响应目的IP为本地IP的ARP请求
net.ipv4.conf.lo.arp_announce = 2		#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

sysctl -p

或者
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce

sysctl -p

yum -y install nfs-utils rpcbind httpd
systemctl start rpcbind
systemctl start httpd

--192.168.142.50---
mount.nfs 192.168.142.40:/opt/ztm /var/www/html
echo 'ztm=xjz' > /var/www/html/index.html

--192.168.142.30---
mount.nfs 192.168.142.40:/opt/ikun /var/www/html
echo 'ztm=ikun' > /var/www/html/index.html

测试 LVS 群集

在客户端使用浏览器访问 http://192.168.142.188/

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/721178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Pycharm配置解释器(interpreter)

关于pycharm编译器的解释器,网友朋友的分享 Pycharm配置(1)——解释器(interpreter) 详细了解PyCharm支持的4种Python Interpreter和配置方法 对大多数人而言就只需要 分清虚拟解释器和系统解释器,使用虚拟…

关闭Win10的预览窗口

关闭Win10的预览窗口 每次拖拽文件都显示那个黑边的模型一样的东西,通过上面可以关闭该功能。

MBD开发 STM32 外部仿真

要接一个串口,用来设备和simulink的通信 烧录即可 烧录时选择串口

.360勒索病毒的加密数据怎么处理?|.360勒索病毒数据解密恢复

.360勒索病毒是一种恶意软件,它对用户的计算机文件进行加密,并要求支付赎金才能解密恢复数据。这种勒索病毒以其广泛传播和严重破坏性而闻名,给个人用户和企业带来了巨大的困扰和损失。 一家中型制造企业,名为XYZ制造有限公司&…

用科技智造新未来!在线开发平台强力助推数字化发展

在科技智造新时代,科技的力量是无处不见的。运用科技可以创造美好的生活,可以实现数字化发展,帮助企业实现流程化管理。在线开发平台将科技元素注入到平台中,将科技与办公需求相连接,创造高效率办公及流程化发展。 1…

# hub.docker.com镜像加速站点仓库的搭建与使用

hub.docker.com镜像加速站点仓库的搭建与使用 文章目录 hub.docker.com镜像加速站点仓库的搭建与使用1 镜像仓库搭建1.1 创建目录及docker-compose.yaml1.2 如果要开启密码验证,需要先生成密码1.3 启动服务 2 用户端使用3 最后 前段时间由于拉取docker镜像&#xff…

初出茅庐的小李博客之链表知识2

链表知识点2 通过malloc函数动态创建节点&#xff1a; #include <stdio.h> #include <stdlib.h>typedef struct List Node_t;struct List {/*数据区域有两个变量*/int a;float b;/*地址区域有一个指针*/Node_t* pNext; };Node_t Head_Node; //表头变量 Node_t Bo…

ChatGPT与Excel结合_编写VBA宏

先来解释下什么是Excel vba宏 ⭐Excel VBA宏&#xff08;Visual Basic for Applications&#xff09;是一种用于在Microsoft Excel中自动化和扩展功能的编程语言。VBA允许用户编写自定义的脚本或宏&#xff0c;以便通过执行一系列指令来自动完成特定任务。 使用Excel VBA宏&a…

分布式——监控平台zabbix的认识与搭建

作为一个运维&#xff0c;需要会使用监控系统查看服务器系统性能、应用服务状态和网站流量指标等&#xff0c;利用监控系统的数据去了解网站上线发布的结果和健康状态。 利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●…

自学软件测试

自学软件测试体系&#xff08;1&#xff09; 前言&#xff1a;很多小伙伴想要自学软件测试课程走上测试工程师道路&#xff0c;基于此目的给出想要自学软件测试的一些小伙伴一些学习的方向。软件测试工程师的职业发展方向包括功能测试&#xff0c;自动化测试&#xff0c;专项测…

【Ubuntu学习MySQL——报错 ERROR 2002 (HY000)】

问题&#xff1a; 报错含义&#xff1a; 根据上面的报错&#xff0c;意思是说mysql想使用/var/run/mysqld/mysqld.scok文件&#xff0c;但是无法连接&#xff0c;接下来我们来看看这个文件是否存在 1.查看所有的sock文件 sudo find / -type s 根据上述命令所得出的结果可以知…

【REST规范】JAX-RS有哪些实现

JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services&#xff0c;是一个Java 编程语言的应用程序接口&#xff0c;支持按照表述性状态转移&#xff08;REST&#xff09;架构风格创建Web服务。JAX-RS使用了Java SE5引入的Java注解来简化Web服务的客…

electron应用重启,开机自启动(electron开发常用的方法、优化方案)

文章目录 electron应用重启electron开机自启动To run a local app, execute the following on the command line: electron应用重启 获取应用软件的安装路径electron中屏幕全屏&#xff0c;最大化&#xff0c;最小化&#xff0c;恢复electron启动白屏时间过长优化方案1. 按需加…

web测试需要注意几个非常重要的测试点

微软语言标准&#xff1a; 全角字符和半角字符都要使用一个空格分开 英文和数字直接要有空页面分辨率&#xff1a; 通常是计算机的默认分辨率&#xff0c;但是还是会有一些老式电脑存在1024*768的情况 浏览器的兼容性&#xff1a; 目前市场上的主流浏览器&#xff1a;IE8.0-…

Kubernetes入门实战课-k8s的基本架构

Kubernetes入门实战课-k8s的基本架构 文章目录 Kubernetes入门实战课-k8s的基本架构Kubernetes 的基本架构标准工作语言 YAML学习经验总结 Kubernetes 的基本架构 Kubernetes 扮演的角色就如同一个“大师级别”的系统管理员&#xff0c;具有丰富的集群运维经验&#xff0c;独创…

Java多线程基础-10:代码案例之定时器

定时器就是一个闹钟。它可以设定一个时间&#xff0c;当时间到&#xff0c;就可以执行某个指定的代码。 定时器是实际开发中的一种非常常用的组件。比如网络通信中&#xff0c;如果对方 500ms 内没有返回数据&#xff0c;则要求断开连接尝试重连&#xff1b;又比如一个 Map&…

华为OD机试真题 Python 实现【网上商城优惠活动(一)】【2022 Q4 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、补充说明五、Python算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 某网上商城举办优惠活动&#xff0c;发布了满减、打折、无门槛3种优惠券&#xff0c;分别为&#xff1a; 1.每满100元优惠10元&#xff0c;无使用数…

测试开发 —— 快速定位问题

写在前面 这两天工作实在是有点小忙&#xff0c;感觉好久没更新了&#xff0c;但是平时也是有感而发的比较多&#xff0c;今天遇到一个问题&#xff0c;感觉挺有意思&#xff0c;处理过程也非常有意义&#xff0c;希望能给大家一个借鉴吧。 测试平台又又又出问题了 今天一位…

ARM_cortex-A7核UART总线

实验一&#xff1a;键盘输入一个字符a,串口工具显示b‘ 实验二&#xff1a;实现现象&#xff1a;键盘输入一个字符串&#xff0c;串口工具回显输入的字符串 uart4.h #ifndef __UART4_H__ #define __UART4_H__#include "stm32mp1xx_gpio.h" #include "stm32m…

vue+relation-graph绘制关系图实用组件

先在终端执行命令 vue create relationgraph创建一个vue2的项目 然后在编辑器中打开新创建的项目 在终端中执行命令 npm install relation-graph --save引入依赖 这样 我们relation-graph就进来了 然后 我们在需要使用的组件中编写代码如下 <template><div>&…