1.简介:
LVS是一个基于Linux操作系统的虚拟服务器技术,用于实现负载均衡和高可用性。LVS通过将客户端的请求分发到多台后端服务器上,从而提高整体服务的处理能力和可靠性。
LVS是四层负载均衡,建立在OSI模型的第四层——传输层之上,支持TCP/UDP的负载均衡
LVS的优势
高性能:LVS工作在内核层,性能高效,能够处理大量并发请求。高可用性:通过配置Keepalived等工具,LVS可以实现高可用性,确保服务的持续运行。
灵活性强:支持多种负载均衡算法和工作模式,适应不同的应用场景
2.集群:
负载均衡集群-LBC
使用环境:减轻单台服务器的压力,将用户请求分担给多台主机一起处理
实现方法:硬件:典型代表F5 软件:LVS Nginx HaProxy RAC 等
使用范围:业务并发较大的应用程序
高可用集群-HAC
使用环境:最大限度的保证用户的应用持久,不间断的提供服务
实现原理:心跳检测 实现方法:硬件:F5 软件:heartbeat Linux-HA keepalived 等
使用范围:需要持续提供服务的应用程序
高性能运算集群-HPC
使用:提供单台计算机所不具备的计算能力
负载均衡集群和高性能运算集群的原理对比: 负载均衡集群通过提高单位时间内的执行的任务数来提升效率 高性能运算集群通过缩短单个任务的执行时间来提高效率
3.LVS集群类型:
lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
lvs-dr:操纵封装新的MAC地址 (常用,因涉及ARP广播协议内网不可有路由)
lvs-tun:在原请求IP报文之外新加一个IP首部 (大型企业使用)
lvs-fullnat:修改请求报文的源和目标IP (需第三方支持,阿里)
nat模式
客户端与Internet,Internet与vs之间为80端口
vs与RS之间为9000端口
dr模式(企业中最常用的)
客户端与路由器为vlan1,路由器与RS之间为vlan2
使用VIP通信,RS同样使用VIP通信,但是RS收到LVS给的VIP会占用RS的VIP,所有RS需要自己的另外一个IP去响应客户端(RS需要两个IP):本实验对回环设置为VIP
客户端:
(客户端IP)
路由器:
(内网IP)
LVS:
(DIP)
ip a a 192.168.0.200/32 dev lo(配置回环为VIP)
ipvsadm -A -t 192.168.0.200:80 -s wrr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
RS:
RS1:
RS2:
ip a a 192.168.0.200/32 dev lo(配置回环为VIP)
先对all修改,才能对lo(指定网卡)生效
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore(选择1:仅在请求的目标IP配置在本地主机的接收到请求报文的接口上是,才给予响应):对内响应,对外不响应
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce(选择2:必须避免将接口信息向非本网络进行通告):主机内网络响应
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
测试:
for i in {1..10}
do
curl 192.168.0.200
done
*配置完网络后不要忘记:
mncli connection reload
nmcli connection 网卡
TUN模式,fullnet模式(了解)
*分布式与集群的区别:
分布式:不同服务器负责不同任务,工作。
集群:不同服务器负责任务与工作相同。
4.LVS调度算法:
lvs静态调度算法
RR:roundrobin |
轮询
RS
分别被调度,当
RS
配置有差别时不推荐
|
WRR:Weighted RR |
加权轮询根据
RS
的配置进行加权调度,性能差的
RS
被调度的次数少
|
SH:
Source Hashing
|
实现
session sticky
,源
IP
地址
hash
;将来自于同一个
IP
地址的请求始终发往第一次挑中的RS
,从而实现会话绑定
|
DH:
DestinationHashing
|
目标地址哈希,第一次轮询调度至
RS
,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS
,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商
|
lvs动态调度算法
LC: least connections (最少链接发) |
适用于长连接应用
Overhead
(负载值)
=activeconns
(活动链接数)
x 256+inactiveconns
(非活 动链接数)
|
WLC:
Weighted LC
(权重最少链接)
|
默认调度方法
Overhead= (activeconns x 256+inactiveconns)/weight
|
SED:
Shortest Expection Delay
|
初始连接高权重优先
Overhead=(activeconns+1+inactiveconns) x 256/weight
但是,当
node1
的权重为
1
,
node2
的权重为
10
,经过运算前几次的调度都会被
node2
承接
|
NQ:
Never Queue
|
第一轮均匀分配,后续
SED
|
LBLC:
Locality-Based LC
|
动态的
DH
算法,使用场景:根据负载状态实现正向代理
|
LBLCR:
LBLC with Replication
|
带复制功能的
LBLC
,解决
LBLC
负载不均衡问题,从负载重的复制 到负载轻的RS
|
相关概念(术语):
VS:Virtual Server:负责调度
RS:Real Server:负责提供服务
CIP:Client IP
VIP:Vitrual server IP :外网IP
DIP:Director IP VS:内网IP
RIP:Real server IP
访问流程:CIP <--> VIP == DIP <--> RIP
5.防火墙标签解决轮询错误:
问题:两个集群分开控制,会导致我们希望同时访问到server1和server2,
却访问的是sever1和server1,server2和server2
RS:
yum install mod_ssl -y ###RS上安装mod_ssl模块,使其支持https
systemctl restart httpd ###重启httpd使模块生效
LVS:
curl -k https://192.168.0.20 ###-k忽略证书,确保访问成功
ipvsadm -A -t 192.168.0.200:443 -s rr
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
ipvsadm -C ###删除所有
使用标记解决轮询调度问题:
在vs调度器中设定端口标签,设定80和443是一个整体
LVS:
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 66 ###打标记
iptables -t mangle -nL ###查看
ipvsadm -A -f 66 -s rr ###访问66标记进行轮询
ipvsadm -a -f 66 -r 192.168.0.10 -g
ipvsadm -a -f 66 -r 192.168.0.20 -g