LVS原理详解及实战部署

news2024/11/24 22:44:49
一、LVS简介

        LVS(Linux Virtual Server)是一种基于Linux的高性能虚拟服务器集群系统,主要用于实现负载均衡。LVS通过Linux内核中的IPVS模块实现了基干!P负载均衡的功能,能够将来自网络的请求分配给后端的多个服务器,从而提供高可用性和伸缩性。这种技术在处理大规模网络请求时尤其有用,例如大型网站和在线服务,能够有效防止单点故障并提升服务的可靠性和性能。LVS的工作原理可以简要概括为“请求分发"和“响应返回”两个主要环节。当用户请求发送至LVS虛拟IP地址(VIP)时,LVS调度器会根据预设的算法(如轮询、最少连接等)决定将请求发送至哪一台后端服务器。后端服务器处理完请求后,将响应数据直接返回给用户,从而完成整个请求-响应流程。

二、LVS结构

 使用LVS架设的服务器集群系统有三个部分组成:
        1、最前端的负载均衡层:用Load Balancer表示,中间的服务器群组层,用Server Cluster表示,最底端的数据共享存储层,用Storage表示,在用户看来,所有的内部应用都是透明的,用户只是在使用一个虚拟服务器提供的高性能服务。
        2、Load Balancer层:位于整个集群系统的最前端,有一台或者多台负载调度器(Diector Server 管理服务器)组成,LVS模块就安装在Director Server上,而Director的主要作用类似于一个路由器,它含有完成LVS功能所设定的路由表,通过这些路由表把用户的请求分发给Server Array层的应用服务器(Real Server)上。同时,在Director Server上还要安装对Real Server服务的监控模块Ldirectord,此模块用于监测各个Real Server服务的健康状况。在Real Server不可用时把它从LVS路由表中剔除,恢复时重新加入。

          3、Server Cluster层:由一组实际运行应用服务的机器组成,Real Server可以是WEB服务器、MAIL服务器、FTP服务器、DNS服务器视频服务器中的一个或者多个,每个Real Server之间通过高速的LAN或分布在各地的WAN相连接。在实际的应用中,Director Server也可以同时兼任Real Server的角色。
        4、Storage层:是为所有Real Server提供共享存储空间和内容一致性的存储区域,在物理上,一般有磁盘阵列设备组成,为了提供内容的一致性,一般可以通过NFS网络文件系统共享数据,但是NFS在繁忙的业务系统中,性能并不是很好,此时可以采用集群文件系统,例如Red hat的GFS文件系统,oracle提供的OCFS2文件系统等。

三、LVS相关术语

        1.DS: Director Server。指的是前端负载均衡器节点
        2.RS:Real Server。后端真实的工作服务器
        3.VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址
        4.DIP:Director Server IP,主要用于和内部主机通讯的IP地址
        5.RIP:Real ServerlP,后端服务器的IP地址
        6.CIP:ClientIP,访问客户端的IP地址

四、LVS负载均衡工作原理

1、LVS DR模式

详解图:

原理:

        1.当客户端请求 www.sina.com.cn 主页,请求数据包穿过网络到达 Sina 的 LVS 服务器网卡:源 |P 是客户端 IP 地址 CIP,目的 IP是新浪对外的服务器 P 地址,也就是 VIP;此时源 MAC 地址是 CMAC,其实是 LVS 连接的路由器的 MAC 地址(为了容易理解记为 CMAC),目标 MAC 地址是 VIP 对应的 MAC,记为 VMAC
        2.数据包经过链路层到达 PREROUTING 位置(刚进入网络层),査找路由发现目的 IP 是 LVS 的 VIP,就会递送到 INPUT 链上,此时数据包 MAC、IP、Port 都没有修改。
        3.数据包到达 INPUT 链,INPUT 是 LVS 主要工作的位置。此时 LVS 会根据目的 IP 和 Port 来确认是否是 LVS 定义的服务,如果是定义过的 VP 服务,就会根据配置信息,从真实服务器列表 中选择一个作为 RS1,然后以 RS1 作为目标査找 Out 方向的路由,确定一下跳信息以及数据包要通过哪个网卡发出。最后将数据包投递到 OUTPUT 链上。
        4.数据包通过 POSTROUTING 链后,从网络层转到链路层,将目的 MAC地址修改为 RealServer 服务器 MAC 地址,记为 RMAC而源 MAC 地址修改为 LVS 与 RS 同网段的 selfiP 对应的 MAC 地址,记为 DMAC 。此时,数据包通过交换机转发给了RealServer 服务器(注:为了简单图中没有画交换机)。
        5.请求数据包到达后端真实服务器后,链路层检査目的 MAC 是自己网卡地址。到了网络层,査找路由,目的IP 是 VP(o 上配置了VIP),判定是本地主机的数据包,经过协议栈拷贝至应用程序(比如 nginx 服务器),nginx 响应请求后,产生响应数据包。
        6.然后以 CIP 查找出方向的路由,确定下一跳信息和发送网卡设备信息。此时数据包源、目的 IP 分别是 VIP、CIP,而源 MAC 地址是RS1的 RMAC,目的 MAC 是下一跳(路由器)的 MAC 地址,记为 CMAC(为了容易理解,记为 CMAC)。然后数据包通过RS 相连的路由器转发给真正客户端,完成了请求响应的全过程。
        从整个过程可以看出,DR 模式 LVS 逻辑比较简单,数据包通过直接路由方式转发给后端服务器,而且响应数据包是由 RS 服务器直接发送给客户端,不经过 LS。我们知道通常请求数据包会比较小,响应报文较大,经过LVS 的数据包基本上都是小包,所以这也是 LVS 的DR 模式性能强大的主要原因。

特性:

  • 前端路由将目标地址为VIP报文统统发给Director Server
  • RS跟Director Server必须有一个网卡在同一个物理网络中
  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
  • 所有的real server机器上都有VIP地址

优缺点以及使用场景:

优点:

1.响应数据不经过 Ivs,性能高
2.对数据包修改小,信息保存完整(携带客户端源 IP)

缺点:

1.Ivs 与rs 必须在同一个物理网络(不支持跨机房)

2.服务器上必须配置 lo 和其它内核参数

3.不支持端口映射

场景:

如果对性能要求非常高,可以首选 DR 模式,而且可以透传客户端源 IP 地址。

2、LVS NAT模式

详解图:

原理:

        1.用户请求数据包经过层层网络,到达 Ivs 网卡,此时数据包源 IP 是 CIP,目的 IP 是 VIP。
        2.经过网卡进入网络层 prerouting 位置,根据目的IP 査找路由,确认是本机 IP,将数据包转发到 INPUT 上,此时源、目的IP 都未发生变化。
        3.到达 is后,通过目的 IP 和目的 port 査找是否为 IPVS 服务。若是 IPVS 服务,则会选择一个 RS 作为后端服务器,将数据包目的IP 修改为 RIP,并以 RIP 为目的 IP 查找路由信息,确定下一跳和出口信息,将数据包转发至 output 上。
        4.修改后的数据包经过 postrouting 和链路层处理后,到达 RS 服务器,此时的数据包源 IP 是 CIP,目的 IP 是 RIP。
        5.到达 RS 服务器的数据包经过链路层和网络层检査后,被送往用户空间 nginx 程序。nginx 程序处理完毕,发送响应数据包,由于RS 上默认网关配置为 Ivs 设备 IP,所以 nginx 服务器会将数据包转发至下一跳,也就是 Ivs 服务器。此时数据包源 IP 是 RIP,目的IP是 CIP。
        6.Ivs 服务器收到 RS 响应数据包后,,根据路由查找,发现目的 IP 不是本机 IP,且 Ivs 服务器开启了转发模式,所以将数据包转发给forward 链,此时数据包未作修改。
        7.|vs 收到响应数据包后,根据目的 P 和目的 port 査找服务和连接表,将源 IP 改为 VP,通过路由査找,确定下一跳和出口信息,将数据包发送至网关,经过复杂的网络到达用户客户端,最终完成了一次请求和响应的交互。
        NAT 模式双向流量都经过 LVS,因此 NAT 模式性能会存在一定的瓶颈。不过与其它模式区别的是,NAT 支持端口映射,且支持 windows操作系统。

特性:

  • NAT模式修改的是目的ip,直接走的是switch不需要修改mac地址,所以VIP和RIP不需要在同一个网段内
  • NAT的包的进出都需要经过LVS,所以LVS可能会成为一个系统的瓶颈问题

优点:实现简单,兼容性强,能够进行细粒度的流量控制。

缺点:负载均衡器成为数据传输的瓶颈,可能导致性能下降;需要更多的处理能力和网络带宽。

场景:如果你是 windows 系统,使用 lvs 的话,则必须选择 NAT 模式了。

3.LVS FULLNAT模式

报文变化:

特性:

  • FULLNAT模式也不需要DIP和RIP在同一网段
  • FULLNAT和NAT相比的话:会保证RS的回包一定可到达LVS
  • FULLNAT需要更新源IP,所以性能正常比NAT模式下降10%

4.LVS TUN模式

详解图:

原理:

        1.用户请求数据包经过多层网络,到达 Ivs 网卡,此时数据包源 IP 是 cip,目的 ip 是 vip。
        2.经过网卡进入网络层 prerouting 位置,根据目的 i 査找路由,确认是本机,ip,将数据包转发到 input 链上,到达 vs,此时源、目的ip 都未发生变化。
        3.到达 lvs 后,通过目的 ip 和目的 port 查找是否为 IPVS 服务。若是IPVS 服务,则会选择一个rs作为后端服务器,以 rip 为目的 ip查找路由信息,确定下一跳、dev 等信息,然后IP 头部前边额外增加了一个IP 头(以 dip 为源,rip 为目的ip),将数据包转发至output 上。
        4.数据包根据路由信息经最终经过 Ivs 网卡,发送至路由器网关,通过网络到达后端服务器。
        5.后端服务器收到数据包后,ipip 模块将 Tunnel头部卸载,正常看到的源ip是 cip,目的 ip是 vip,由于在 tun10 上配置 vip,路由查找后判定为本机 ip,送往应用程序。应用程序 nginx 正常响应数据后以 vip 为源 ip,cip 为目的 i 数据包发送出网卡,最终到达客户端。
        Tunnel 模式具备 DR 模式的高性能,又支持跨机房访问,听起来比较完美。不过国内运营商有一定特色性,比如 RS 的响应数据包的源IP为 VIP,VP 与后端服务器有可能存在跨运营商的情况,很有可能被运营商的策略封掉,Tunne! 在生产环境确实没有使用过,在国内推行 Tunnel 可能会有一定的难度吧。

特性:

  • TUNNEL必须在所有的realserver上绑定VIP
  • realserver直接把包发给client
  • 隧道模式运维起来会比较难,所以一般不用

优点:灵活性高,能够支持复杂的网络拓扑;适用于需要跨网络的数据传输。

缺点:配置复杂,可能增加网络延迟和开销;需要额外的网络设备或配置支持。

场景:理论上,如果对转发性能要求较高,且有跨机房需求,Tunnel 可能是较好的选择。

四种模式性能比较:DR>TUN>NAT>FULLNAT

五、LVS负载均衡调度算法

1. 轮叫调度 rr
        均等地对待每一台服务器,不管服务器上的实际连接数和系统负载
2. 加权轮叫 wrr
        调度器可以自动问询真实服务器的负载情况,并动态调整权值
3. 最少链接 lc
        动态地将网络请求调度到已建立的连接数最少的服务器上,如果集群真实的服务器具有相近的系统性能,采用该算法可以较好的实现负载均衡
4. 加权最少链接 wlc
        调度器可以自动问询真实服务器的负载情况,并动态调整权值
        带权重的谁不干活就给谁分配,机器配置好的权重高
5. 基于局部性的最少连接调度算法 lblc
        这个算法是请求数据包的目标 IP 地址的一种调度算法,该算法先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
6. 复杂的基于局部性最少的连接算法 lblcr
        记录的不是要给目标 IP 与一台服务器之间的连接记录,它会维护一个目标 IP 到一组服务器之间的映射关系,防止单点服务器负载过高。
7. 目标地址散列调度算法 dh
        该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。
8. 源地址散列调度算法 sh
        与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。
9. 最少期望延迟 sed
        不考虑非活动链接,谁的权重大,优先选择权重大的服务器来接收请求,但权重大的机器会比较忙
10. 永不排队 nq
        无需队列,如果有realserver的连接数为0就直接分配过去

六、实操

1.配置网络

三台机器:
分发器(调度器director)
内网:192.168.100.100 (nat网卡模式)外网:192.168.179.128(仅主机模式)关闭本机上的nginx(由于设置了systemctl stop keepalived)
real server1(real1)
内网:192.168.100.102 (nat网卡模式)设置网关为: 192.168.100.100 开启本机上的nginx
real server2(real2)
内网:192.168.100.103 (nat网卡模式)设置网关为: 192.168.100.100 开启本机上的nginx

2.防火墙

关闭系统防火墙:
systemctl stop firewalld
systemctl disable firewalld
关闭SELinux:
setenforce 0
vim /etc/selinux/config
SELINUX=disabled
注: 分别在三台机器进行上述操作。

以下操作在real1和real2中进行:
安装iptables服务:
yum install -y iptables-services 
设置iptables服务:
iptables -F
service iptables save
说明: 进行该设置的原因是NAT模式是基于防火墙nat表的一种模式,所以会使用iptables规则。

3.开始搭建

配置director:
安装ipvsadm工具:  
yum install -y ipvsadm  
配置ipvsadm脚本:
[root@director ~]# vim /usr/local/sbin/lvs_nat.sh
#! /bin/bash
# director 服务器上开启路由转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward
# 关闭icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
# 注意区分网卡名字,adai的两个网卡分别为ens33和ens37
echo 0 > /proc/sys/net/ipv4/conf/eno16777736/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/ens37/send_redirects
# director 设置nat防火墙
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.100.0/24  -j MASQUERADE
# director设置ipvsadm规则
IPVSADM='/usr/sbin/ipvsadm'
$IPVSADM -C
#-C=clear,清除规则
$IPVSADM -A -t 192.168.179.128:80 -s rr 
#-A:=add,添加规则;-t:=tcp;-s 指定算法;
#在此可以添加-p:指定超时时间(解决session问题:保证同一请求被分发到同一rs上)
#因为添加-p选项后会影响测试效果,所以在此不加该参数(注:时间不能设置为0)
$IPVSADM -a -t 192.168.179.128:80 -r 192.168.100.102:80 -m -w 1
$IPVSADM -a -t 192.168.179.128:80 -r 192.168.100.103:80 -m -w 1
#-a:=add,增加nat架构中的rs;-r:指定rs的IP;-m:指定LVS模式为NAT(masquerade)
#-w:=weight,指定权重

执行该脚本:  
sh /usr/local/sbin/lvs_nat.sh
#注:执行该脚本时无错误输出说明没问题。
 
查看ipvsadm规则:
ipvsadm -ln

配置rs:
在两台rs上安装Nginx,并分别设置其主页用来区分两台机器。
yum install -y nginx
systemctl start nginx

编辑rs1主页:
vim /usr/share/nginx/html/index.html
This is real server 1.  
编辑rs2主页:
vim /usr/share/nginx/html/index.html
This is real server 2.
测试
访问公网IP:192.168.179.128。

curl 192.168.75.128

即搭建成功。

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

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

相关文章

Linux系统编程:线程 3:信号量

1.信号量的概念 信号量是线程间有顺序的协调工作,信号量 (个数) 反映的是资源的数量,信号量起到锁的效果; 2.信号量的机制 (1)信号量描述可使用资源的个数; (2)p操作&#xff0c…

第二证券:全球首款双人互动剧上线 暑期游戏持续升温

全球首款双人互动剧上线 全球首款双人互动剧《谍影成双》现已在全球游戏渠道Steam、微信小程序、QQ小程序同步上线。根据上海影视乐园官方大众号,该作是2023年度爆款互动剧《飞越13号房》制造团队互影科技的全新著作。 2023年被称为互动剧的元年,“互动…

python学习day15地图、柱状图

地图、柱状图 地图示例 柱状图XY轴反转小结 时间线柱状图自动播放小结 动态柱状图sort排序练习动态柱状图 地图 from pyecharts.charts import Map mapMap() data[(北京市,999),(上海市,133),(河南省,123),(西藏自治区,123),(吉林省,12), ]map.add("地图",data,"…

ElasticSearch数据建模

文章目录 如何处理关联关系避免过多字段避免正则/通配符/前缀查询避免空值引起的聚合不准为索引的Mapping加入Meta 信息 如何处理关联关系 Object: 优先考虑反范式(Denormalization) Nested: 当数据包含多数值对象,同时有查询需求 Child/Pa…

SAP BAPI for Tcode SM12

注意:ENQUE_READ 和 ENQUE_READ2 的table ENQ是两个不同的结构 想通过 ENQUE_READ2 读取结构然后去删除 ENQUE_DELETE的 要注意不能直接用 要用 ENQUE_CONVERT_SEQG7_TO_SEQG3 进行转换 FUNCTION ENQUE_CONVERT_SEQG7_TO_SEQG3. *"-----------------------…

[000-01-030].第2节 :Zookeeper本地安装

1.Zookeeper下载地址 1.Zookeeper官网地址 2.会显示Zookeeper的一些版本 2.Zookeeper本地模式安装: 2.1.Zookeeper安装前准备 1.在Centos7虚拟机中安装jdk8 2.2.Zookeeper安装过程: 1.下载zookeeper压缩版本,解压放在opt/moduel目录下…

为啥90%设计师素材整理文件夹都是无效的?

大家好,今天我想和大家分享一下我在使用千鹿设计助手软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 正文: 大家好,今天我想和大家分享一下我在使用千鹿软件之前的图片管理经历,以及千鹿给我带来的巨大变化。 …

netCDF文件预览(nc格式)

1.工具下载 软件下载:https://download.csdn.net/download/qq_34321590/89645482 2.java11环境安装 需要安装java11以上版本 安装包下载: https://download.csdn.net/download/qq_34321590/89645487 安装步骤: 1.解压 2.配置环境变量 在…

针对老年人的景区订票系统

TOC springboot303针对老年人的景区订票系统 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,…

RK3588 RTL8125BG调试

RTL8125B是一款PCIE转RJ45的网卡控制器芯片,在底层调试时只需配置PCIE即可 diff --git a/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-nvr-demo.dtsi index 798359eaf061..d8a7a43cdfa0 100755 --- a/arch/arm64/bo…

【学习笔记】Day 14

一、进度概述 1、《地震勘探原理》第七章 二、详情 地震波动力学是相对于运动学而言的。运动学主要研究波的传播规律,其主要特征是分析、研究波的传播路径。传播速度。旅行时间等。地震波动力学则主要从能量的角度研究地震波的特征,如波的振幅、波形、频…

比eagle还好用?设计师如何做好素材管理|设计源文件管理|Flux文生图|快搜索|高效应用

用Eagle的设计师朋友们,有没有遇到这样的问题?像PS工程文件必须要保存后,才能打标签。需要修改的时候,还要打开Eagle搜索再拖进来,属实有点麻烦。不过我觉得Eagle让我最难受的还是,它的素材有专门的文件结构…

如何利用R语言学习机器学习?

机器学习是近年来非常热门的一个学科,R 语言经过一段时间的发展也逐渐成为主流的编程语言之一。 机器学习是人工智能的一个分支,旨在通过构建和训练计算机算法和模型,使计算机能够 从数据中学习并自主进行决策和预测。传统的计算机程序是由开…

C++快速理解之泛型编程

1、引入 #include <iostream>using namespace std;int add(int a, int b) {return a b; }float add(float x, float y) {return x y; }int main() {int result add(3, 4);cout << "result " << result << endl;float result2 add(3.5…

智能分班结果自动发布系统

新学期&#xff0c;校园里又将迎来一批充满活力的新生。对于老师们来说&#xff0c;除了准备教学计划和课程内容&#xff0c;还有一项看似简单却颇为繁琐的任务——发布分班。传统的分班信息发布方式&#xff0c;通常是老师们一个个私信给学生家长&#xff0c;家长们收到信息后…

【图像特效系列】图像滤镜特效的实践 | 包含代码和效果图

目录 一 滤镜特效 1 代码 2 效果图 图像特效系列主要是对输入的图像进行处理,生成指定特效效果的图片。图像素描特效会将图像的边界都凸显出来;图像怀旧特效是指图像经历岁月的昏暗效果;图像光照特效是指图像存在一个类似于灯光的光晕特效,图像像素值围绕光照中心点呈圆…

InternLM2_PracticalCamp_L1_rask4_llamaindex+Internlm2 RAG实践

1. 前置知识 正式介绍检索增强生成&#xff08;Retrieval Augmented Generation&#xff0c;RAG&#xff09;技术以前&#xff0c;大家不妨想想为什么会出现这样一个技术。 给模型注入新知识的方式&#xff0c;可以简单分为两种方式&#xff0c;一种是内部的&#xff0c;即更新…

DNS查询过程与原理

目录 DNS1. DNS 是什么2. DNS 服务器3. 使用dig显示查询过程4. 域名的逐级查询5. 简述DNS解析www.baidu.com的过程 参考 DNS 1. DNS 是什么 DNS &#xff08;Domain Name System 的缩写&#xff09;是域名解析器&#xff0c;根据域名查出IP地址 2. DNS 服务器 DNS 服务器是一…

Leon黎明广州演唱会2024重磅官宣,10月26日倾情开唱!

径自奔流的时光中&#xff0c;总有些声音拥有超越时间的力量&#xff0c;弥合着世代更迭的图景&#xff0c;在一代又一代人的心中闪烁不息。在熠熠生辉的星河中&#xff0c;垂钓破晓时分的曙光&#xff0c;总有星辰会指引着我们相遇。 当千禧年的风吹过耳畔&#xff0c;记忆深…

在 ToolStrip 控件中使用工具提示

可以通过将控件的 ShowItemToolTips 属性设置为 true 来为所需的 ToolStrip 控件显示 ToolTip。 显示工具提示 将控件的 ShowItemToolTips 属性设置为 true。 ToolStrip.ShowItemToolTips 的默认值为 true&#xff0c;MenuStrip.ShowItemToolTips 和 StatusStrip.ShowItemTool…