LVS负载均衡-DR模式

一、简介

1、理论已经在上一篇博客简述,不了解得可以看看 https://www.cnblogs.com/zhangxingeng/p/10497279.html 

2、LVS-DR优缺点   #参考博客:https://www.cnblogs.com/zhangxingeng/p/10573695.html

关于这种模式:

      1)确保前端路由器将目标ip为vip的请求报文发往director
        a、在前端网关做静态绑定;
        b、在RS上使用arptables;
        c、在RS上修改内核参数以限制arp通告即应答级别;
          arp_announce
          arp_ignore
      2)、RS的RIP可以使用私网或公网地址;
      3)、RS跟director在同一物理网络;
      4)、请求报文经由director,响应报文直接发往client;
      5)、此模式不支持端口映射;
      6)、RS支持大多数的OS;
      7)、RIP的网关不能指向DIP,以确保响应报文不经由director;
LVS_DR模式介绍      

缺点:LVS调度器及应用服务器在同一个网段中,因此不能实现集群的跨网段应用。
优点:直接路由转发,通过修改请求报文的目标mac地址进行转发,效率提升明显。

3、实验拓扑

LVS相关术语
1. DS:Director Server。指的是前端负载均衡器节点(eg:lvs调度节点)。
2. RS:Real Server。后端真实的工作服务器(eg:web01,web02)。
3. VIP:向外部直接面向用户请求,作为用户请求的目标的IP地址(lvs调度节点 和 web节点都要配置)。
4. DIP:Director Server IP,主要用于和内部主机通讯的IP地址。
5. RIP:Real Server IP,后端服务器的IP地址。
6. CIP:Client IP,访问客户端的IP地址。

 

实验说明:测试环境为服务器,准备三台即可,这里是4台外加本机物理机

节点 ip 应用 ip2 备注
director 10.192.27.100(DIP) director VIP:em1:0,10.192.27.115  
web01 10.192.27.111(RIP) rs VIP:Lo:0,10.192.27.115  
web02 10.192.27.112(RIP) rs VIP:Lo:0,10.192.27.115  
本网段测试 10.192.27.80 client   curl
本地电脑测试 公网 client   web访问

    

二、开始部署

1、网络配置

修改服务器网卡rip、vip、dip都在同一个网段 

director一块网卡即可,后续配置添加vip使用别名即可,配置后的结果

[root@director init.d]# ifconfig 
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.192.27.100  netmask 255.255.255.128  broadcast 10.192.27.127   #真实IP
        inet6 fe80::e5e0:cff7:59dd:c73b  prefixlen 64  scopeid 0x20<link>
        ether 18:66:da:fb:2f:54  txqueuelen 1000  (Ethernet)
        RX packets 80016444  bytes 82807230821 (77.1 GiB)
        RX errors 0  dropped 1  overruns 0  frame 0
        TX packets 70362807  bytes 78200418969 (72.8 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 81  

em1:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.192.27.115  netmask 255.255.255.0  broadcast 10.192.27.255  #虚拟VIP
        ether 18:66:da:fb:2f:54  txqueuelen 1000  (Ethernet)
        device interrupt 81   

rs也是一块网卡,后续vip配置在lo:0上即可但是需要先修改arp_ignore,arp_announce才能添加lo:0  ,配置后的结果

[root@web01 init.d]# ifconfig 
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.192.27.111  netmask 255.255.255.128  broadcast 10.192.27.127
        inet6 fe80::8c08:2f2:e6bb:2ab7  prefixlen 64  scopeid 0x20<link>
        ether 18:66:da:fa:e7:b8  txqueuelen 1000  (Ethernet)
        RX packets 15683  bytes 1735880 (1.6 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1309  bytes 241153 (235.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 10.192.27.115  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)
[root@web02 init.d]# ifconfig 
em1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.192.27.112  netmask 255.255.255.128  broadcast 10.192.27.127
        inet6 fe80::57e9:b44b:71ec:7082  prefixlen 64  scopeid 0x20<link>
        ether 18:66:da:fb:07:88  txqueuelen 1000  (Ethernet)
        RX packets 24486138  bytes 2167932635 (2.0 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17143136  bytes 1412413427 (1.3 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 81  
lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 10.192.27.115  netmask 255.255.255.255
        loop  txqueuelen 1000  (Local Loopback)

2、三台服务器关闭防火墙   

systemctl stop firewalld
systemctl disable firewalld
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config 

3、安装软件

10.192.27.100上 安装ipvsadm     
#yum install ipvsadm -y 
10.192.27.111、112安装httpd
#yum install httpd -y

4、配置web01 web02

注意:arp_ignore 改为1的意义是,响应报文,请求报文从哪个地址进来的,就只能这个接口地址响应
       arp_announce 改为2的意义是,通知,不通告不同网段

 配置RealServer,两台配置一样,新建文件 /etc/init.d/lvs_rs.sh 并赋予执行权限  #可设置开机自启
[root@web01 init.d]# cat lvs_dr.sh 
#!/bin/sh

VIP=10.192.27.115
. /etc/init.d/functions
case "$1" in
    start)
        echo "Start LVS of RealServer"
        /sbin/ifconfig lo:0 $VIP broadcast $VIP netmask 255.255.255.255 up
        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
        ;;
    stop)
        /sbin/ifconfig lo:0 down
        echo "Stop LVS of RealServer"
        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 "Usage:$0{start|stop}"
        exit 1
    ;;
esac
# /etc/init.d/lvs_rs.sh start 

   

5、配置director

 lvs-dr模式不需要开启地址转发,ip_forward功能,因为director发给rs的数据包是修改过的包,不是原包,不经过ip_forward转发,而是经过修改后的mac根据l路由决策直接路由到rip

配置DirectServer,创建文件 /etc/init.d/lvs_vsadm.sh, 并赋予执行权限
[root@director init.d]# cat lvs_vsadm.sh 
#!/bin/sh
 
VIP=10.192.27.115
RIP1=10.192.27.111
RIP2=10.192.27.112
. /etc/init.d/functions

case "$1" in
start)
    echo "start LVS of DirectorServer"
  #set the Virtual IP Address
    ifconfig em1:0 $VIP/24
   #/sbin/route add -host $VIP dev em1:0
   #Clear IPVS table
    /sbin/ipvsadm -C
  #set LVS
    /sbin/ipvsadm -A -t $VIP:80 -s rr
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g
    /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g
  #Run LVS
    /sbin/ipvsadm
  #end
    ;;
stop)
    echo "close LVS Directorserver"
    /sbin/ipvsadm -C
    ;;
*)
    echo "Usage: $0 {start|stop}"
    exit 1
    ;;
esac
[root@localhost init.d]#      
启动lvsadm服务:#可设置开机自启
[root@director init.d]# ./lvs_vsadm.sh start
start LVS of DirectorServer
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  localhost.localdomain:http rr
  -> 10.192.27.111:http           Route   1      0          0         
  -> 10.192.27.112:http           Route   1      0          0    

检查网络信息   

查看配置规则  
[root@director init.d]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.192.27.115:80 rr
  -> 10.192.27.111:80             Route   1      0          0         
  -> 10.192.27.112:80             Route   1      0          0         
[root@director init.d]#
由于LVS(IPVS)是工作在内核空间的,因此要在用户空间对其进行配置和管理就要用到ipvsadm,ipvsadm是LVS在用户空间的管理命令。https://www.cnblogs.com/fansik/p/5830927.html

一般在安装linux(CentOS6.5)时该命令是为安装的所以在使用前要先安装该命令:yum -y install ipvsadm

ipvs和iptables最好不要同时使用,所以在定义ipvs前最好要先清空iptables的规则,至少要清空filter

# iptables -F -t filter
# /etc/init.d/iptables save

ipvsadm的语法:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
               [-p [timeout]] [-M netmask]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address
               [-g|i|m] [-w weight] [-x upper] [-y lower]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
ipvsadm --set tcp tcpfin udp
ipvsadm --start-daemon state [--mcast-interface interface]
               [--syncid syncid]
ipvsadm --stop-daemon state
ipvsadm -h

ipvsadm命令的使用方法:
1、集群服务相关
-A:添加一个集群服务
   -t:tcp
   -u:udp
   -f:firewall-mark,通常用于将两个或以上的服务绑定为一个服务进行处理是使用,integer类型
   service-address:
      -t:ip:port
      -u:ip:port
      -f:firewall-mark

   -s:调度算法,默认为wlc
   -p:timout:persistent connection,持久连接
-E:修改定义过的集群服务
-D:-t|-u|-f service-address:删除指定得集群服务

2、RS(Real Server)相关
-a:向指定得CS(Cluster Service)中添加RS(Real Server)
   -t|-u|-f service-address:指明将RS添加至哪个Cluster Service中
   -r:指定RS(Real Server),可包含{IP[:port]},只有支持端口映射的LVS类型才允许此处使用跟集群服务中不同的端口
   LVS类型:
      -g:Gateway,DR(默认使用的类型)
      -i:ipip,TUN
      -m:masquerade(地址伪装),NAT
   指定RS(Real Server)权重:
      -w 取值范围0-65535
-e:修改指定的RS属性
-d:-t|-u|-f service-address -r server-address:从指定得集群服务中删除某RS

3、清空所有的集群服务:
-C

4、保存规则:(使用输出重定向)
ipvsadm-save
ipvsadm -S

5、载入指定的规则:(使用输入重定向)
ipvsadm-restore
ipvsadm -R

6、查看ipvsadm规则
ipvsadm -L [options]
-n:数字格式显示IP地址
-c:显示连接数相关信息
--stats:显示统计数据
--rate:速率
--exact:显示统计数据的精确值

7、计数器清零
-Z
ipvsadm命令使用方法

6、测试结果

 

[root@client ~]# curl 10.192.27.115
welcom to web1
[root@client ~]# curl 10.192.27.115
welcom to web2
[root@client ~]# curl 10.192.27.115
welcom to web1
[root@client ~]# curl 10.192.27.115
welcom to web2
#统计信息
[root@director init.d]#  ipvsadm -ln --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port               Conns   InPkts  OutPkts  InBytes OutBytes
  -> RemoteAddress:Port
TCP  10.192.27.115:80                    6      101        0    19177        0
  -> 10.192.27.111:80                    3       55        0     9473        0
  -> 10.192.27.112:80                    3       46        0     9704        0
 
 #连接条目

[root@director init.d]# ipvsadm -lnc
IPVS connection entries
pro expire state source virtual destination
TCP 01:54 FIN_WAIT 10.192.33.40:56584 10.192.27.115:80 10.192.27.112:80
TCP 01:54 FIN_WAIT 10.192.33.40:56583 10.192.27.115:80 10.192.27.111:80
[root@localhost init.d]#

原文地址:https://www.cnblogs.com/linux985/p/11791223.html