LVS负载均衡机制之LVS-DR模式工作原理以及简单配置

本博文主要简单介绍一下LVS负载均衡集群的一个基本负载均衡机制:LVS-DR;如有汇总不当之处,请各位在评论中多多指出。


LVS-DR原理:

  LVS的英文全称是Linux Virtual Server,即Linux虚拟服务器。它是我们国家的章文嵩博士的一个开源项目。在linux内存2.6中,它已经成为内核的一部分,在此之前的内核版本则需要重新编译内核。我们都知道LVS有LVS-DR,LVS-NAT,LVS-TUN三种模式,其中DR模式意为Direct Routing(直接路由),是调度器与实际服务器都有一块网卡连在同一物理网段上的情况。

  而LVS-DR的工作原理就是:通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址,源IP/PORT,以及目标IP/PORT均保持不变


LVS-DR:直接路由的特点

   Director和各RS上都配置使用VIP

     (1)确保前端路由将目标IP为VIP的请求报文发往Director

        (a)在前端网关做静态绑定

        (b)在RS上使用arptables

        (c)在RS上修改内核参数以限制ARP通告和应答级别

           arp_announce

           arp-ignore

     (2)RS的RIP可以使用私网地址,也可以是公网地址,RIP与DIP在同一IP网络,RIP的网关不能指向DIP,以确保响应报文不会经由Director

     (3)RS跟Director要在同一个物理网络

     (4)请求报文要经由Director,但响应不能经由Director,而是由RS直接发往Client

     (5)不支持端口映射




LVS-DR部署简单步骤介绍:

下图为LVS-DR的拓扑配置图:

lvs-dr.png



1.服务器IP分配:

  IP分配.png

2.在RS服务器端安装nginx,并配置好RS的测试页面文件(test.html)

  ~]#yum install -y nginx 

  ~]#vim /usr/share/nginx/html/test.html


  RS1设置:

 ~]# cat /usr/share/nginx/html/test.html 

 <h1>RS1-192.168.73.142</h1>

  RS2设置:

~]# cat /usr/share/nginx/html/test.html 

 <h1>RS2-192.168.73.143</h1>



注意:RS1与RS2配置步骤一致,但在配置测试页面文件时,为了显示测试效果,会显示实际RS的hostname以及对于IP地址


3.配置RS1网卡的VIP,添加本地route限定并修改arp_announce和arp_ignore的设置

  ~]#ifconfig lo:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up

  ~]#route add -host 192.168.73.160 dev lo:0

  ~]#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

  ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

  ~]#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

  ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce


注:配置RS2服务器,步骤跟RS1配置一致即可


4.在Director安装ipvsadm,并配置网卡设置,添加ipvsadm规则

  ~]#yum install -y ipvsadm

  ~]#ifconfig ens33:0 192.168.73.160 netmask 255.255.255.255 broadcast 192.168.73.160 up

  ~]#route add -host 192.168.73.160 dev ens33:0


  ~]# ipvsadm -At 192.168.73.160 -s rr

  Zero port specified for non-persistent service

  ~]# ipvsadm -At 192.168.73.160:80 -s rr

  ~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.142 -g 

  ~]# ipvsadm -a -t 192.168.73.160:80 -r 192.168.73.143 -g 

  ~]# 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.73.160:80 rr

    -> 192.168.73.142:80            Route   1      0          0         

    -> 192.168.73.143:80            Route   1      0          0 


5.启动各服务器的nginx服务,同时为了简便,关闭所有服务器的firewalld

  ~]#systemctl start nginx

  ~]#systemctl stop firewalld

  ~]#setenforce 0  


6.在客户端测试访问,http://192.168.73.160/test.html

test.png

test1.png

test2.png






注意:LVS-DR模式其实可以通过脚本来直接实现,下面为各服务器的简单脚本,建议为了熟悉配置,前期还是自己手动设置比较好,

此脚本较简单,请大神勿喷!


#!/bin/bash

#lvs-dr模式部署脚本


vip=192.168.73.160

mask=255.255.255.255

iface='lo:0'


case $1 in


start)

   ifconfig $iface $vip netmask $mask broadcast $vip up

   route add -host $vip dev $iface

   echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

   echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

   echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

   ;;


stop)

   ifconfig $iface down


   echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore

   echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore

   echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce

   echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce

   ;;


*)

   echo "Usage:$(basename $0) start|stop"

   exit 2

   ;;


esac













猜你喜欢

转载自blog.51cto.com/12068974/2381352