一、LVS DR 模式
DR(Direct Routing)模式的网络结构:
工作原理:
DR和REAL SERVER都是用同一个IP对外服务。但只有DR对ARP请求进行响应,所有REAL SERVER对本身这个IP的ARP请求保持静默。也就是说,网关会把对这个服务IP的请求全部定向给DR,而DR收到数据包后根据调度算法,找出对应的REAL SERVER,把目的MAC地址改为REAL SERVER的MAC并发给这台REAL SERVER。这时REAL SERVER收到这个数据包,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端。由于DR要对二层包头进行改换,所以DR和REAL SERVER之间必须在一个广播域,也可以理解为在同一台交换机上。
白话文:客户端发起一个http请求,我要上网,那么这个请求发给DR(调度均衡服务器),DR看这个请求的MAC地址是那个然后发给对应的RS(真实服务器),RS直接把回应发给client。
搭建DR环境:
基础环境:
Centos7.7
DR:
DIP:11.11.11.10 VIP:11.11.11.13
RS1:
RIP:11.11.11.11 VIP:11.11.11.13
RS2:
RIP:11.11.11.12 VIP:11.11.11.13
1、关闭防火墙和SELINUX
[root@d ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl stop firewalld
[root@d ~]# setenforce 0
[root@rs1 ~]# setenforce 0
[root@rs2 ~]# setenforce 0
2、DR操作
(1)配置VIP和路由转发
[root@d ~]# ifconfig ens32:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
[root@d ~]# route add -host 11.11.11.13 dev ens32:0
[root@d ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward=1 #开启路由转发功能
(2)安装集群管理工具并进行配置
[root@d ~]# yum install -y ipvsadm
[root@d ~]# ipvsadm -A -t 11.11.11.13:80 -s wrr
[root@d ~]# ipvsadm -a -t 11.11.11.13:80 -r 11.11.11.11 -g -w 1
[root@d ~]# ipvsadm -a -t 11.11.11.13:80 -r 11.11.11.12 -g -w 1
-A在服务器列表中新添加一条新的虚拟服务器记录
-t表示为tcp服务
-s使用的调度算法
-a在服务器表中添加一条新的真实主机记录
-r真实服务器地址
-m指定LVS工作模式为NAT模式
-g指定LVS工作模式为直接路由模式(LVS默认的模式)
-w真实服务器的权值
3.RS操作
[root@rs1 ~]# ifconfig lo:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
#配置VIP到本地回环网卡lo上,并只广播自己
[root@rs1 ~]# route add -host 11.11.11.13 lo:0
#配置本地回环网卡路由
[root@rs1 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
#1只回答目标IP地址是来访网络接口本地地址的ARP查询请求
[root@rs1 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
#2对查询目标使用最适当的本地地址,在此模式下将忽略这个IP数据包的源地址并尝试选择与能与该地址通信的本地地址
[root@rs1 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
#1仅在请求的目标IP配置在本地主机的接收到请求报文的接口上,才给予回应
[root@rs1 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
#2必须避免将接口信息向非本网络进行通告
[root@rs2 ~]# ifconfig lo:0 11.11.11.13 broadcast 11.11.11.13 netmask 255.255.255.255 up
[root@rs2 ~]# route add -host 11.11.11.13 lo:0
[root@rs2 ~]# echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@rs2 ~]# echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@rs2 ~]# echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@rs2 ~]# echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
4.RS进行测试
[root@rs1 ~]# yum install -y httpd
[root@rs1 ~]# echo "test" > /var/www/html/index.html && systemctl restart httpd
[root@rs2 ~]# yum install -y httpd
[root@rs2 ~]# echo "test" > /var/www/html/index.html && systemctl restart httpd
DR模式负载均衡完成啦!
2、LVS NAT模式
实验原理:就是不端的转化dest地址,利用了nat原理(一目了然)
搭建LVS的NAT模式环境
基础环境: Centos7.7
4台虚拟机
client: CIP:192.168.1.17
lvs: 内网:11.11.11.10 外网:192.168.1.16
RS1:内网:11.11.11.11
RS2: 内网:11.11.11.12
192.168.1.0网段网络为我虚拟机桥接网络,11.11.11.0为仅主机网段
1.关闭防火墙和selinux
[root@d ~]# systemctl stop firewalld
[root@rs1 ~]# systemctl stop firewalld
[root@rs2 ~]# systemctl stop firewalld
[root@client ~]# systemctl stop firewalld
[root@d ~]# setenforce 0
[root@rs1 ~]# setenforce 0
[root@rs2 ~]# setenforce 0
[root@client ~]# setenforce 0
2.lvs服务器配置
[root@d ~]# yum install ipvsadm -y
#设置集群调度算法,(便于验证,此处使用轮询算法):
[root@d ~]# ipvsadm -A -t 11.11.11.10:80 -s rr
设置后端服务器:
[root@d ~]# ipvsadm -a -t 11.11.11.10:80 -r 11.11.11.11 -w
[root@d ~]# ipvsadm -a -t 11.11.11.10:80 -r 11.11.11.12 -w
查看ipvsadm规则(这些规则没有保存在配置文件,重启失效):
[root@d ~]# 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.1.16:80 rr
-> 11.11.11.11:80 Masq 1 0 0
-> 11.11.11.12:80 Masq 1 0 0
#sever1收到客户端请求后,得到一个公网的ip,跟目的主机server2和server3不在一个网段
所以如果想要将客户端来的数据包转发给后端服务器,那么必须对这个数据包进行ip转换,再进行数据包转发。
出于安全考虑,Linux系统默认是禁止数据包转发的。配置Linux系统的ip转发功能,首先保证硬件连通,然后打开系统的转发功能.
[root@d ~]# vi /etc/sysctl.conf
...
net.ipv4.ip_forward = 1
[root@d ~]# systemctl restart network
3.web服务器配置
[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# echo web1 > /var/www/html/index.html
[root@rs1 ~]# systemctl start httpd
[root@rs1 ~]# route add default gw 11.11.11.10
[root@rs1 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 11.11.11.10 0.0.0.0 UG 0 0 0 ens32
11.11.11.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
[root@rs2 ~]# yum install httpd -y
[root@rs2 ~]# echo web2 > /var/www/html/index.html
[root@rs2 ~]# systemctl start httpd
[root@rs2 ~]# route add default gw 11.11.11.10
[root@rs2 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 11.11.11.10 0.0.0.0 UG 0 0 0 ens32
11.11.11.0 0.0.0.0 255.255.255.0 U 100 0 0 ens32
4.client端进行测试
[root@client ~]# curl 192.168.1.16
web1
[root@client ~]# curl 192.168.1.16
web2
LVS的nat模式实验成功啦!
三、VS/TUN模式
实验原理: ①.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
优点:
负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。缺点: 隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP
Encapsulation)协议,服务器可能只局限在部分Linux系统上。相比于其他两种模式,TUN 模式用的不多