您好,欢迎来到叨叨游戏网。
搜索
您的当前位置:首页LVS介绍及应用

LVS介绍及应用

来源:叨叨游戏网

1.架构问题

单体/集中式架构

单体架构应该是我们最先接触到的架构实现了,在单体架构中使用经典的三层模型,即表现层,业务逻辑层和数据访问层。单体架构只适合在应用初期应用功能较少,且访问量不大的情况下使用。

优点:是性价比很高,开发速度快,成本低
缺点:代码耦合度高,不易拓展

集群架构

集群架构是指将多个服务器组成一个集群,共同分担工作任务,以提高系统的可靠性和性能。这种架构通常用于处理高并发请求、提供高可用服务、实现负载均衡等场景。

针对单个服务器在访问量越来越大的情况越来越吃力的情况,我们可以考虑服务器的集群话处理。

集群的部署大大提高了服务的处理能力,同时利用Nginx提供的负载均衡机制,来分发请求,使用户的体验没有改变。

垂直化架构

上面的集群部署是可以解决一部分的服务器压力,但是随着用户访问量的增多,集群节点增加到一定阶段的时候,其实作用就已经不是太大了,因为将所有的业务都集中在一起,造成耦合度很高,这时我们可以考虑业务的拆分。来提高系统的性能。比如将原来在一个系统里面的业务拆分为用户系统,订单系统和商品系统。

服务垂直化拆分后是可以大大的提高整体的服务处理能力,但是也会出现很多的冗余的代码,比如用户系统要操作订单库,要操作商品 库,订单系统也有可能要操作用户库和商品库等。

分布式架构

分布式架构是将垂直架构中的每一个模块进行核心业务的抽取,抽取之后每个模块成了两部分,一部分是基础服务,一部分是业务功能,通过业务功能取调用基础服务。

优点:解决了垂直式架构各个系统间代码不能相互调用的问题,提高了代码复用和开发效率。
缺点:系统间调用关系错综复杂,难以维护。

微服务架构

微服务架构可以看做是面向服务架构和分布式服务架构的拓展,使用更细粒度的服务和一组设计准则来考虑大规模的复杂系统架构设计。

微服务架构强调的一个重点是 “业务需要彻底的组件化和服务化” ,原有的单个业务系统拆分为多个可以开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成。每个服务基于单一业务能力构建,运行在自己的进程中,并使用轻量级机制通信,通常是Http API,并能够通过自动化部署机制来部署。 这些服务可以使用不同的编程语言实现,以及不同的数据库存储技术,并保持最低限度的集中式管理。

spring cloud 实现微服务架构

2.集群

分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。

2.1 集群分类

  • 高可用集群 (High Availability Cluster)

    常见的就是2个节点做成的HA集群,有很多通俗的不科学的名称,比如”双机热备”, “双机互备”, “双机”。

    高可用集群解决的是保障用户的应用程序持续对外提供服务的能力。 (请注意高可用集群既不是用来保护业务数据的,保护的是用户的业务程序对外不间断提供服务,把因软件/硬件/人为造成的故障对业务的影响降低到最小程度)。

  • 负载均衡集群 (Load Balance Cluster)

    负载均衡系统:集群中所有的节点都处于活动状态,它们分摊系统的工作负载。一般Web服务器集群、数据库集群和应用服务器集群都属于这种类型。

    负载均衡集群一般用于相应网络请求的网页服务器,数据库服务器。这种集群可以在接到请求时,检查接受请求较少,不繁忙的服务器,并把请求转到这些服务器上。从检查其他服务器状态这一点上看,负载均衡和容错集群很接近,不同之处是数量上更多。

  • 科学计算集群 (High Performance Computing Cluster)

    高性能计算(High Perfermance Computing)集群,简称HPC集群。这类集群致力于提供单个计算机所不能提供的强大的计算能力。

2.2 负载均衡集群

  • 硬件

    ​ F5 BIG-IP、Citrix Netscaler、A10

  • 软件

    Ivs:Linux Virtual Server,阿里四层SLB (Server Load Balance)使用

    nginx:支持七层调度,阿里七层SLB使用Tengine

    haproxy:支持七层调度

    ats:Apache Traffic Server,yahoo捐助给apache

    ……

3.LVS

3.1 介绍

LVS(Linux Virtual Server)即Linux虚拟服务器,是由章文嵩主导的开源负载均衡项目,目前LVS已经被集成到Linux内核模块中。

该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案,终端互联网用户从外部访问公司的外部负载均衡服务器,web请求会发送给LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台web服务器。

比如,轮询算法可以将外部的请求平均分发给后端的所有服务器,终端用户访问LVS调度器虽然会被转发到后端真实的服务器,但如果真实服务器连接的是相同的存储,提供的服务也是相同的服务,最终用户不管是访问哪台真实服务器,得到的服务内容都是一样的,整个集群对用户而言都是透明的。最后根据LVS工作模式的不同,真实服务器会选择不同的方式将用户需要的数据发送到终端用户。

相关术语

LVS LB 示意图

3.2 工作模式

LVS工作模式分为:NAT模式、TUN模式、DR模式、FULL NAT模式

1) NAT模式
  • RIP和DIP应在同一个IP网络,目应使用私网地址:RS的网关要指向DIP
  • 请求报文和响应报文都必须经由Director转发,Director容易成为系统瓶颈
  • 支持端口映射,可修改请求报文的目标PORT
  • VS必须是Linux系统,RS可以是任意OS系统

工作原理

调度流程

注:lvs 工作在 prerouting 和 input 之间

2) DR模式

工作原理

调度流程

特点

3) TUN模式

工作原理

调度流程

特点

4) FULL NAT模式

了解即可

工作模式对比

3.3 调度算法

LVS工作模式在CentOS7中有10种,在CentOS8中有12种。

1.轮询调度

轮询调度(Round Robin 简称’RR’)算法就是按依次循环的方式将请求调度到不同的服务器上,该算法最大的特点就是实现简单。轮询算法假设所有的服务器处理请求的能力都一样的,调度器会将所有的请求平均分配给每个真实服务器。

2.加权轮询调度

加权轮询(Weight Round Robin 简称’WRR’)算法主要是对轮询算法的一种优化与补充,LVS会考虑每台服务器的性能,并给每台服务器添加一个权值,如果服务器A的权值为1,服务器B的权值为2,则调度器调度到服务器B的请求会是服务器A的两倍。权值越高的服务器,处理的请求越多。

3.最小连接调度

最小连接调度(Least Connections 简称’LC’)算法是把新的连接请求分配到当前连接数最小的服务器。最小连接调度是一种动态的调度算法,它通过服务器当前活跃的连接数来估计服务器的情况。调度器需要记录各个服务器已建立连接的数目,当一个请求被调度到某台服务器,其连接数加1;当连接中断或者超时,其连接数减1。

(集群系统的真实服务器具有相近的系统性能,采用最小连接调度算法可以比较好地均衡负载。)

4.加权最小连接调度

加权最少连接(Weight Least Connections 简称’WLC’)算法是最小连接调度的超集,各个服务器相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权值。加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

5.基于局部的最少连接

6.带复制的基于局部性的最少连接

9.最短的期望的延迟

最短的期望的延迟调度(Shortest Expected Delay 简称’SED’)算法基于WLC算法。举个例子吧,ABC三台服务器的权重分别为1、2、3 。那么如果使用WLC算法的话一个新请求进入时它可能会分给ABC中的任意一个。使用SED算法后会进行一个运算

A:(1+1)/1=2 B:(1+2)/2=3/2 C:(1+3)/3=4/3 就把请求交给得出运算结果最小的服务器。

10.最少队列调度

最少队列调度(Never Queue 简称’NQ’)算法,无需队列。如果有realserver的连接数等于0就直接分配过去,不需要在进行SED运算。

4.ipvsadm

4.1 安装

程序包:ipvsadm

  • Unit File: ipvsadm.service
  • 主程序:/usr/sbin/ipvsadm
  • 规则保存工具:/usr/sbin/ipvsadm-save
  • 规则重载工具:/usr/sbin/ipvsadm-restore
  • 配置文件:/etc/sysconfig/ipvsadm-config
  • ipvs调度规则文件:/etc/sysconfig/ipvsadm
4.2 命令

按照具体功能分类:

  • 管理集群服务:增、删、改操作
  • 管理集群中的RS:增、删、改操作
  • 查看信息

保存、重载配置

相关文件

5.实验1 NAT模式

5.1 说明和准备

说明

  • LVS服务器采用双网卡:一个网卡连接,另一个网卡与后端Web服务器相连
  • Web 服务器网关指向LVS服务器的内网网卡
  • Web 服务器不需要连接

准备工作

  • RS1、RS2:设置 ip、gateway,安装配置 httpd
  • LVS:两个网卡,分属不同网段,分别设置内 ip,能curl 到RS1和RS2,开启路由转发(net.ipv4.ip_forward)
  • client:设置 ip
操作步骤

​ 准备四台虚拟机

  • test3 test4 是RS真实服务器
  • test3 ip 192.168.9.5(RIP) 网关:192.168.9.4
  • test4 ip 192.168.9.6(RIP) 网关:192.168.9.4
  • 都安装apache 配置网页
安装apache
yum -y install httpd
查看防火墙状态  如果是开启状态  进行关闭
systemctl status firewalld.service
暂时关闭防火墙
systemctl stop firewalld.service
开启httpd服务
systemctl start  httpd.service
配置网页
cd /var/www/html
创建新的文件 index.html 
访问ip地址 

重新配置网关  将原来的网关换成192.168.9.4
重启网络服务
systemctl restart network
查看网关
route -n

test2 做LVS服务器 需要2个网卡

  • ens33 属于VMnet8 内网ip:192.168.9.4 (DIP)
  • ens36 属于VMnet10 内网:172.20.200.200 (VIP)
  • 开启路由转发功能 安装ipvsadm,配置负载均衡
  • 添加一个网卡 选择自定义网络 VMnet10(仅主机模式)
  • 再虚拟网络编辑器中选择VMnet10 对子网ip进行修改 172.20.200.0
  • 对ens36网卡修改ip
cd /etc/sysconfig/network-scripts
复制ens33 
cp ifcfg-ens33 ifcfg-ens36
将以下进行修改
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=172.20.200.200
NETMASK=255.255.255.0
重启网络服务
ifdown ens36 ; ifup ens36
配置LVS
vim /etc/sysctl.conf
启用路由转发
sysctl -p
现在就可以通过test2 访问test3和4
安装ipvsadm
yum -y install ipvsadm
添加集群服务
ipvsadm -A -t 172.20.200.200:80 -s rr
在集群服务中添加 RS(Real Server)
ipvsadm -a -t 172.20.200.200:80 -r 192.168.9.5 -m
ipvsadm -a -t 172.20.200.200:80 -r 192.168.9.6 -m
现在用test1就可以访问test2了

开启防火墙 
在没有配置80端口的时会出现没有到主机的路由
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
配置完成后进行连接会出现超时等待
firewall-cmd --zone=trusted  --add-interface=ens33 --permanent 
firewall-cmd --reload
修改算法、修改权重
ipvsadm -E -t 172.20.200.200:80 -s wrr
ipvsadm -e -t 172.20.200.200:80 -r 192.168.9.5:80 -w 3 -m
现在9.5的地址占比大了

test1做客户端

  • ens33 属于VMnet10 ip 172.20.200.6(CIP)
  • 将网卡修改 选择自定义网络 VMnet10(仅主机模式)
  • 在虚拟机中进行修改 不在Xshell5修改
IPADDR=172.20.200.6
NETMASK=255.255.255.0
重启网络服务
systemctl restart network
使用ssh连接 172.20.200.6
尝试连接test2
curl 172.20.200.200
curl: (7) Failed connect to 172.20.200.200:80; 拒绝连接
5.2 配置LVS

LVS 配置

启用路由转发

添加集群服务

# -A:增加集群
# -t:VS的ip和端口(连接的那个网卡)
# -s:轮询模式
ipvsadm -A -t 172.20.200.200:80 -s rr

# 查看集群
ipvsadm -Ln

# 也可以添加多个集群,比如调度mysql的
# ipvsadm -A -t 172.20.200.200:3306 -s rr

在集群服务中添加 RS(Real Server)

# -a:添加 real server
# -t:指定集群(根据ip和端口指定)
# -m:nat模式(默认不写是dr模式)
# RS的端口也可以不一定是80,比如8080,因为NAT模式支持端口映射
ipvsadm -a -t 172.20.200.200:80 -r 10.0.0.7:80 -m
ipvsadm -a -t 172.20.200.200:80 -r 10.0.0.17:80 -m 

查看

配置完毕,访问测试,在client上测试

5.3 防火墙问题

参考:https://cloud.tencent.com/developer/article/1328686

ipvsadm -lcn 查看 lvs状态,发现有超时等待的情况

把内网网卡加入到 firewall 的 trusted 区域

查看 firewall 的区域信息

5.4 修改配置

修改算法、修改权重

5.5 保存、加载规则

查看ipvs的规则

保存规则(如果启动了 ipvsadm.service 服务,会加载其已保存过的规则文件,在 ipvsadm.service 里查看规则文件位置)

清除规则、查看规则、手动加载规则(如果ipvsadm服务启动,则会自动加载规则)

清除规则、启动ipvsamd服务

6.实验2 DR模式

6.1 说明和准备

如下图,准备5台虚拟机测试

  • RS1、RS2
    • 设置物理网卡的 ip
    • 设置网关,指向路由器的内网网卡
    • 安装配置 httpd
    • 防火墙开放 http服务
  • LVS:
    • 设置物理网卡的 ip
    • 设置网关,指向路由器的内网网卡(三次握手的时候,需要通过网关)
    • 安装 ipvsadm
    • 防火墙开放 http服务
  • Router
    • 两个网卡,分属不同网段
    • 开启路由转发(net.ipv4.ip_forward)
    • 注意防火墙问题(见实验1的防火墙问题)
  • client
    • 设置 ip
    • 设置网关,指向路由器的网卡

注:此时client可以ping通LVS服务器,也可以访问RS

操作步骤

test1 做客户端

  • 属于VMnet10
  • ip:172.20.200.6(CIP)
  • 网关:172.20.200.200
修改网关 
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=172.20.200.6
NETMASK=255.255.0.0
GATEWAY=172.20.200.200
重启网络服务
systemctl restart network
test3配置完成后
curl 192.168.9.100
或  循环连接
while :;do curl 192.168.9.100;sleep 0.5;done

test2做服务器

  • 需要2个网卡
  • ens33 属于VMnet8 内网ip 192.168.9.4
  • ens36 属于VMnet10 ip 172.20.200.200/16
IPADDR=172.20.200.200
NETMASK=255.255.0.0
开启路由转发功能
vim /etc/sysctl.conf 
net.ipv4.ip_forward = 1
sysctl  -p

开启防火墙后发现test1无法正常连接
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload

firewall-cmd --zone=public --remove-interface=ens33
firewall-cmd --zone=trusted --add-interface=ens33
现在在连接 可以正常连接了 开启test3的防火墙无法正常连接
  • test3做LVS服务器
  • 属于VMnet8
  • ip192.168.9.5(VIP)
  • 网关192,168,9,4
对网关修改   vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.9.5
NETMASK=255.255.255.0
GATEWAY=192.168.9.4
重启服务
systemctl restart  network
查看网关
route -n
安装ipvsadm
yum -y install ipvsadm
关闭selinux
vim /etc/selinux/config
修改配置项:SELINUX=disabled,默认:#SELINUX=enforcing
setenforce 0 或重启服务器 reboot

在test4和5完成脚本后执行的命令
ifconfig lo:1 192.168.9.100/32

将网关重新设置成192.168.9.2
IPADDR=192.168.9.5
NETMASK=255.255.255.0
GATEWAY=192.168.9.2
DNS1=114.114.114.114
重启服务
systemctl restart network
添加集群服务
ipvsadm -A -t 192.168.9.100:80 -s rr
在集群服务中添加 RS(Real Server)
ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.6 -g
ipvsadm -a -t 192.168.9.100:80 -r 192.168.9.7 -g
配置完成后在test1 进行连接

开启防火墙后test1无法连接
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload 
  • test4 test5 是RS真实服务器
  • test4 属于VMnet8 ip 192.168.9.6(RIP) 网关:192.168.9.4
  • test5 属于VMnet8 ip 192.168.9.7(RIP) 网关:192.168.9.4
  • 都安装apache 配置网页
  • 配置完成后开启http服务 检查防火墙状态
在test4和5中编写脚本 
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
运行脚本./脚本名
在运行以下命令
ifconfig lo:1 192.168.9.100/32

开启防火墙放开http服务
systemctl restart firewalld.service
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload 
现在可以用test1来连接  但要开启test2的防火墙就无法连接
6.2 配置过程

# rs1、rs2
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

# rs1、rs2、lvs
ifconfig lo:1 192.168.9.100/32

RS

LVS

注:DR模式不支持端口映射,8080无效

client

6.3 一些问题
  • 问题1

    lo 的默认ip为127.0.0.1/8,ping 127.1.2.3 也可以通,是因为前8位相同,则和自己通信了,不和外部通信了

    给 lo 新设置的VIP的子网掩码要配成32,就是为了和外部通信

  • 问题2

    如果不修改内核参数,arp请求的通告和应答级别

6.4 DR模式总结

32




[外链图片转存中...(img-chtK0f9E-1734570871529)]



RS

[外链图片转存中...(img-o2a1S5ku-1734570871529)]

[外链图片转存中...(img-4GiL3zq3-1734570871529)]



LVS

[外链图片转存中...(img-WoooGImu-1734570871529)]

[外链图片转存中...(img-MVzBSLSp-1734570871529)]

[外链图片转存中...(img-74N7mFjc-1734570871529)]

**注:DR模式不支持端口映射,8080无效**



client

[外链图片转存中...(img-urqvogWt-1734570871529)]



#### 6.3 一些问题

- 问题1

  lo 的默认ip为127.0.0.1/8,ping 127.1.2.3 也可以通,是因为前8位相同,则和自己通信了,不和外部通信了

  给 lo 新设置的VIP的子网掩码要配成32,就是为了和外部通信

- 问题2

  如果不修改内核参数,arp请求的通告和应答级别

  RS以及LVS上lo 的ip地址会发生冲突,用arping 命令可以测试

[外链图片转存中...(img-eQCRD3rk-1734570871529)]



#### 6.4 DR模式总结

[外链图片转存中...(img-Ivbzooql-1734570871529)]



[外链图片转存中...(img-fMyvE9fm-1734570871530)]

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.net 版权所有 湘ICP备2024080961号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务