系统性能扩展方式:
衡量可用性:在线时间/(在线时间+故障处理时间)
99%:一年有三天不在线
99.9%:一年有0.3天不在线
99.99%:一年有0.03天不在线
99.999%:一年有0.003天不在线
Keepalived能够做到这一点
HA为LB服务
本方式仅限于负载均衡集群可用的方式 其余不做描述
一、网络层负载均衡
在网络层和传输层(IP和端口)通过修改目标地址进行负载均衡
用户访问请求到达负载均衡服务器,负载均衡服务器在操作系统内核进程获取网络数据包,根据算法得到一台真实服务器,
然后将用户请求的目标地址修改成真实服务器地址,数据处理完后返回给负载均衡服务器,负载均衡服务器收到响应后将自身的地址修改成原用户访问地址后再将数据返回回去,类似反向服务器负载均衡
优点:相应请求时速度较反向服务器负载均衡要快
缺点:无法处理更高级的请求
二、数据链路层负载均衡
在数据链路层修改Mac地址进行负载均衡
负载均衡服务器的IP和它所管理的web服务器集群的虚拟IP一致
负载均衡数据分发过程中不修改访问地址的IP地址,而是修改Mac地址
通过这两点达到不修改数据包的原地址和目标地址就可以进行正常的访问
优点:不需要负载均衡服务器进行IP地址的转换,数据响应时,不需要经过负载均衡服务器
缺点:负载均衡服务器的网卡带宽要求较高
所谓四层就是基于IP+端口的负载均衡,主要代表有lvs
七层负载也称内容交换,就是基于URL等应用层信息的负载均衡,主要代表有nginx
框架 |
---|
LB-server负载均衡器 |
realy-server真实服务器 |
工作原理
① 客户端将请求发往前端的负载均衡服务器,请求报文源地址是CIP(客户端),后面统称为CIP,目标地址为VIP(负载均衡前端地址,后面统称为VIP)
② 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将客户端请求报文的目标地址改为了后端服务器的RIP地址并将报文根据算法发送出去
③ 报文送到Real Server后,由于报文的目标地址是自己,所以会响应该请求,并将响应报文返还给LVS
④ 然后LVS将报文源地址改为本机并发送给客户端
注意:在NAT模式中,Real Server的网关必须指向LVS,否则报文无法送达客户端
优缺点
优点:节约IP地址,网络隔离更安全
缺点:LVS很可能成为系统性能瓶颈,所有的请求都需要应答
工作原理
① 客户端将请求发往前端的负载均衡器,请求报文源地址是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、大多数操作系统可以作为真实服务器,要支持隔离arp广播
ARP问题
通常,DR模式需要在Real-Server上配置VIP,配置方法为:
/sbin/ifconfig lo:0 inet VIP netmask 255.255.255.255
1)原因在于,当LVS把客户端的包转发给真实服务器时,因为包的目的IP地址是VIP,那么如果真实服务器收到这个包后,发现包的目的IP不是自己的系统IP,那么就会认为这个包不是发给自己的,就会丢弃这个包,所有需要将这个IP地址绑到卡上,当发送应答包给客户端时,真是服务器就会把包的源和目的地址调换,直接回复客户端
2)关于ARP广播 上面绑定VIP的掩码为“255.255.255.255”,说明广播地址是其本身,那么他就不会将ARP发送到实际的自己该属于的广播域了,这样防止与LVS上VIP冲突,而导致IP冲突
另外在Linux的真是服务器上,需要设置ARP的sysctl选项
① 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP
② 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS
③ RS 收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己的lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端
Full解决的是LVS和RS跨VLAN的问题,而跨VLAN问题解决后,LVS和RS不再存在VLAN上的从属关系,可以做到多个LVS对应多个RS,解决水平扩容的问题
这里因为我的真实地址是192.168.1网段所以桥接的是192网段
使用四台主机CentOS Linux release 7.5.1804 (Core)
Client:VMnet0 192.168.1.29/24
LVS: VMnet0 192.168.1.31/24
VMnet2 192.168.200.10
Web1: VMnet2 192.168.200.20
Web2: VMnet2 192.168.200.30
#httpd刚才已安装
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd
[root@web1 ~]# echo web1 > /var/www/html/index.html #输入网页内容用于测试
[root@web1 ~]# route add -net 192.168.1.0/24 gw 192.168.200.10 #为客户端添加一条静态路由
#httpd刚才已安装
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd
[root@web2 ~]# echo web2 > /var/www/html/index.html
[root@web2 ~]# route add -net 192.168.1.0/24 gw 192.168.200.10
[root@lvs ~]# echo 1 > /proc/sys/net/ipv4/ip_forward #启动路由转发功能参数
[root@lvs ~]# yum -y install ipvsadm #安装LVS
[root@lvs ~]# ipvsadm -A -t 192.168.1.31:80 -s rr #-A:对外提供的地址 -t:tcp -s:策略 rr:轮巡
[root@lvs ~]# ipvsadm -a -t 192.168.1.31:80 -r 192.168.200.20:80 -m #-a:对内真实服务器 -r:真实 -m:地址伪装
[root@lvs ~]# ipvsadm -a -t 192.168.1.31:80 -r 192.168.200.30:80 -m
[root@client ~]# elinks --dump http://192.168.1.31
总结一下:本实验主要是解决环境问题,安装完Apache需要关机切换网卡,但是我之前直接点强制关机导致Apache无法启动,后来使用了shutdown -h now 才能够正常启动,不排除是BUG,最后是对于路由下一跳的理解问题,可能长期没有配置过路由的关系,致使理解错误,实验失败,后来经过调整,实验成功!
DR模型要求每一台服务器需要配置一个公网IP地址
虚拟IP的设计,遵循本网段未使用的IP即可
#处于同一网段
Client:192.168.100.9/24
LVS-DR:192.168.100.10/24 虚拟IP地址:192.168.100.123
Web1: 192.168.100.11/24 虚拟IP地址:192.168.100.123
Web2:192.168.100.12/24 虚拟IP地址:192.168.100.123
#如没有ifconfig命令需安装
[root@lvs-dr ~]# yum -y install net-tools
[root@lvs-dr ~]# ifconfig ens32:0 192.168.100.123 broadcast 192.168.100.255 netmask 255.255.255.0 up
#启动子接口 广播地址为192.168.100.255 子网掩码为255.255.255.0 up:启动
[root@lvs-dr ~]# route add -host 192.168.100.123 dev ens32:0 #添加主机路由,不允许使用真实设备,需使用dev设备ens32接口通信
[root@lvs-dr ~]# vim /etc/sysctl.conf
...
net.ipv4.ip_forward = 1 #开启路由转发功能
net.ipv4.conf.all.send_redirects = 0 #禁止转发重定向报文
net.ipv4.conf.ens32.send_redirects = 0 #禁止ens32转发重定向报文
net.ipv4.conf.default.send_redirects = 0 #禁止转发默认重定向报文
ipvsadm -C 清除所有LVS规则
[root@lvs-dr ~]# yum -y install ipvsadm
[root@lvs-dr ~]# ipvsadm -A -t 192.168.100.123:80 -s rr #添加VIP规则
[root@lvs-dr ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.100.11:80 -g #-g:dr模式 直连路由网关模式
[root@lvs-dr ~]# ipvsadm -a -t 192.168.100.123:80 -r 192.168.100.12:80 -g
参数说明 | |
---|---|
-A | 添加Virtual Server |
-t | 指定使用tcp协议 |
-s | 指定调度策略/负载算法为rr |
-a | 添加真实服务器 |
-r | 指定真实服务器是谁 |
-g | LVS类型DR |
[root@lvs-dr ~]# ipvsadm-save > /etc/sysconfig/ipvsadm #-save:保存
[root@lvs-dr ~]# systemctl enable ipvsadm #开机自启
一、两个Web服务器部署Web服务
DR并不会像NAT灵活,有时候因为缓存的问题只显示一台机器
[root@web1 ~]# yum -y install httpd
[root@web1 ~]# echo web > /var/www/html/index.html #修改主页内容
[root@web1 ~]# systemctl start httpd
[root@web1 ~]# systemctl enable httpd
[root@web2 ~]# yum -y install httpd
[root@web2 ~]# echo web > /var/www/html/index.html
[root@web2 ~]# systemctl start httpd
[root@web2 ~]# systemctl enable httpd
[root@web1 ~]# ifconfig lo:0 192.168.100.123/32
[root@web2 ~]# ifconfig lo:0 192.168.100.123/32
[root@web1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore #忽略arp响应,不允许接受
[root@web1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce #可以回答,为了让vip包发出去,只允许发
关于arp_ignore:定义对目标地址为本地IP的ARP询问不同的应答模式 |
---|
0 -(默认值):回应任何网络接口上对任何本地IP地址的arp查询请求 |
1 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求 |
2 - 只回答目标IP地址是来访网络接口本地地址的ARP查询请求,且来访IP必须在该网络接口的子网段内 |
3 - 不回应该网络界面的ARP请求,而只对设置的唯一和连接地址做出回应 |
4-7 -保留未使用 |
[root@web2 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@web2 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@client ~]# elinks --dump http://192.168.100.123
轮询算法 | 说明 |
---|---|
Fixed Scheduling Method:静态调服算法 | |
RR 轮询 | Round-Robin:调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数的系统负载 |
WRR 加权轮询 | 调度器通过“加权轮叫”调度算法,根据真实服务器的不同处理能力,来调度访问请求,这样可以保证处理能力强的服务器处理更多的访问流量,调度器可以自动问询真实服务器的负载情况,并动态地调整其权值 |
DH 目标地址hash | “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表中找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空 |
SH 目标地址hash | “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空 |
Dynamic Scheduling Method:动态调服算法 | |
LC 最少连接 | 调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的连接数最少的服务器上,如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地负载均衡 |
WLC 加权最少连接 | 在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少连接”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载,调度器可以自动问询真实服务器的负载情况,并动态地调整其权值 |
ipvsadm
命令 | 说明 |
---|---|
-A | 添加一个虚拟服务,使用ip地址、端口号、协议来唯一定义一个虚拟服务 |
-E | 编辑一个虚拟服务,修改算法 |
-D | 删除一个虚拟服务 |
-C | 清空虚拟服务列表 |
-a | 添加一台真实服务器 |
-e | 编辑一台真实服务器 |
-d | 减少一台真实服务器 |
-t | 使用TCP服务,该参数后需加主机与端口信息 |
-u | 使用UDP服务,该参数后需加主机与端口信息 |
-g | 直连路由模式 |
-w | 指定真实服务器权重 |
查看统计
[root@lvs-dr ~]# ipvsadm -Lnc #查看当前ipvs模块中记录的连接(可用于观察转发情况)
可以看到用户请求之后是通过11和12服务器进行处理的 证明192.168.100.10lvs-dr服务器正在进行负载均衡
[root@lvs-dr ~]# ipvsadm -Ln #查看当前配置的虚拟服务和各个真实服务器的权重
[root@lvs-dr ~]# ipvsadm -Ln --stats --rate #查看ipvs模块的转发情况统计
今天是我的生日,此文作为自己的笔记希望对大家有所帮助,也望自己前程似锦,加油!
Pakho 2021年6月11日 3:13