负载均衡
一、负载均衡由来
在业务初期,我们一般会先使用单台服务器对外提供服务。随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单服务器的性能无法满足业务需求时,就需要把多台服务器组成集群系统提高整体的处理性能。不过我们要使用统一的入口方式对外提供服务,所以需要一个 流量调度器 通过均衡的算法,将用户大量的请求均衡地分发到后端集群不同的服务器上。这就是我们后边要说的 负载均衡。
使用负载均衡带来的好处:
1.提高了系统的整体性能
2.提高了系统的扩展性
3.提高了系统的可用性
LVS的4种工作模式
1.LVS DR模式
LVS服务器与后端真实服务器VIP地址要一致 且 他们要在同一个网段内
客户端的数据请求会交给lvs服务器
此时源IP是CIP , 目标IP是VIP
源MAC是CMAC 目标MAC 是VMAC
lvs服务器在接收到请求后,便会选择RS作为后端服务器,并修改目标MAC地址
此时源IP是CIP , 目的IP是VIP
此时源MAC是CMAC ,目标MAC是RS IP地址的MAC(lvs服务器的VIP与RS的VIP一致)
DMAC
后端服务器将数据处理完后,会直接将结果发送给客户端
此时源IP是VIP,目的IP是CIP
2.LVS NAT模式
用户请求数据到lvs服务器 ,
此时源ip是CIP 目标ip是VIP
LVS接收到数据后,判断请求的IP是自己网卡上的,就会通过算法选择RS作为后端服务器
此时源IP是CIP,目标IP是后端服务器的RIP
后端服务器处理完数据后,就会将数据传送给lvs服务器(所以RS的网关是lvs服务器的IP)
此时源IP是RIP,目标IP是客户端CIP
VIP服务器接收到后端服务器传来的数据,发现目标IP是CIP,就会将源IP修改为VIP,然后发送给客户端
测试源IP是VIP ,目标IP是客户端CIP
3.LVS Tunnel模式
用户数据请求LVS服务器,
此时源IP是CIP , 目标IP是VIP
LVS服务器接收到数据,判断是本机地址后,就会选择RS为后端服务器,并在报文一个前端和后端
此时源IP是DIP(lvs服务器的IP) ,目标IP是RIP
RS在解封装的时候,就会看见正确的源IP和目标IP,因为RS也是有VIP的,所以在处理完数据后,就会直接发送给客户端
此时源IP是VIP ,目标IP是CIP
4.LVS fullnat模式
客户端将数据发送给LVS服务器
此时源IP是CIP , 目标IP是VIP
LVS服务器接收到数据后,选择后端RS作为后端服务器,并修改源IP和目标IP
此时源IP是DIP , 目标IP是RIP
RS处理完数据交还给LVS服务器
此时源IP是RIP , 源IP是DIP
LVS服务器再将数据发送回客户端,并修改源IP和目标IP
此时源IP是VIP , 目标IP是CIP
lvs DR模式配置
1.安装软件
[root@DR ~]# yum provices */bin/ipvsadm
[root@DR ~]# yum -y install ipvsadm
2.添加vip地址
[root@DR ~]# route add -host 192.168.30.170/32 dev lo
[root@RS1 ~]# route add -host 192.168.30.170/32 dev lo
[root@RS2 ~]# route add -host 192.168.30.170/32 dev lo
3.在RS上修改网卡内核参数
[root@RS1 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS1 ~]#sysctl -p
[root@RS2 ~]# vim /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
[root@RS2 ~]#sysctl -p
解释:
net.ipv4.conf.all.arp_ignore = 1
是否响应arp请求
1:
请求报文从哪个接口进入的且请求的目标地址就是
此接口配置的地址才予以响应,否则不响应
net.ipv4.conf.all.arp_announce = 2
是否接收并记录别人的通告以及是否通告自己的mac地址给别人。
2:
总是不通告与自己不在同一个网段的地址,
比如不通告2.0网段的地址给1.0网段,不通告3.0网段的地址给1.0网段等,绝对不会通告
4.给RS添加VIP地址
[root@RS1 ~]# ip addr add 192.168.30.170 dev lo
[root@RS2 ~]# ip addr add 192.168.30.170 dev lo
在BD上操作
5.查看arp
[root@DR ~]# arp -a
? (192.168.30.232) at 00:0c:29:e2:be:9a [ether] on ens33
? (192.168.30.231) at 00:0c:29:c8:03:9e [ether] on ens33
6.添加一台虚拟服务器 指定vip地址 使用wrr算法
[root@DR ~]# ipvsadm -A -t 192.168.30.170:80 -s wrr
7.添加一台真实的服务器 指定vip地址 后端服务器真实IP 更改模式 默认为DR
[root@DR ~]# ipvsadm -a -t 192.168.30.170:80 -r 192.168.30.232:80 -g
[root@DR ~]# ipvsadm -a -t 192.168.30.170:80 -r 192.168.30.231:80 -g
8.保存
[root@DR ~]# ipvsadm -S > /etc/sysconfig/ipvsadm
9.查看
[root@DR ~]# 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.30.170:80 wrr
-> 192.168.30.231:80 Route 1 0 0
-> 192.168.30.232:80 Route 1 0 0