LVS-DR负载群集的优势和部署实例(我们都会在各自喜欢的事情里变得可爱)

news2024/12/23 10:04:14

文章目录

  • 一、DR模式数据包流向分析
  • 二、DR模式的特点
  • 三、DR模式中需要解决的问题
    • 问题1
      • 解决方式
    • 问题2
      • 解决方式
  • 四、LVS-DR部署实例
    • 1.配置NFS共享存储器
    • 2.配置节点web服务(两台的配置相同)
    • 3.配置LVS负载调度器

一、DR模式数据包流向分析

1.Client 客户端发送请求到 Director Server(负载均衡器),请求的数据报文(源IP是 CIP,目的IP 是VIP)到达内核空间。

2.Director Server(负载均衡器)和 Real Server(节点服务器)在同一个网络中,数据通过二层数据链路层(MAC地址)传输。

3.内核空间判断数据包的目标IP是否是本机VIP,此时IPVS(IP虚拟服务器)比对数据包请求的服务是否是集群服务,是集群服务就重新封装数据包。修改源MAC地址为Diretor Server的MAC地址,修改目的MAC 地址为 Real Server的 MAC 地址,源IP地址与目标IP地址没有改变,然后将数据包发送给Real Server处理。

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

5.Real Server直接将响应报文传送到客户端。

二、DR模式的特点

  • Director Server 和 Real server 必须在同一个物理网络中。
  • Real Server 可以使用私有地址,也可以使用公网地址。如果使用公网地址,可以通过互联网对RIP进行直接访问。
  • Director Server作为群集的访问入口,但不作为网关使用。
    所有的请求报文经由 Director Server,但回复响应报文不能经过 Director Server。
  • Real Server 的网关不允许指向 Director Server IP,即Real Server发送的数据包不允许经过 Director Server。
  • Real Server 上的 lo 接口配置VIP的IP地址。
    在这里插入图片描述

三、DR模式中需要解决的问题

问题1

在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱。
当ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播。

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

解决方式

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

问题2

Real Server返回报文(源IP是VIP)经网关路由器转发,重新封装报文时,需要先获取路由器的MAC地址。
发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送接口的IP地址

解决方式

使用Real Server 的物理网卡地址(即RIP)作为响应报文的IP,这样就不会导致网关服务器的ARP缓存表的紊乱。
设置内核参数arp_announce=2 使系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址。

总结
vim /etc/sysctl.conf
#使linux系统只响应目的地址为本地物理网卡IP的ARP请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.all.arp_ignore = 1
#使linux系统不使用数据包的源IP来作为ARP请求报文的源IP,而使用发送接口的IP地址作为ARP请求报文的源IP
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2

四、LVS-DR部署实例

Web 服务器1:192.168.116.10(VIP 192.168.116.100)
Web 服务器2:192.168.116.20(VIP 192.168.116.100)
NFS 共享存储器:192.168.116.30
LVS 负载调度器:192.168.116.40
网关/路由器:192.168.116.2
客户端:192.168.116.50

1.配置NFS共享存储器

systemctl stop firewalld.service
setenforce 0
 
yum -y install nfs-utils rpcbind
mkdir /opt/nfs/server1 /opt/nfs/server2
chmod -R 777 /opt/nfs
 
vim /etc/exports
/opt/nfs 192.168.116.0/24(rw,sync)
/opt/nfs/server1 192.168.116.0/24(rw,sync)
/opt/nfs/server2 192.168.116.0/24(rw,sync)
 
systemctl restart rpcbind.service
systemctl restart nfs.service

检查发布的共享策略

在这里插入图片描述
分别在共享目录中添加web测试页面(两个可以有所区别)
在这里插入图片描述

2.配置节点web服务(两台的配置相同)

配置好ip地址,并将网关指定为网关/路由器的ip地址

安装nginx提供web服务(apache、nginx等均可,仅用于实验)
在这里插入图片描述
将网站根目录挂载到各自的共享目录
在这里插入图片描述
查看是否共享成功
在这里插入图片描述
添加回环网卡虚拟ip

cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0
 
vim /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.116.100
NETMASK=255.255.255.255
ONBOOT=yes
 
ifup lo:0

在这里插入图片描述
添加静态路由(将数据包封锁在回环网卡中)

#临时配置
route add -host 192.168.116.100 dev lo:0
 
#永久配置
vim /etc/rc.local
/sbin/route add -host 192.168.116.100 dev lo:0
chmod +x /etc/rc.d/rc.local

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

vim /etc/sysctl.conf
#添加
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
 
#加载配置
sysctl -p

3.配置LVS负载调度器

配置虚拟ip

vim /etc/sysconfig/network-scripts/ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.116.100
NETMASK=255.255.255.255
 
 
#启用网卡配置
ifup ens33:0

调整 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

启用ip_vs,下载并开启ipvsadm管理工具

modprobe ip_vs
 
yum install -y ipvsadm.x86_64 
 
#添加系统管理服务
ipvsadm-save > /etc/sysconfig/ipvsadm
systemctl start ipvsadm.service 

配置负载分配策略

#指定监听服务器虚拟ip的80端口,算法为轮询
ipvsadm -A -t 192.168.116.100:80 -s rr
 
#指定节点服务器 -t 指定虚拟ip -r 指定真实ip,-g 代表使用DR模式
ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.10 -g
ipvsadm -a -t 192.168.116.100:80 -r 192.168.116.20 -g
 
#添加为默认策略
ipvsadm-save > /etc/sysconfig/ipvsadm

使用客户端访问测试(访问虚拟ip地址,刷新出多个页面代表不同节点服务器处理)

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

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

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

相关文章

【Hello MySQL】数据库基础

目录 1. 什么是数据库 2. 主流数据库 3. MySQL的基本使用 3.1 MySQL安装 3.2 连接 MySQL 服务器 3.3 退出 MySQL 服务器 3.4 服务器,数据库,表关系 3.5 MySQL的配置 4. MySQL架构 5. SQL分类 6. 存储引擎 6.1 存储引擎 6.2 查看存储引擎 6.3 存储引擎对…

Vue.js 中的 $nextTick 方法是什么?有什么作用?

Vue.js 中的 $nextTick 方法是什么? 在 Vue.js 中,$nextTick 方法是一个非常有用的工具,它可以让我们在下一个 DOM 更新周期之前执行回调函数。这个方法可以用于很多场景,比如在 Vue 实例数据改变之后,立即获取更新后…

肠道重要菌属——Dorea菌,减肥过敏要重视它?

谷禾健康 认识 Dorea菌 Dorea菌属于厚壁菌门毛螺菌科,广泛存在于人体肠道内,谷禾数据显示该菌在人群的检出率超89%。该菌最早也是从人体粪便中分离出来。 “Dorea” 目前没有一个确定的译名,Dorea是以法国微生物学家 Joel Dor 的名字命名&…

进入流程化管理不再是奢望,开源快速开发框架助你梦想成真!

在数字化进程快速发展的今天,流程化管理是企业做强做大的重要一步。如何实现流程化管理?如何实现数字化发展目标?这些问题都是值得每一个企业深思的重要课题。开源快速开发框架是一种快速帮助企业提质增效的平台软件,可以让每一个…

使用gcc展示完整的编译过程(gcc预处理模式、编译模式、汇编模式、连接模式)

最近在了解 clang/llvm 的时候突然发现一件事:gcc是一个工具集合,包含了或者调用将程序源代码转换成可执行程序文件的所有工具,而不只是简单的编译器。这帮助我对“编译器”有了更深刻的理解,所以写下本文作为记录。 关于“编译器…

如何用Web服务组件IIS免费搭建站点,并实现外网远程访问?

作为一名程序猿,经常会有搭建网站的需求,或被朋友要求帮忙着搭建网站,但是如果将网站建设在个人电脑或公司的服务器上,面临的问题是,没有公网IP或屏蔽了外网的80端口,在外网环境下就无法直接内网的网站&…

chatgpt赋能python:将一行数变成列——Python简单实现

将一行数变成列——Python简单实现 在数据处理时,我们常常会遇到将一行的数据转换成列的情况,例如将多个数据在Excel表格中拆分为不同的列。这时候,Python可以帮助我们快速实现这个功能。 什么是Python? Python是一种高级&…

linux ubi文件系统加载失败“too large reserved_peds”

今天要升级linux根文件系统ubi,结果简单打包工作,就有一个始终不正确,花了不少时间,总算搞明白了。 我使用了两个打包脚本,脚本1是一个整个系统打包脚本,脚本2是一个专门给文件系统打包的脚本。 脚本1的部…

Vue框架和Axios实战:音乐播放器项目-歌手信息列表

Vue框架和Axios实战:音乐播放器项目-歌手信息列表 歌手信息一栏用于展示当前比较火热的歌手信息列表,首先我们创建静态热门歌手信息模型组件SingerList.vue,主要用于存放公共歌手列表信息,代码如下: 接着将歌手信息列表…

【前端 - HTML】第 5 课 - 表格标签

欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、基本用法 3、表格结构标签 4、合并单元格 5、总结 1、缘起 在 HTML 中的表格标签 用于创建和展示数据表格。通过…

CAM, Grad-CAM, Grad-CAM++可视化CNN方式的代码实现和对比

当使用神经网络时,我们可以通过它的准确性来评估模型的性能,但是当涉及到计算机视觉问题时,不仅要有最好的准确性,还要有可解释性和对哪些特征/数据点有助于做出决策的理解。模型专注于正确的特征比模型的准确性更重要。 理解CNN…

【数据结构】排序篇

排序 一、排序的概念和应用1.1、排序的概念1.2、排序的应用1.3、常见的排序算法 二、插入排序2.1、直接插入排序2.2、希尔排序3.1.直接选择排序3.2、堆排序 四、交换排序4.1、冒泡排序4.2、快速排序4.2.1、hoare版本4.2.2、挖坑法4.2.3、前后指针版本4.2.4、快排非递归&#xf…

图结构的原理

引言 胡图图:“我成为电脑砖家(人们都在我吧上评论电脑配置).,按理说我应该开一家图图计算机研究科技公司…”! 于小美:“没错,图图应该开一家公司 来扩展你的专业知识” 何壮壮:“厉害是厉害 ,要不要大哥来帮帮你(至于钱,好说:月薪2万)…” 图图:“你狮子大开口! ,那你还是当…

『赠书活动--第三期』清华社赞助 | 《Python系列丛书》

『赠书活动 | 第三期』 本期书籍:《Python系列丛书》 Python从入门到精通(微课精编版) PyTorch深度学习简明实战 Django Web开发实例精解 Python分布式机器学习 Python Web深度学习 618,清华社 IT BOOK 多得图书活动开始啦!活动…

Vue.js 中的 keep-alive 组件使用详解

Vue.js 中的 keep-alive 组件 在 Vue.js 中,keep-alive 组件是一个非常有用的组件,它可以帮助我们优化页面性能。在本文中,我们将介绍 keep-alive 组件是什么,如何使用它以及它的作用。 keep-alive 组件是什么? keep…

C plus plus ——【模板应用】

系列文章目录 C plus plus ——【模板应用】 文章目录 系列文章目录前言一、函数模板1.1、函数模板的定义1.2、函数模板的作用1.3、重载函数模板 二、类模板2.1、类模板的定义与声明2.2、简单类模板2.3、默认模板参数2.4、为具体类型的参数提供默认值 三、总结 前言 模板是C语…

Selenium Python教程第4章

4. 查找元素 在一个页面中有很多不同的策略可以定位一个元素。在你的项目中, 你可以选择最合适的方法去查找元素。Selenium提供了下列的方法给你: find_element_by_id find_element_by_name find_element_by_xpath find_element_by_link_text find_element_by_par…

自己制作智能语音机器人(基于jetson nano)

1 简介 如上图,主要采用jetson上编写python代码实现,支持离线语音唤醒、在线语音识别、大模型智能文档、在线语音合成。 所需硬件如下: jetson nano:linux科大讯飞麦克风硬件:AIUI R818麦克阵列开发套件6麦阵列&#…

华为全栈自主数据库GaussDB正式面向全球服务

一、前言 在6月7日举行的华为全球智慧金融峰会2023上,华为发布新一代分布式数据库GaussDB,并正式向全球客户提供服务。据介绍,GaussDB实现了核心代码100%自主研发,是国内当前唯一做到软硬协同、全栈自主的国产数据库。 可谓是里…

继承类的方法

1 问题 定义一个父类,用子类去继承父类所拥有的方法、定义属性,然后使用测试文件实现子类输出父类的方法信息,属性等。 2 方法 2.1 定义一个名为Person的父类: 2.2 定义一个名为Student的子类,并令其继承父类&#xff…