目录
1.Fixed Scheduling Method 静态调服方法
2.Dynamic Scheduling Method 动态调服方法
负载均衡
一.集群功能分类
1.LB load balance
负载均衡(增加处理能力),有一定高可用能力,但不是高可用集群,是以提高服务的并发处理能力为根本着眼点
软件负载均衡设备
LVS
LVS(四层路由设备),是由中国人章文松研发的(阿里巴巴的副总裁)根据用户请求的IP与端口号,实现将用户的请求分发至不同的主机
HAproxy
haproxy:主要功能是针对http协议实现负载均衡,也可以实现tcp(mysql,smtp)等协议的负载均衡
NGINX
nginx:是由俄罗斯人开发的,主要功能是针对http,smtp,pop3,imap等协议实现负载均衡,只负责解析有限的七层协议
对比
硬件负载均衡设备
F5:BIG IP
型号
F5 BIG-IP-1500
F5 BIG-IP LTM8800
价格
20W~100W
参数
处理器:单CPU,
基本内存:768MB,
千兆CU端口:8个,
千兆光纤端口(迷你型SFP-GBIC):2个可选,
千兆CU端口:4个,
千兆光纤端口:2个可选
A10
深信服
2.HA high available
高可用集群(增加服务可用性)
高可用集群,是以提升服务的始终在线能力为着眼点,不会因为宕机而导致服务不能用。
衡量可用性:在线时间/(在线时间+故障处理时间)
二.负载均衡
实现负载均衡一般可以使用顺序、比重、流量、服务类别等进行分配,负载均衡的部署方式也分为路由和服务直接返回模式
1.负载均衡的主要方式
http重定向
原理:根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给客户浏览器,由浏览器重新进行访问。
DNS负载均衡
原理:在DNS服务器上配置多个域名对应IP的记录。例如一个域名www.baidu.com对应一组web服务器IP地址,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。
DNS负载均衡采用的是简单的轮询算法,不能区分服务器之间的差异,不能反映服务器当前运行状态,所以其的负载均衡效果并不是太好。
反向代理负载均衡(nginx)
原理:反向代理处于web服务器这边,反向代理服务器提供负载均衡的功能,同时管理一组web服务器,它根据负载均衡算法将请求的浏览器访问转发到不同的web服务器处理,处理结果经过反向服务器返回给浏览器
优点:部署简单,处于http协议层面。
缺点:使用了反向代理服务器后,web 服务器地址不能直接暴露在外,因此web服务器不需要使用外部IP地址,而反向代理服务作为沟通桥梁就需要配置双网卡、外部内部两套IP地址。
IP网络层负载均衡 LVS NAT
在网络层和传输层(IP和端口)通过修改目标地址进行负载均衡。
用户访问请求到达负载均衡服务器,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台真实服务器地址,然后将用户请求的目标地址修改成该真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再讲数据返回回去。类似于反向服务器负载均衡。
优点:在响应请求时速度较反向服务器负载均衡要快。
缺点:如法处理更高级的请求
数据链路层负载均衡 LVS DR
在数据链路层修改Mac地址进行负载均衡。
负载均衡服务器的IP和它所管理的web 服务群的虚拟IP一致;
负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址;
通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问。
优点:不需要负载均衡服务器进行IP地址的转换。数据响应时,不需要经过负载均衡服务器。
缺点:负载均衡服务器的网卡带宽要求较高。
2.四层负载和七层负载
所谓四层就是基于IP+端口的负载均衡,主要代表有lvs。
七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx。
三.LVS概述
LVS是Linux Virtual Server,Linux虚拟服务器
LVS工作在一台server上提供Directory(负载均衡器)的功能,本身并不提供服务,只是把特定的请求转发给对应的real server(真正提供服务的主机),从而实现集群环境中的负载均衡。
框架
LB-SERVER负载均衡器
realy-server真实服务器
四.LVS工作模式
NAT转发模式
NAT Network Address Translation,网络地址转换
工作原理:
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP(客户端IP),后面统称为CIP),目标地址为VIP(负载均衡器前端地址,后面统称为VIP)。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标IP地址改为了后端服务器的RIP地址并将报文根据算法发送出去。
③.报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS。
④.然后lvs将此报文的源地址修改为本机并发送给客户端。
注意在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
优点
网络隔离更安全 节约IP地址
缺点:
director很可能成为系统性能瓶颈,所有的请求director都需要处理应答
<20优点
DR直接路由模式
工作原理
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的源MAC地址改为自己DIP的MAC地址,目标MAC改为了RIP的MAC地址,并将此包发送给RS。
③.RS发现请求报文中的目的MAC是自己,就会将次报文接收下来,处理完请求报文后,将响应报文通过lo接口送给eth0网卡直接发送给客户端。
特点
1,集群节点和director必须在一个物理网络内
2,RIP可以使用公网地址或私有地址
3,director仅处理入站请求,director服务器的压力比较小
4,集群节点网关不指向director,故出站不经过director
5,不支持端口映射
6,大多数操作系统可以作为realserver,要支持隔离arp广播
TUN-IP隧道模式
工作原理
①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
***模式对比:
*轮训算法
1.Fixed Scheduling Method 静态调服方法
(1).RR(Round-Robin) 轮询
(2).WRR 加权轮询
调度器通过"加权轮循"调度算法,根据真实服务器的不同处理能力.来调度访问请求。这样可以保证处理能力强的服务器,处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
(3).DH 目标地址hash
(4).SH 源地址hash
2.Dynamic Scheduling Method 动态调服方法
(1).LC 最少连接
(2).WLC 加权最少连接
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
(3).LBLC 基于本地的最少连接
(4).LBLCR 带复制的基于本地的最少连接
LVS-NAT实战案例
拓扑图:
地址分配
lvs分配了两张网卡,一直和后端的真实服务器在同一子网内,另外一张网卡暴露在外网中
client:VMNET0 192.168.0.110
LVS: VMNET0 192.168.0.111
VMNET2 192.168.231.128
web1: VMNET2 192.168.231.129 提前安装httpd
web2: VMNET2 192.168.231.130 安装httpd
web1配置网站和路由
注意网络连通性问题
#yum install -y httpd
#systemctl start httpd
#systemctl enable httpd
#echo web1 > /var/www/html/index.html
#route add -net 192.168.0.0/24 gw 192.168.231.128
配置真实服务器的网络出口。
-net 外部网络
gw 网关,网络的唯一出口
web2配置网站和路由
#yum install -y httpd
#systemctl start httpd
#systemctl enable httpd
#echo web2 > /var/www/html/index.html
# route add -net 192.168.0.0/24 gw 192.168.231.128
*LVS-NAT配置路由功能和负载策略
# echo 1 > /proc/sys/net/ipv4/ip_forward 启动路由功能
# yum install -y ipvsadm 安装LVS
#ipvsadm -A -t 192.168.0.111:80 -s rr
-A 添加一个VIP
-t TCP协议
-s schedule调度
rr 轮训策略类型
#ipvsadm -a -t 192.168.0.111:80 -r 192.168.231.129:80 -m
-a 添加一个真实服务
-r 真实服务器IP 地址
-m nat 模式工作
# ipvsadm -a -t 192.168.0.111:80 -r 192.168.231.130:80 -m
client测试
elinks --dump http://192.168.0.111
web1
web2
轮换出现
LVS-DR实战案例
direct routing 直连路由模式(MAC地址)
环境
虚拟IP的设计,遵循本网段未使用的IP即可。
192.168.31.1 client windown10
192.168.31.179 dr1 负载均衡器
虚拟IP地址:192.168.31.110
192.168.31.177 rs1 web1
虚拟IP地址:192.168.31.110
192.168.31.178 rs2 web2
虚拟IP地址:192.168.31.110
一.LVS服务器
1.LVS准备VIP和路由
添加VIP
ifconfig ens33:0 192.168.31.110 broadcast 192.168.31.255 netmask 255.255.255.0 up
route add -host 192.168.31.110 dev ens33:0
设置路由转发
服务器不是一台路由器,那么它不会发送重定向,所以可以关闭该功能
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1 开启路由功能
net.ipv4.conf.all.send_redirects = 0 禁止转发重定向报文
net.ipv4.conf.ens33.send_redirects = 0 禁止ens33转发重定向报文
net.ipv4.conf.default.send_redirects = 0 禁止转发默认重定向报文
2.LVS设置负载均衡条目/规则
设置IPVSADM internet protocol virtual server admin 互联网 协议 虚拟 服务器 管理器
yum -y install lvsadm
ipvsadm -C 清除所有配置
ipvsadm -A -t 192.168.31.110:80 -s rr 添加轮转规则
ipvsadm -a -t 192.168.31.110:80 -r 192.168.31.177:80 -g
ipvsadm -a-t 192.168.31.110:80 -r 192.168.31.178:80 -g
参数说明
-A 添加virtual server
-t 指定使用tcp协议
-s 指定调度策略/负载算法为rr
-a 添加realserver
-r 指定realserver是谁
-g LVS类型DR
LVS类型:
-g:Gateway,DR(默认使用的类型)
-i:ipip,TUN
-m:masquerade(地址伪装),NAT
3.LVS让配置永久生效
# ipvsadm-save > /etc/sysconfig/ipvsadm
# systemctl enable ipvsadm
二.WEB集群
4.两个web上部署web服务
web1:
yum -y install nginx
echo web1 >/usr/local/nginx/htnl/index.html
systemctl enable nginx
web2:
yum -y install httpd
echo web2 >/var/www/html/index.html
systemctl enable httpd
5.给两个web服务器的lo网卡设置子网掩码为32位vip
web1:
ifconfig lo:0 192.168.31.110/32
web2:
ifconfig lo:0 192.168.31.110/32
6.给两个web服务器设置内核参数
web1 web2:
忽略arp响应 ,不允许收
echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore
为了让vip发包出去,但允许发
# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
客户端测试
7.客户端测试
在网页上打开时 会出现web1 web2 不是轮训出现
ipvsadm状态测试
8.命令解释大全
1. 管理虚拟服务
添加一个虚拟服务192.168.1.100:80,使用轮询算法
ipvsadm -A -t 192.168.1.100:80 -s rr
修改虚拟服务的算法为加权轮询
ipvsadm -E -t 192.168.1.100:80 -s wrr
删除虚拟服务
ipvsadm -D -t 192.168.1.100:80
2.管理真实服务
把-A 换为 -a
3. 查看统计
查看当前配置的虚拟服务和各个RS的权重
ipvsadm -Ln
查看当前ipvs模块中记录的连接(可用于观察转发情况)
ipvsadm -lnc
查看ipvs模块的转发情况统计
ipvsadm -Ln --stats --rate
9.脚本配置方法
VS调度器配置
#!/bin/bash
#Author:why
#Date:2021-12-29
vip='172.18.0.100'
iface='eth0:1'
mask='255.255.255.255'
port='80'
rs1='10.10.0.72'
rs2='10.10.0.73'
scheduler='wrr'
type='-g'
case $1 in
start)
ifconfig $iface $vip netmask $mask broadcast $vip up
iptables -F
ipvsadm -A -t ${vip}:${port} -s $scheduler
ipvsadm -a -t ${vip}:${port} -r ${rs1} $type -w 1
ipvsadm -a -t ${vip}:${port} -r ${rs2} $type -w 1
echo "The VS Server is Ready!"
;;
stop)
ipvsadm -C
ifconfig $iface down
echo "The VS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac
./dr-vs.sh start #dr-vs.sh为脚本名
RS服务器配置
#!/bin/bash
#Author:why
#Date:2021-12-29
vip=172.18.68.100
mask='255.255.255.255'
dev=lo:1
case $1 in
start)
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 $dev $vip netmask $mask broadcast $vip up
route add -host $vip dev $dev
echo "The RS Server is Ready!"
;;
stop)
ifconfig $dev down
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore3
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "The RS Server is Canceled!"
;;
*)
echo "Usage: $(basename $0) start|stop"
exit 1
;;
esac