LVS-DR模式

一、LVS-DR模式概述

1.1 LVS-DR模式介绍

  • LVS-DR:DIRECT ROUTING:直接路由模式,也叫二层转发,根据mac地址将前端请求转发到后端服务器
  • LVS-DR模式是最常用的LVS负载方式
  • LVS-DR模式中的负载均衡器,只负责请求和转发到后端的真实服务器,但是请求处理完成之后的响应结果是由后端服务器直接转发给客户端,不需要经过调度器的处理。可以减轻LVS调度器的负担。提高了系统的性能和稳定性

1.2 LVS-DR模式工作原理

  • 1、客户端发送请求到vip
  • 2、LVS的调度器接受请求之后,根据算法选择一台后端的真实服务器,将请求转发到后端RS,将请求报文的目的mac地址修改成后端真实服务器的mac地址进行转发
  • 3、后端真实服务器接受请求,处理完成,由于后端服务器直接将响应结果转发给客户端,会将响应报文中的目的mac地址修改成客户端的mac地址,直接把响应报文转发到客户端
  • 4、调度器、后端真实服务器都有vip地址,调度器的地址和后端真实服务器的地址要在同一网段

调度器中vip的作用:

  • 暴露访问地址
  • 标识后端的真实服务器;
  • 保证调度器和后端服务器之间的通信,保证请求可以正确地转发到后端服务器;
  • 实现高可用和故障转移

DR模式的特点:

  • 1、调度器的ip和真实服务器的ip必须在同一个物理网络中
  • 2、真实服务器的ip地址可以是私有地址(一般情况),也可以是公网地址,若配置的为公网地址,可以通过互联网直接访问RIP
  • 3、调度器只作入口,但是不做网关,要把服务器的转发功能关闭
  • 4、后端真实服务器的网关也不能指向调度器,RS的数据包不允许经过DS
  • 5、后端真实服务器上,基于LO接口配置VIP的ip地址

ARP协议:
网络层协议,将IP地址解析为物理MAC地址
ARP协议核心:

  • 解决局域网内部的通信问题(DR模式的调度器和后端服务器都在同一个网段中,通过ARP请求实现局域网内部通信)
  • ip地址和mac地址的映射

1.3 潜在问题

1、由于调度器和后端真实服务器都有相同地VIP地址,导致响应冲突,ARP通信紊乱

解决方法:

对真实服务器进行处理,真实服务器不响应针对VIP的ARP请求

vip地址使用LO的虚拟地址:arp_ignore=1

此时后端真实服务器只响应目的ip为本地ip,也就是rip,后端服务器真正ip地址,ens33网卡提供的地址的arp请求

2、返回报文使用的源地址还是VIP地址,调度器也是VIP,如何将响应返回到客户端不经过调度器

解决方法:

对后端服务器做一个内核参数的优化

arp_announce=2

系统不使用ip数据包的源地址来设置ARP的请求,而是使用真实的物理网卡的地址

二、LVS-DR部署实操

实验配置:
20.0.0.10:调度器
20.0.0.20:nfs共享存储
20.0.0.61:web集群1
20.0.0.62:web集群2
20.0.0.100:vip地址

配置调度器

[root@pup1 ~]# modprobe ip_vs
[root@pup1 ~]# yum -y install ipvsadm
[root@pup1 ~]# ifconfig ens33:0 20.0.0.100/24
[root@pup1 ~]# vim /etc/sysctl.conf
--加入--
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0
-------------------------------------------------------------------------------------------
net.ipv4.ip_forward = 0
#关闭服务器作为网关的转发功能
net.ipv4.conf.all.send_redirects = 0
#控制是否发送ICMP的重定向消息,禁止重定向
net.ipv4.conf.default.send_redirects = 0
#禁止默认网络接口,就是调度器的网卡,发送icmp的重定向消息
net.ipv4.conf.ens33.send_redirects = 0
#指明网卡设备,ens33不发送重定向消息
-------------------------------------------------------------------------------------------
[root@pup1 ~]# sysctl -p
[root@pup1 ~]# ipvsadm -A -t 20.0.0.100:80 -s rr 
[root@pup1 ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.61:80 -g
[root@pup1 ~]# ipvsadm -a -t 20.0.0.100:80 -r 20.0.0.62:80 -g
[root@pup1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@pup1 ~]# systemctl restart ipvsadm

LVS-DR模式_第1张图片

配置完成

注:若是有bug显示为下图

LVS-DR模式_第2张图片

LVS-DR模式_第3张图片

配置nfs服务器

[root@pup2 ~]# cd /opt
[root@pup2 opt]# mkdir pup benet
[root@pup2 opt]# vim /etc/exports
--添加--
/opt/pup 20.0.0.0/24(rw,sync)
/opt/benet 20.0.0.0/24(rw,sync)

[root@pup2 opt]# chmod 777 /opt/pup/ /opt/benet/
[root@pup2 opt]# systemctl restart rpcbind
[root@pup2 opt]# systemctl restart nfs
[root@pup2 opt]# exportfs -rv
exporting 20.0.0.0/24:/opt/benet
exporting 20.0.0.0/24:/opt/pup
[root@pup2 opt]# showmount -e
Export list for pup2:
/opt/benet 20.0.0.0/24
/opt/pup   20.0.0.0/24
[root@pup2 opt]# echo "this is pup" > pup/index.html
[root@pup2 opt]# echo "this is benet" > benet/index.html

配置web服务器

61:
[root@nginx1 ~]# systemctl restart nginx
[root@nginx1 ~]# systemctl restart rpcbind
[root@nginx1 ~]# systemctl restart nfs
[root@nginx1 ~]# showmount -e 20.0.0.20
Export list for 20.0.0.20:
/opt/benet 20.0.0.0/24
/opt/pup   20.0.0.0/24
[root@nginx1 ~]# mount 20.0.0.20:/opt/pup /usr/local/nginx/html/
62:
[root@nginx2 ~]# systemctl restart nginx
[root@nginx2 ~]# systemctl restart rpcbind
[root@nginx2 ~]# systemctl restart nfs
[root@nginx2 ~]# showmount -e 20.0.0.20
Export list for 20.0.0.20:
/opt/benet 20.0.0.0/24
/opt/pup   20.0.0.0/24
[root@nginx2 ~]# mount 20.0.0.20:/opt/benet /usr/local/nginx/html/

61、62相同操作:
[root@nginx1 ~]# cd /etc/sysconfig/network-scripts/
[root@nginx1 network-scripts]# cp ifcfg-lo ifcfg-lo:0
[root@nginx1 network-scripts]# vim ifcfg-lo:0
--删除原内容并加入--
DEVICE=lo:0
ONBOOT=yes
IPADDR=20.0.0.100
NETMASK=255.255.255.255

[root@nginx1 network-scripts]# ifup ifcfg-lo:0

LVS-DR模式_第4张图片

61、62相同操作:
[root@nginx1 network-scripts]# route add -host 20.0.0.100 dev lo:0
#把vip的地址绑定到lo:0,作为LVS的vip,起到标识的作用,告诉调度器进行转发请求的ip地址寻址
[root@nginx1 network-scripts]# vim /etc/sysctl.conf 
--加入--
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
-------------------------------------------------------------------------------------------
内核优化:
net.ipv4.conf.lo.arp_ignore = 1
#设置lo接口忽略来自任何接口的arp请求
net.ipv4.conf.lo.arp_announce = 2
#设置lo接口仅会响应本地的ip地址,其他的接口arp请求全部忽略
net.ipv4.conf.all.arp_ignore = 1
#所有接口忽略来自任何接口的arp请求
net.ipv4.conf.all.arp_announce = 2
#所有接口仅会响应本地的ip地址的arp请求,其他接口的arp请求全部忽略
-------------------------------------------------------------------------------------------
[root@nginx1 network-scripts]# sysctl -p

验证

LVS-DR模式_第5张图片

三、总结补充

3.1 负载均衡算法设置

修改负载均衡算法为加权轮询

[root@pup1 ~]# ipvsadm -ln

LVS-DR模式_第6张图片

[root@pup1 ~]# ipvsadm -E -t 20.0.0.100:80 -s wrr
[root@pup1 ~]# ipvsadm -ln

LVS-DR模式_第7张图片

修改策略的轮询权重

[root@pup1 ~]# ipvsadm -e -t 20.0.0.100:80 -r 20.0.0.61:80 -w 3
[root@pup1 ~]# ipvsadm -e -t 20.0.0.100:80 -r 20.0.0.62:80 -w 4

LVS-DR模式_第8张图片

修改后先保存

[root@pup1 ~]# ipvsadm-save > /etc/sysconfig/ipvsadm
[root@pup1 ~]# systemctl restart ipvsadm

修改负载均衡算法为目的地址hash

[root@pup1 ~]# ipvsadm -E -t 20.0.0.100:80 -s dh

LVS-DR模式_第9张图片 LVS-DR模式_第10张图片

 

3.1 NAT和DR区别

NAT:
优点:配置简单
缺点:性能瓶颈
真实服务器:ANY
支持的网络模式:私网
后端服务器数量:low(10-20)

DR:(最常用)
优点:性能最好
缺点:调度服务器和后端真实服务器不能跨网段
真实服务器:NO-ARP,(ARP请求只能到真实服务器)
支持的网络模式:后端服务器既可以是内网,也可以是公网
真实服务器数量:100

你可能感兴趣的:(服务器,运维)