首页 > 其他分享 >lvs负载均衡

lvs负载均衡

时间:2022-09-29 13:22:05浏览次数:488  
标签:负载 DR lvs IP 报文 Server 均衡 root 数据包


目录

基本介绍

LVS是 Linux Virtual Server 的简称,也就是Linux虚拟服务器。这是一个由章文嵩博士发起的一个开源项目,它的官方网站是 http://www.linuxvirtualserver.org 现在 LVS 已经是 Linux 内核标准的一部分。使用 LVS 可以达到的技术目标是:通过 LVS 达到的负载均衡技术和 Linux 操作系统实现一个高性能高可用的 Linux 服务器集群,它具有良好的可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的性能。LVS 是一个实现负载均衡集群的开源软件项目,LVS架构从逻辑上可分为调度层、Server集群层和共享存储。

基本工作原理

  1. 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间
  2. PREROUTING链首先会接收到用户请求,判断目标IP确定是本机IP,将数据包发往INPUT链
  3. IPVS是工作在INPUT链上的,当用户请求到达INPUT时,IPVS会将用户请求和自己已定义好的集群服务进行比对,如果用户请求的就是定义的集群服务,那么此时IPVS会强行修改数据包里的目标IP地址及端口,并将新的数据包发往POSTROUTING链
  4. POSTROUTING链接收数据包后发现目标IP地址刚好是自己的后端服务器,那么此时通过选路,将数据包最终发送给后端的服务器

LVS的组成

LVS 由2部分程序组成,包括 ipvs 和 ipvsadm。

  1. ipvs(ip virtual server):一段代码工作在内核空间,叫ipvs,是真正生效实现调度的代码。
  2. ipvsadm:另外一段是工作在用户空间,叫ipvsadm,负责为ipvs内核框架编写规则,定义谁是集群服务,而谁是后端真实的服务器(Real Server)

LVS相关术语

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

lvs三种工作模式

NAT原理和特点


(a). 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b). PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c). IPVS比对数据包请求的服务是否为集群服务,若是,修改数据包的目标IP地址为后端服务器IP,然后将数据包发至POSTROUTING链。 此时报文的源IP为CIP,目标IP为RIP
(d). POSTROUTING链通过选路,将数据包发送给Real Server
(e). Real Server比对发现目标为自己的IP,开始构建响应报文发回给Director Server。 此时报文的源IP为RIP,目标IP为CIP
(f). Director Server在响应客户端前,此时会将源IP地址修改为自己的VIP地址,然后响应给客户端。 此时报文的源IP为VIP,目标IP为CIP

LVS-NAT模型的特性

  • RS应该使用私有地址,RS的网关必须指向DIP

  • DIP和RIP必须在同一个网段内

  • 支持端口映射

  • RS可以使用任意操作系统

  • 缺陷:请求和响应报文都需要经过Director Server,高负载场景中,Director Server易成为性能瓶颈

DR原理和特点


(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,将请求报文中的源MAC地址修改为DIP的MAC地址,将目标MAC地址修改RIP的MAC地址,然后将数据包发至POSTROUTING链。 此时的源IP和目的IP均未修改,仅修改了源MAC地址为DIP的MAC地址,目标MAC地址为RIP的MAC地址
(d) 由于DS和RS在同一个网络中,所以是通过二层来传输。POSTROUTING链检查目标MAC地址为RIP的MAC地址,那么此时数据包将会发至Real Server。
(e) RS发现请求报文的MAC地址是自己的MAC地址,就接收此报文。处理完成之后,将响应报文通过lo接口传送给eth0网卡然后向外发出。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

LVS-DR模型的特性

  • 保证前端路由将目标地址为VIP报文统统发给Director Server,而不是RS

  • RS可以使用私有地址;也可以是公网地址,如果使用公网地址,此时可以通过互联网对RIP进行直接访问

  • RS跟Director Server必须在同一个物理网络中

  • 所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

  • 不支持地址转换,也不支持端口映射

  • RS可以是大多数常见的操作系统

  • RS的网关绝不允许指向DIP(因为我们不允许他经过director)

  • RS上的lo接口配置VIP的IP地址

  • 缺陷:RS和DS必须在同一机房中

Tun原理和特点


(a) 当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。 此时报文的源IP为CIP,目标IP为VIP 。
(b) PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
(c) IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为为DIP,目标IP为RIP。然后发至POSTROUTING链。 此时源IP为DIP,目标IP为RIP
(d) POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。 此时源IP为DIP,目标IP为RIP
(e) RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口送给eth0网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP
(f) 响应报文最终送达至客户端

LVS-Tun模型特性

RIP、VIP、DIP全是公网地址

RS的网关不会也不可能指向DIP

所有的请求报文经由Director Server,但响应报文必须不能进过Director Server

不支持端口映射

RS的系统必须支持隧道

LVS调度算法

静态调度算法(4种)
1、轮询调度rr
均等的对待每一台服务器,不管服务器上的实际连接数和系统负载
2、加权论调wrr
调度器可以自动问询真实服务器的负载情况,并动态调整权值

3、源地址散列调度算法 sh
与目标地址散列调度算法类似,但它是根据源地址散列算法进行静态分配固定的服务器资源。

4、目标地址散列调度算法 dh
该算法是根据目标 IP 地址通过散列函数将目标 IP 与服务器建立映射关系,出现服务器不可用或负载过高的情况下,发往该目标 IP 的请求会固定发给该服务器。

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

实践LVS搭建HTTP负载均衡集群

实践LVS的NAT模式

环境需求:

主机名 主机作用 IP/DIP VIP
DR LVS服务器(DR) 192.168.26.138 172.25.0.100
RS1 apache服务器1(RS) 192.168.26.132 网关为DR网关
RS2 apache服务器2(RS) 192.168.26.134 网关为DR网关
client 客户端 (用于测试) 192.168.26.151 客户端不需要VIP

RS1配置

//关闭防火墙和selinux
[root@RS1 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS1 ~]# setenforce 0
[root@RS1 ~]# systemctl disable --now firewalld.service 

//安装httpd,然后配置好网站首页
[root@RS1 ~]# dnf -y install httpd
[root@RS1 ~]# echo "RS1" > /var/www/html/index.html
[root@RS1 ~]# systemctl enable --now httpd

//配置ip
[root@RS1 ~]# nmcli connection modify ens160 ipv4.addresses 192.168.26.132/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@RS1 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

RS2配置

//关闭防火墙和selinux
[root@RS2 ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@RS2 ~]# setenforce 0
[root@RS2 ~]# systemctl disable --now firewalld.service

//安装httpd服务,然后配置好网站首页
[root@RS2 ~]# dnf -y install httpd
[root@RS2 ~]# echo "RS2" > /var/www/html/index.html
[root@RS2 ~]# systemctl enable --now httpd

//配置ip
[root@RS2 ~]# nmcli connection modify ens160 ipv4.addresses 192.168.26.134/24 ipv4.gateway 172.25.0.100 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@RS2 ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/2)

DR配置

//关闭selinux和防火墙
[root@DR ~]# sed -ri 's/^(SELINUX=).*/\1disabled/g' /etc/selinux/config
[root@DR ~]# setenforce 0
[root@DR ~]# systemctl disable --now firewalld.service 

//安装ipvsadm
[root@DR ~]# dnf -y install ipvsadm

//再给DR,添加一块网卡,添加的是仅主机模式网卡,以便区分,网段为:172.25.0.0
//设置网卡ip,172.25.0.100
[root@DR network-scripts]# nmcli connection show
NAME                UUID                                  TYPE      DEVICE 
ens160              a108144d-2eed-4661-a806-5a282158d0bb  ethernet  ens160 
Wired connection 1  1b42c6cf-8b2e-3909-8f47-c9ec9e320d20  ethernet  ens192 
[root@DR network-scripts]#  nmcli connection modify Wired\ connection\ 1 con-name ens192 ipv4.addresses 172.25.0.100/24 ipv4.dns 114.114.114.114 ipv4.method manual autoconnect yes
[root@DR network-scripts]# nmcli connection up ens192
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@DR network-scripts]# ip a |grep ens192
3: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    inet 172.25.0.100/24 brd 172.25.0.255 scope global noprefixroute ens192


//开启转发功能
[root@DR ~]# vi /etc/sysctl.conf 
[root@DR ~]# sysctl -p
net.ipv4.ip_forward = 1

//添加规则
[root@DR ~]# ipvsadm -A -t 172.25.0.100:80 -s rr
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.26.132:80 -m
[root@DR ~]# ipvsadm -a -t 172.25.0.100:80 -r 192.168.26.134:80 -m
[root@DR ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.0.100:80 rr
  -> 192.168.26.132:80            Masq    1      0          0         
  -> 192.168.26.134:80            Masq    1      0          0   

[root@DR ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@DR ~]# systemctl restart ipvsadm.service 
[root@DR ~]# systemctl enable ipvsadm.service 

标签:负载,DR,lvs,IP,报文,Server,均衡,root,数据包
From: https://www.cnblogs.com/z696/p/16741141.html

相关文章

  • 什么是负载均衡?
          负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。具体实现方法是将过载节点上的任务转移到其他轻载......
  • LVS负载均衡
    [LVS负载均衡]LVS负载均衡目录Lvs负载均衡[lvs简介][lvs作用][lvs体系结构]lvs的三种工作模式[基于NAT的LVS模式负载均衡][基于TUN模式的负载均衡][基于DR模......
  • Lvs负载均衡
    Lvs负载均衡目录Lvs负载均衡lvs简介lvs作用lvs体系结构lvs的三种工作模式基于NAT的LVS模式负载均衡基于TUN模式的负载均衡基于DR模式的LVS负载均衡LVS管理工具LVS的10种调......
  • LVS负载均衡
    LVS负载均衡目录LVS负载均衡一、LVS是什么二、LVS的作用三、lvs的三种工作模式1.基于NAT的LVS模式负载均衡2.基于TUN模式的LVS负载均衡3.LVS(DR)负载模式四、LVS管理工具......
  • dubbo负载均衡
    随机负载均衡publicclassRandomLoadBalanceextendsAbstractLoadBalance{privatefinalRandomrandom=newRandom();protected<T>Invoker<T>doSele......
  • HCIA学习笔记三十一:静态路由的负载均衡
    一、负载分担示例• 在路由器B上配置到达路由器A的10.1.1.1网段的三条负载路由。二、负载分担实验2.1、拓扑图•分别在路由器中拖出2台AR2220、终端中拖出2台PC机,......
  • .NET下数据库的负载均衡(有趣实验)
    相关下载:数据库的负载均衡-示例代码(dp1-DbBalance.rar)数据库的负载均衡-示例代码(dp1-DbBalance.rar)支持.Net/.NetCore/.NetFramework为了演示数据库的负载均衡(Lo......
  • springcloud--负载均衡(ribbon)
    springcloud--负载均衡(ribbon)一、项目背景搭建好的springcloud项目,包含erueka模块(这里是单个,也可以多个)、服务提供者(多个)、消费者。创建多个服务提供者模块,用于集群(单......
  • Feign负载均衡
    feign是声明式的webservice客户端,它让微服务之间的调用变得更简单了,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可在使用Feign时提供负载均衡的http......
  • Ribbon负载均衡
    Ribbon Ribbon是什么?SpringCloudRibbon是基于NetflixRibbon实现的一套客户端负载均衡的工具。简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件......