关于lvs的负载均衡(案例)

集群(cluster)技术是一种比较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能,可靠性,灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术

集群(cluster)组成后,可以利用多个计算机和组合进行海量请求(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器换了整个系统还可以正常运行

负载均衡技术:

四层负载技术

七层负载技术

负载均衡实现方式:

硬件负载均衡:F5,深信服,Radware

软件负载均衡:LVS,Nginx,HAproxy

云负载均衡

负载均衡的分类:

四层负载均衡技术:

F5:硬件负载均衡器,功能很好,但是成本很高

lvs:重量级的四层负载软件

nginx:轻量级的四层负载软件

haproxy:模拟四层转发,较灵活

七层负载均衡技术:

haproxy:天生的负载均衡技能,全面支持七层代理,会话保持,标记,路径转移

nginx:只在http协议和mail协议上功能较好

总结一下:

从上面对比看,四层负载与七层负载最大的区别就是效率与功能的区别,四层负载架构设计比较简单,无需解析具体的消息内容,在网络吞吐量及处理能力上会比较高,而七层负载均衡的优势则体现现在功能多,控制灵活强大,在具体的业务架构设计时,使用七层负载或者四层负载还得根据具体的情况综合考虑

LVS简介

1.LVS 是Linux Virtual Server的简称,也就是 Linux 虚拟服务器, 是一个由章文嵩博士发起的自由软件项目,它的官方站点是www.linuxvirtualserver.org。现在LVS已经是 Linux标准内核的一部分,因此性能较高。

2. LVS软件作用:通过LVS提供的负载均衡技术和Linux操作系统实现一个高性能、高可用的服务器群集,它具有良好可靠性、可扩展性和可操作性。从而以低廉的成本实现最优的服务性能。

2.LVS 优势与不足

优势:

​ 高并发连接:LVS基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接

​ 稳定性强:是工作在网络4层之上仅作分发之用,决定了它在负载均衡软件里的性能最强,稳定性最好,对内存和cpu资源消耗极低

​ 成本低廉:硬件负载均衡器少则十几万,多则几十万上百万,LVS只需一台服务器和就能免费部署使用,性价比极高

​ 配置简单:LVS配置非常简单,仅需几行命令即可完成配置,也可写成脚本进行管理

​ 支持多种算法:支持多种论调算法,可根据业务场景灵活调配进行使用

​ 支持多种工作模型:可根据业务场景,使用不同的工作模式来解决生产环境请求处理问题

不足:

​ 工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用

3.LVS核心组件

​ LVS的管理工具和内核模块 ipvsadm/ipvs

​ ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS等

​ ipvs:工作于内核上的程序,可根据用户定义的集群实现请求转发

3.四者区别

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

  lvs-nat:RIP的网关要指向DIP

   lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

   lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

   lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

3.四者区别

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

  lvs-nat:RIP的网关要指向DIP

   lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

   lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

   lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

直接路由(Direct routing)模式:

​ 原理:负载均衡器和RS都使用同一个IP对外服务。但只有DR对ARP请求进行响应,所有RS对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS。这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。

​ 优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

​ 缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

FULL-NAT模式:

​ 原理:客户端对VIP发起请求,Director接过请求发现是请求后端服务。Direcrot对请求报文做full-nat,把源ip改为Dip,把目标ip转换为任意后端RS的rip,然后发往后端,rs接到请求后,进行响应,相应源ip为Rip目标ip还是DIP,由内部路由路由到Director,Director接到响应报文,进行full-nat。将源地址为VIP,目标地址改为CIP;请求使用DNAT,响应使用SNAT

3.四者区别

lvs-nat与lvs-fullnat:请求和响应报文都经由Director

  lvs-nat:RIP的网关要指向DIP

   lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信

lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client

   lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发

   lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信

四:LVS集群部署

1.环境准备
192.168.182.100/24 (DR)     VIP:192.168.182.10/32
192.168.182.110/24 (RS-1)   VIP:192.168.182.10/32
192.168.182.120/24 (RS-2)   VIP:192.168.182.10/32
2.LVS安装(在lvs-server的服务器安装)
[root@lvs-server ~]# yum -y install ipvsadm

注意:

规则保存工具:/usr/sbin/ipvsadm --save > /path/to/file
配置文件:/etc/sysconfig/ipvsadm-config

3.配置LVS(注意子网掩码的lvs的是“32”)
[root@lvs-server ~]# ip addr add dev ens33 192.168.182.10/32 #设置VIP
[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm
[root@lvs-server ~]# systemctl start ipvsadm  #启动
注意:启动如果报错: /bin/bash: /etc/sysconfig/ipvsadm: 没有那个文件或目录
需要手动生成文件
[root@lvs-server ~]# ipvsadm --save > /etc/sysconfig/ipvsadm

4.定义策略(还是在lvs-serve服务器上操作)
[root@lvs-server ~]# ipvsadm -C  #清除内核虚拟服务器表中的所有记录。
[root@lvs-server ~]# ipvsadm -A -t 192.168.182.10:80 -s rr 
[root@lvs-server ~]# ipvsadm -a -t 192.168.182.10:80 -r 192.168.182.110 -g 
[root@lvs-server ~]# ipvsadm -a -t 192.168.182.10:80 -r 192.168.182.120 -g  
[root@lvs-server ~]# ipvsadm -S > /etc/sysconfig/ipvsadm  #保存,保存到一个文件中
5.查看规则
[root@lvs-server ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.182.10:80 rr
  -> 192.168.182.110:80           Route   1      0          0         
  -> 192.168.182.120:80           Route   1      0          0         
[root@lvs-server ~]# ipvsadm -L -n       
[root@lvs-server ~]# ipvsadm -L -n --stats    #显示统计信息
1. Conns    (connections scheduled)  已经转发过的连接数
2. InPkts   (incoming packets)       入包个数
3. OutPkts  (outgoing packets)       出包个数
4. InBytes  (incoming bytes)         入流量(字节)  
5. OutBytes (outgoing bytes)         出流量(字节)
[root@lvs-server ~]# ipvsadm -L -n --rate	#看速率
1. CPS      (current connection rate)   每秒连接数
2. InPPS    (current in packet rate)    每秒的入包个数
3. OutPPS   (current out packet rate)   每秒的出包个数
4. InBPS    (current in byte rate)      每秒入流量(字节)
5. OutBPS   (current out byte rate)      每秒出流量(字节)

6.配置RS(ALL)(在web服务器上操作)(两台web服务器都要进行同样的操作)

配置好网站服务器,测试所有RS(下载启动nginx,写入内容输入IP产看一下是否成功)

[root@real-server1 ~]# yum install -y nginx
[root@real-server1 ~]# echo "real-server1" >> /usr/share/nginx/html/index.html

在lo接口上绑定VIP(还是在web服务器上操作此步骤)(注意查看一下本服务器上网卡接口是否有此ip出现避免出现错误影响后面不走操作)

[root@real-server1 ~]# ip addr add dev lo 192.168.182.10/32

忽略arp广播,开启路由转发

[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore 
[root@real-server1 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
或者
[root@real-server1 ~]#cat /etc/sysctl.conf
net.ipv4.ip_forward =1 
net.ipv4.conf.all.arp_ignore=1

匹配精确ip地址回包

[root@real-server1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

启动Nginx

[root@real-server1 ~]# systemctl start nginx 
[root@real-server1 ~]# systemctl enable  nginx

注意:

因为:realServer的vip有了,接着就是同一个网段中拥有两个vip, 客户端在网关发送arp广播需找vip时需要让realServer不接受响应.  
解决:
echo 1 >/proc/sys/net/ipv4/conf/eth0/arp_ignore 
意味着当别人的arp请求过来的时候,如果接收的设备没有这个ip,就不做出响应(这个ip在lo上,lo不是接收设备的进口)
echo 2 >/proc/sys/net/ipv4/conf/eth0/arp_announce   
使用最好的ip来回应,什么是最好的ip?同一个网段内子网掩码最长的
7.测试访问vip(启动一台客户机用curl命令查看是否显示web服务器内容,若显示即可完成 ,若有问题可以查看以上步骤排错)
[root@client ~]# elinks -dump http://192.168.182.10

五:ipvsadm

1、LVS-server安装lvs管理软件
yum -y install ipvsadm
程序包:ipvsadm(LVS管理工具)
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm --save  > /etc/sysconfig/ipvsadm
配置文件:/etc/sysconfig/ipvsadm-config

2、命令选项
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc  默认调度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr

-a --add-server  #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量呗转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1

-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则到标准输出,输出为-R 选项可读的格式
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表

--numeric, -n:#以数字形式输出地址和端口号

--stats: #统计信息
--rate : #输出速率信息

-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)

六:LVS算法

1.静态算法

只根据算法进行调度 而不考虑后端服务器的实际连接情况和负载情况

RR:轮叫调度(Round Robin)

​ 调度器通过”轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。

ipvsadm -A -t 192.168.122.10:80 -s  rr
ipvsadm -a -t 192.168.122.10 -r 192.168.122.100 -g

WRR:加权轮叫(Weight RR)

​ 调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

ipvsadm -A -t 192.168.122.10:80 -s wrr
ipvsadm -a -t 192.168.122.10 -r 192.168.122.100 -g -w 2
2.动态算法

前端的调度器会根据后端真实服务器的实际连接情况来分配请求

LC:最少链接(Least Connections)

​ 调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用”最小连接”调度算法可以较好地均衡负载。

ipvsadm -A -t 192.168.122.10:80 -s lc

WLC:加权最少连接(默认采用的就是这种)(Weighted Least Connections)

​ 在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少链接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。

ipvsadm -A -t 192.168.122.10:80 -s wlc

NQ:永不排队/最少队列调度(Never Queue Scheduling NQ)

​ 无需队列。如果有台 realserver的连接数=0就直接分配过去,不需要再进行sed运算,保证不会有一个主机很空闲。

ipvsadm -A -t 192.168.122.10:80 -s  nq

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值