LVS-DR数据包流向分析

1.为方便进行原理分析,将Client与群集机器放在同一网络中,数据包流进的路线为1-2-3-4

部署LVS—DR群集
2.Client向目标VIP发出请求,DIrector(负载均衡器)接收
IP包头及数据帧头信息
部署LVS—DR群集

3.Director根据负载均衡算法选择RealServer_1,不修改也不封装IP报文,而是将数据帧的
2.MAC地址改为RealServer_1的MAC地址,然后在局域网上发送
ip包头及数据帧头信息

部署LVS—DR群集
4.RealServer_1收到这个帧,解封装后发现目标ip与本机匹配(RealServer事先绑定了VIP),于是处理这个报文。随后重新封装报文,发送到局域网
ip包头及数据帧头信息

部署LVS—DR群集

5.Client将收到回复报文。Client认为得到正常的服务,而不会知道是那一台服务器处理的
注意:如果跨网段,则报文通过路由器由Internet返回给用户

部署LVS—DR群集

LVS-DR模型的特点

RS和DS必须在同一个物理网络中
RS可以使用私有地址,也可以使用公网地址,如果使用公网地址,可以通过互联网对RIP进行直接访问
所有的请求报文经由Director Server,但响应报文必须不能经过Director Server
RS的数据包绝不允许指向DIP
RS上的lo接口配置VIP的IP地址

LVS—DR中的ARP问题

1.在LVS-DR负载均衡集群中,负载均衡器与节点服务器都有配置相同的VIP地址
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
当ARP广播发送到LVS-DR集群是,因为负载均衡器和节点服务器都是连接到相同的网络上,它们都会接收到ARP广播
只有前段的负载均衡器进行相应,其他节点服务器不应该响应ARP广播

2.对节点服务器进行处理,使其不响应针对VIP的ARP请求
使用虚接口lo:0承载VIP地址
设置内核参数arp_ignore=1: 系统只响应目的IP为本地IP的ARP请求

部署LVS—DR群集
3.RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址
发送APR请求时,Linux默认使用IP包的源IP地址(即VIP)作为ARP请求包中的源IP地址,而不使用发送连接口的IP地址
如:ens33接口
部署LVS—DR群集
4.路由器收到ARP请求后,将更新APR表项
原有的VIP对4应DIrector的MAC地址被更新为VIP对应RealServer的MAC地址
部署LVS—DR群集
部署LVS—DR群集
5.问题
路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效

部署LVS—DR群集

部署LVS—DR群集

解决方法
对节点服务器进行处理,设置内核参数arp_announce=2; 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址

解决ARP的两个问题的设置方法

修改/etc/sysctl.conf文件(web服务器群集上设置,调度器上不需要设置)
net.ipv4.conf.lo.arp_ignore = 1 lo、all:表示网卡(所以网卡)
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

实验:LVS-DR部署

环境
部署LVS—DR群集
五台设备网卡都设置为VM1(仅主机模式)

第一步:配置NFS服务器
安装NFS服务
[[email protected] ~]#yum -y install rpcbind nfs-utils
2.在nfs服务器上创建两个目录,并添加内容(配置默认显示网页)
部署LVS—DR群集

[[email protected] web2]# cd
[roo[email protected] ~]# yum -y install rpcbind nfs-utils

设置访问权限
[[email protected] ~]# vi /etc/exports
部署LVS—DR群集
开机服务并服务重启:
[[email protected] ~]# systemctl restart nfs
[[email protected] ~]# systemctl restart rpcbind

查看访问权限
[[email protected] ~]# showmount -e
Export list for nfs-server:
/opt/web2 192.168.100.13
/opt/web1 192.168.100.12

第二步:配置web1
1.配置web1服务器(192.168.100.12)
//安装http服务
[[email protected] ~]# yum -y install httpd
2.查看权限并挂载NFS服务(关闭防护墙核心防护)并进行本机访问
部署LVS—DR群集
第三步:配置web2服务器(192.168.100.13)
1.//安装http服务
[[email protected] ~]# yum -y install httpd
2.查看权限并挂载NFS服务(关闭防护墙核心防护)并进行本机访问
部署LVS—DR群集
第四步:配置调度服务器
//加载LVS内核模块
LVS现在以成为Linux内核的一部分,默认编译为ip_vs模块,必要时能够自动调用。以下操作可以手动加载ip_vs模块,并查看当前系统中ip_vs模块的版本信息
[[email protected] ~]# modprobe ip_vs //确认内核对LVS的支持
[[email protected] ~]# cat /proc/net/ip_vs
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn

安装管理软件ipvsadm,不需要启动
[[email protected] ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm
编辑调度服务器脚本
vi dr.sh
部署LVS—DR群集
脚本对应的意思
#添加虚拟地址的虚接口
#给ens33:0添加路由
#清除内核虚拟服务器表中的所有记录
#创建虚拟服务器
#添加服务器节点
#添加服务器节点
#查看节点状态,加个“-n”将以数字形式显示地址、端口信息

执行脚本
部署LVS—DR群集
查看路由状态

部署LVS—DR群集
查看端口信息
部署LVS—DR群集

第五步:web1上配置DR模式脚本
vi web1.sh
部署LVS—DR群集
sh web1.sh 执行
查看端口信息 ifconfig
部署LVS—DR群集

第六步:web2:配置DR模式脚本
[[email protected]]# vi web2.sh
部署LVS—DR群集

执行脚本
[[email protected] ~]# sh web2.sh
查看端口信息
ipaddr
部署LVS—DR群集
第七步:客户机测试
访问web1和web2服务器的ip
部署LVS—DR群集
部署LVS—DR群集
再测试LVS-DR服务器虚拟IP
部署LVS—DR群集
3.查看节点状态
部署LVS—DR群集

相关文章: