LVS 负载均衡 ---- DR模式

LVS 负载均衡 ---- DR模式

一:DR模式的定义

  • 直接路由(Direct Routing)

  • ​ 简称DR模式,采用半开放式的网络结构,与TUN模式的结构类型,但各节点并不是分散在各地,而是与调度器位于同一个物理网络; 负载调度器与各节点服务器通过本地网络连接,不需要建立专用的IP隧道。

二:LVS-DR 中的ARP问题

  • 在LVS-DR负载均衡集群中,负载均衡器与节点服务器都要配置相同的VIP地址

  • 在局域网中具有相同的IP地址,势必会造成各服务器ARP通信的紊乱

  • 当一个ARP广播发送到LVS-DR集群时,因为负载均衡器和节点服务器都是连接到相同的网络上的,它们都会接收到ARP广播

  • 此时只有前端的负载均衡器进行响应,其他节点服务器不应该响应ARP广播

  • 对节点服务器进行处理,使其不响应针对VIP的ARP请求

  • 使用虚接口lo:0 承载VIP地址

  • 设置内核参数arp_ignore=1:系统只响应目的IP为本地IP的ARP请求
    LVS 负载均衡 ---- DR模式_第1张图片

  • RealServer返回报文(源IP是VIP)经路由器转发,在重新封装报文时,需要先获取路由器的MAC地址

  • 发送ARP请求时,Linux默认使用IP包的源IP地址(即VIP) 作为ARP请求包中的源IP地址,而不使用发送接口(例如ens33) 的IP地址

LVS 负载均衡 ---- DR模式_第2张图片

  • 此时新来的请求报文,路由器根据ARP表项,会将该报文转发给
    RealServer, 从而导致Director的VIP失效
  • 解决方法:
    ● 对节点服务器进行处理,设置内核参数arp_ announce=2: 系统不使用IP包的源地址来设置ARP请求的源地址,而选择发送接口的IP地址
    LVS 负载均衡 ---- DR模式_第3张图片

三:实验配置

1、实验环境

(1)4台centos7虚拟机,2台作为调度服务器(lvs),2台作为节点服务器(web)

(2)客户端主机能够通过虚拟ip地址,访问到后台的 Web服务器的网页
LVS 负载均衡 ---- DR模式_第4张图片

2、实验步骤

  • 在LVS01 、LVS02 上配置

(配置都相同,就IP地址不同)

(1)修改主机名,并安装软件包
[root@localhost ~]# hostnamectl set-hostname lvs01
[root@localhost ~]# su
[root@lvs01 ~]# 
[root@lvs01 ~]# yum install keepalived ipvsadm -y
(2)修改参数内核文件
[root@lvs01 ~]# vim /etc/sysctl.conf
‘末行添加’
net.ipv4.ip_forward=1      ‘启动路由转发功能’
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0       ‘关闭重定向功能’
net.ipv4.conf.ens33.send_redirects = 0

[root@lvs01 ~]# sysctl -p      ‘让上述配置生效’
(3)设置虚拟地址
[root@lvs01 ~]# cd /etc/sysconfig/network-scripts/
[root@lvs01 network-scripts]# ls
[root@lvs01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens33:0
[root@lvs01 network-scripts]# vim ifcfg-ens33:0
‘删除原有内容,添加虚拟地址’
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.0

(4)LVS服务器创建脚本便于service管理
[root@lvs01 network-scripts]# cd /etc/init.d/
[root@lvs01 init.d]# ls
functions  netconsole  network  README
[root@lvs01 init.d]# vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.10      ‘虚拟ip’
RIP1=192.168.100.201     ‘真实web服务器IP地址’
RIP2=192.168.100.202
case "$1" in
start)
     /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm     ‘保存配置’
     systemctl start ipvsadm       ‘启动配置’
     /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask    255.255.255.255 broadcast $VIP up          
     /sbin/route add -host $VIP dev ens33:0     ‘添加路由网段信息’
     /sbin/ipvsadm -A -t $VIP:80 -s rr      ‘指定虚拟服务访问入口,指定轮询算法’
     /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g    ‘指定真实服务器,dr模式’
     /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
     echo "ipvsadm starting ---- ------[ok]"
     ;;
stop)
   /sbin/ipvsadm -C      ‘清空缓存’
   systemctl stop ipvsadm      ‘关闭服务’
   ifconfig ens33:0 down     ‘关闭接口’
   route del $VIP      ‘删除路由信息’
   echo "ipvsamd stoped--------------[ok]"
   ;;                                                                                    
status)
     if [ ! -e /var/lock/subsys/ipvsadm ]; then      ‘判断文件存在与决定状态’
        echo "ipvsadm stoped----------------------"
        exit 1
     else
        echo "ipvsamd Runing------------[ok]"
     fi
   ;;
*)
  echo "Usage: $0 {start I stop I status }"
  exit 1
esac
exit 0

[root@lvs01 init.d]# chmod +x dr.sh      ‘给权限’,先不要执行脚本
(5)把网卡NAT模式改为仅主机模式,修改IP地址,重启网络
[root@lvs01 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

LVS 负载均衡 ---- DR模式_第5张图片
LVS 负载均衡 ---- DR模式_第6张图片
LVS 负载均衡 ---- DR模式_第7张图片

[root@lvs01 init.d]# service dr.sh start     ‘开启dr脚本’
  • 在web01 、web02 上配置

(配置基本相同,网页内容、IP地址需改动)

(1)修改主机名, 安装httpd
[root@localhost ~]# hostnamectl set-hostname web01
[root@localhost ~]# su
[root@web01 ~]# systemctl stop firewalld.service 
[root@web01 ~]# setenforce 0
[root@web01 ~]# yum install httpd -y
(2)添加网页内容,用于之后的验证
[root@web01 ~]# cd /var/www/html
[root@web01 html]# vim index.html
‘给web01添加1行网页内容’

this is kg web ‘给web02添加1行网页内容’

this is ac web

(3)设置回环地址,指定虚拟IP地址
[root@web01 html]# cd /etc/sysconfig/network-scripts/
[root@web01 network-scripts]# cp -p ifcfg-lo ifcfg-lo:0
[root@web01 network-scripts]# vim ifcfg-lo:0
‘删除原有内容,添加4行内容’
DEVICE=lo:0
IPADDR=192.168.100.10     ‘指定VIP’
NETMASK=255.255.255.0
ONBOOT=yes

(4)编写web 服务脚本
[root@web01 network-scripts]# cd /etc/init.d
[root@web01 init.d]# vim web.sh
#!/bin/bash
VIP=192.168.100.10
case "$1" in
     start)
        ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
        /sbin/route add -host $VIP dev lo:0
        echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
        sysctl -p >/dev/null 2>&1
        echo "RealServer Start OK"
        ;;
     stop)
        ifconfig lo:0 down
        route del $VIP /dev/null 2>&1
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
        echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
        echo "RealServer Stopd"
        ;;
      *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
exit 0

[root@web01 init.d]# scp /etc/init.d/web.sh [email protected]:/etc/init.d/      ‘把web.sh脚本远程复制到另一台web服务器上’‘省去给另一台web的配置’

到另一台web服务器中查看下:

(5)设置网卡为仅主机模式,修改IP地址
[root@web01 init.d]# vim /etc/sysconfig/network-scripts/ifcfg-ens33

LVS 负载均衡 ---- DR模式_第8张图片
LVS 负载均衡 ---- DR模式_第9张图片

[oot@web02 network-scripts]# service network restart    ‘开启网络’
[root@web02 network-scripts]# ifconfig     ‘查看地址’
(6)给权限 ,执行web.sh 脚本
root@web01 init.d]# cd /etc/init.d
[root@web01 init.d]# chmod +x web.sh      ‘给web.sh 权限’
[root@web01 init.d]# service web.sh start     ‘执行脚本’
(7)在两台web服务器浏览器上输入127.0.0.1 验证 ,apache搭建成功

LVS 负载均衡 ---- DR模式_第10张图片
LVS 负载均衡 ---- DR模式_第11张图片

(8)在客户端验证DR模式是否搭建成功,输入虚拟地址VIP
LVS 负载均衡 ---- DR模式_第12张图片

你可能感兴趣的:(LVS)