一、LVS DR 模式
工作原理: 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模式
②.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
③.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡直接发送给客户端。
优点: 负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。
缺点: 隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上。
相比于其他两种模式,TUN 模式用的不多