负载均衡——LVS DR模式

一、LVS DR模式工作原理

在这里插入图片描述

1、客户端发送请求至VIP,也就是访问服务,请求报文源地址是CIP,目标地址为VIP;

2、LVS调度器接收到请求,报文在PREROUTING链检查,确定目的IP是本机,于是将报文发送至INPUT链,ipvs内核模块确定请求的服务是我们配置的LVS集群服务,然后根据用户设定的均衡策略选择某台后端RS,并将目标MAC地址修改RIP的MAC地址。因为调度器和后端服务器RS在同个网段,因此直接二层互通,将请求发给选择的RS处理;

3、因为报文目的mac是本机,且RS上有配置VIP,因此RS能接收该报文。后端服务处理完请求后,将响应直接发往客户端,此时源IP地址为VIP,目标IP为CIP。

作者:BlueBlueSummer
链接:https://www.jianshu.com/p/eae3fd16bb6c

二、LVS-DR数据包的流向分析

为了方便进行原理分析,将Client与群集机器放在网络中,数据包流经的路线为1-2-3-4
在这里插入图片描述Client向目标VIP发出请求,Director (负载均衡器)接收
IP包头及数据帧头信息在这里插入图片描述
Director根据负载均衡算法选择RealServer_ 1,不修改也不封装IP报文,而是将数据帧的MAC地址改为RealServer_ 1的MAC地址,然后在局域网上发送

在这里插入图片描述
RealServer_ 1收到这个帧,解封装后发现目标IP与本机匹配(RealServer事先绑定了VIP) ,于是处理这个报文。随后重新封装报文,发送到局域网
在这里插入图片描述
Client将收到回复报文。Client认为得到正常的服务 ,而不会知道是哪一台服务器处理的
注意:如果跨网段,则报文通过路由器经由Internet返回给用户
在这里插入图片描述

三、LVS-DR中的ARP问题

在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址
在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱
当一个ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播
对节点服务器进行处理,使其不响应针对VIP的ARP请求
使用虚接口lo:0承载ⅥP地址,设置内核参数 arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
在这里插入图片描述
RealServer返回报文(源IP是VIP)经路由器转发,重新封装报文时,需要先获取路由器的MAC地址
发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP) 作为ARP请求包中的源IP地址,而不使用发送接的IP地址
路由器收到ARP请求后,将更新ARP表项
原有的VIP对应Director的MAC地址会被更新为VIP对应RealServer

在这里插入图片描述
在这里插入图片描述
问题
●路由器根据ARP表项,会将新来的请求报文转发给RealServer,导致Director的VIP失效
解决方法
●对节点服务器进行处理,设置内核参数arp_ _announce=2: 系统不使用IP包的源地址来设置ARP请求的源地址,而选
择发送接口的IP地址
在这里插入图片描述

#对节点服务器进行处理,使其不响应针对VIPARP请求
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
#系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
服务器IP地址
LVS调度服务器内网地址:192.168.100.10,外网地址:192.168.100.111
Web服务器1内网地址:192.168.100.12
Web服务器1内网地址:192.168.100.13
NFS服务器内网地址:192.168.100.11

四、案例:LVS-DR部署

4.1 LVS服务器部署

加载ip_vs模块
[root@lvs ~]# modprobe ip_vs
[root@lvs ~]# 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,不需要启动
[root@lvs ~]# rpm -ivh /mnt/Packages/ipvsadm-1.27-7.el7.x86_64.rpm

编辑调度服务器脚本
[root@lvs ~]# vi dr.sh
#!/bin/bash
dr调度服务器安装
ifconfig ens33:0 192.168.100.111 broadcast 192.168.100.111  netmask 255.255.255.255 up       #添加虚拟地址的虚接口
route add -host 192.168.100.111 dev ens33:0      #给ens33:0添加路由
ipvsadm -C                  #清除内核虚拟服务器表中的所有记录
ipvsadm -A -t 192.168.100.100:111 -s rr      #创建虚拟服务器
ipvsadm -a -t 192.168.100.100:111 -r 192.168.100.12:80 -g   #添加服务器节点
ipvsadm -a -t 192.168.100.100:111 -r 192.168.100.13:80 -g   #添加服务器节点
ipvsadm -Ln         #查看节点状态,加个"-n"将以数字形式显示地址、端口信息

###选项注释
"-A":表示添加虚拟服务器
"-a":表示添加真实服务器
"-t":用来指定VIP地址及TCP端口
"-r":用来指定RIP地址及TCP端口
"-s":用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
"-m":表示使用NAT群集模式(是DR模式,是TUN模式)

在这里插入图片描述
在这里插入图片描述

4.2配置NFS服务器

安装NFS服务
[root@nfs-server ~]# yum -y install rpcbind nfs-utils

创建测试目录并新建网页
[root@nfs-server ~]# mkdir -p /opt/web1
[root@nfs-server ~]# mkdir -p /opt/web2
[root@nfs-server ~]# echo '<h1>this is web 1!</h1>' > /opt/web1/index.html
[root@nfs-server ~]# echo '<h1>this is web 2!</h1>' > /opt/web2/index.html

设置访问权限
[root@nfs-server ~]# vi /etc/exports
/opt/web1  192.168.100.12(ro)
/opt/web2  192.168.100.13(ro)

开启服务并开机自启
[root@nfs-server ~]# systemctl start nfs
[root@nfs-server ~]# systemctl start rpcbind
[root@nfs-server ~]# systemctl enable nfs
[root@nfs-server ~]# systemctl enable rpcbind

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

在这里插入图片描述

4.3 web2

安装httpd服务
[root@web1 ~]# yum -y install httpd

挂载NFS服务
[root@web1 ~]# mount 192.168.100.11:/opt/web1 /var/www/html

查看权限
[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11:
/opt/web2 192.168.100.12
/opt/web1 192.168.100.13

开启httpd服务
[root@web1 ~]# systemctl start httpd

本机访问
[root@web1 ~]# curl http://localhost
<h1>this is web1!</h1>

配置DR模式
[root@web1 ~]# vi web1.sh
#!/bin/bash
 web1
ifconfig lo:0 192.168.100.111 broadcast 192.168.100.111 netmask 255.255.255.255 up
route add -host 192.168.100.111 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

执行脚本
[root@web1 ~]# sh web1.sh

查看端口信息
[root@web1 ~]# ifconfig
......
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.111  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)

在这里插入图片描述

在这里插入图片描述

4.3 web1

安装httpd服务
[root@web1 ~]# yum -y install httpd

挂载NFS服务
[root@web1 ~]# mount 192.168.100.11:/opt/web2 /var/www/html

查看权限
[root@web1 ~]# showmount -e 192.168.100.11
Export list for 192.168.100.11
/opt/web2 192.168.100.12
/opt/web1 192.168.100.13

开启httpd服务
[root@web1 ~]# systemctl start httpd

本机访问
[root@web1 ~]# curl http://localhost
<h1>this is web1!</h1>

配置DR模式
[root@web1 ~]# vi web1.sh
#!/bin/bash

ifconfig lo:0 192.168.100.111 broadcast 192.168.100.111 netmask 255.255.255.255 up
route add -host 192.168.100.111 dev lo:0
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo "1" > /proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" > /proc/sys/net/ipv4/conf/lo/arp_announce
echo "2" > /proc/sys/net/ipv4/conf/all/arp_announce
sysctl -p &> /dev/null

执行脚本
[root@web1 ~]# sh web2.sh

查看端口信息
[root@web1 ~]# ifconfig
......
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 192.168.100.111  netmask 255.255.255.255
        loop  txqueuelen 1  (Local Loopback)
......

4.4客户机测试

①先访问web1和web2服务器的IP

在这里插入图片描述
②再测试LVS-DR服务器IP

在这里插入图片描述
③LVS服务器上查看节点状态
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值