Centos7搭建LVS-DR

LVS-DR
DR模式是通过改写请求报文的目标MAC地址,将请求发给真实服务器的,而真实服务器响应后的处理结果直接返回给客户端用户。同TUN模式一样,DR模式可以极大的提高集群系统的伸缩性。而且DR模式没有IP隧道的开销,对集群中的真实服务器也没有必要必须支持IP隧道协议的要求。但是要求度器LB与真实服务器RS都有一块网卡连接到同一物理网段上,必须在同一个局域网环境。DR模式是互联网使用比较多的一种模式。
 
LVS-DR原理图
 
DR模式特点:
1、各RIP 必须与 DIP 在同一个网络中(相同的广播域);
2、RS 的 RIP 可以使用私有地址,也可以使用公网地址,以方便配置;不支持支持端口映射;
3、RS可以使用必须为uninx操作系统(OS);且RS需要仰制arp,需要在loopback配置vip;
4、Director 仅负责处理入站请求,响应报文由 Realserver 直接发往客户端;Realserver 不能将网关指向 DIP,而直接使用前端网关响应请求报文;
 
 
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为 超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-DR方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个 Virtual Server能达到1G的吞吐量。甚至更高;
 
不足:但是,这种方式需要所有的DIR和RIP都在同一广播域;不支持异地容灾。
 
总结:LVS-DR是三种模式中性能最高的一种模式,比LVS-NAT模式下负载的RS serve更多,通常在100台左右,对网络环境要求更高,也是日常应用的最多的一种工作模式。
 
 
ipvsadm选项参数
-A     添加虚拟服务器
-t     设置群集地址(VIP,Virtual IP)
-s     用来指定负载调度算法——rr(轮询)、wrr(加权轮询)、lc(最少连接)、wlc(加权最少连接)
-a     添加真实服务器
-d     删除真实服务器
-r      指定真实服务器(Real Server)的地址
-m     使用NAT模式
-g     指定此LVS的工作模式为-g
-i      使用TUN模式
-w    为节点服务器设置权重,默认为1
 
负载均衡调度算法
   1)RR   轮询
Round Robin :新的连接请求被轮流分配至各RealServer,优点是该算法无需记录当前所有连接的状态,效率高;但缺点是在RealServer当中如果有性能不均等的情况下,性能差的主机将负载比较大。该算法容易倒致服务器之间负载不均衡;
 
   2)WRR  加权轮询
Weighted RR :优点与RR一样,无需记录所有连接状态;通过设定一定的权重值来分配连接请求;
 
   3)SH   源地址哈希
Source Hashing :通过一个散列函数将去往同一个目的IP的请求映射到一台服务器或链路上。  
 
   4)DH   目标地址哈希
Destination Hashing : 通过一个散列函数将来自同一个源IP的请求映射到一台服务器或链路上
 
   5)LC   最少连接数
Least Connection :根据当前各服务器的连接数来估计服务器的负载情况,把新的连接分配给连接数最小的服务器;负载率=active*256+inactive,值小的优先分配请求;
 
   6)WLC   加权最少连接数
Weighted LC :与LC类似,根据当前各服务器的连接数来估计服务器的负载情况,把新的连接分配给连接数最小的服务器;负载率=(active*256+inactive)/weight,值小的优先分配请求;  
 
   7)SED  最短期望延迟
Shortest Expect Delay : 这个算法主要是优化LC的,在服务均在请求少的时候避免负载到一台服务器上做的优化;负载率=(active+1)*256/weight,值小的优先分配请求;
 
   8)NQ   永不排队
Nerver Queue :在负载低时,请求直接分配到空闲服务器上,不会产生请求等待;当服务器都很忙时,将轮询;
 
   9)LBLC  基于本地最少连接
Locality-Based Least Connection:根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
 
   10)LBLCR  带复制的基于本地最少连接
Replicated and Locality-BasedLeast Connection :该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器
 
 
LVS-DR环境搭建介绍
 
客户机一台                IP:10.10.10.168
LVS负载调度器          ens33:10.10.10.12    虚拟网卡ens33:0  :10.10.10.100
真实服务器1              ens33:10.10.10.13    虚拟网卡lo:0         :10.10.10.100
真实服务器2              ens33:10.10.10.14    虚拟网卡lo:0         :10.10.10.100
 
负载均衡调度器
1、关闭网卡守护进程
systemctl stop NetworkManager
systemctl disable NetworkManager
 
2、开户子接口
[root@LVS2 ~]# cd /etc/sysconfig/network-scripts/
[root@LVS2 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@LVS2 network-scripts]# vim ifcfg-lo:0
   DEVICE=lo:0
   IPADDR=10.10.10.100
   NETMASK=255.255.255.255
   NETWORK=127.0.0.0
   # If you're having problems with gated making 127.0.0.0/8 a martian,
   # you can change this to something else (255.255.255.255, for example)
   BROADCAST=127.255.255.255
   ONBOOT=yes
   NAME=loopback
 
3、启用子接口
[root@WEB1 network-scripts]# ifup ifcfg-lo:0
 
4、修改内核参数
[root@LVS2 ~]# vim /etc/sysctl.conf
   # LVS-DR 网卡重定向
   net.ipv4.conf.all.send_redirects = 0   #禁止转发重定向报文
   net.ipv4.conf.default.send_redirects = 0
   net.ipv4.conf.lo.send_redirects = 0
 
[root@LVS2 ~]# sysctl -p
sysctl: setting key "net.ipv4.conf.all.send_redirects": Invalid argument
net.ipv4.conf.all.send_redirects = 0   #禁止转发重定向报文
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
 
5、安装ipvsadm管理工具
[root@LVS2 ~]# yum -y install ipvsadm
[root@LVS2 ~]# ipvsadm -v        #查看ipvsadm版本信息
ipvsadm v1.27 2008/5/15 (compiled with popt and IPVS v1.2.1)
 
6、配置集群
[root@LVS2 ~]# ipvsadm -A -t 10.10.10.100:80 -s wrr
[root@LVS2 ~]# ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.14 -g -w 1
[root@LVS2 ~]# ipvsadm -a -t 10.10.10.100:80 -r 10.10.10.13 -g -w 2
[root@LVS2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
 -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  10.10.10.100:80 wrr
 -> 10.10.10.13:80               Route   2      0          0         
 -> 10.10.10.14:80               Route   1      0          0
 
7、保存ipvsadm文件
[root@LVS2 ~]# ipvsadm -Sn > /etc/sysconfig/ipvsadm
[root@LVS2 ~]# ipvsadm -C    #清除集群规则
[root@LVS2 ~]# ipvsadm-restore < /etc/sysconfig/ipvsadm    #重新加载集群规则
 
8、开机自动加载集群规则
[root@LVS2 ~]# echo "ipvsadm-restore < /etc/sysconfig/ipvsadm" >> /etc/rc.local
[root@LVS2 ~]# chmod +x /etc/rc.d/rc.local
 
[root@LVS2 ~]# tcp -nn  port 80    tcp抓包
 
真实服务器1
1、关闭网卡守护进程
systemctl stop NetworkManager
systemctl disable NetworkManager
 
2、配置回环子接口
[root@WEB1 ~]# cd /etc/sysconfig/network-scripts/
[root@WEB1 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@WEB1 network-scripts]# vim ifcfg-lo:0
   DEVICE=lo:0
   IPADDR=10.10.10.100
   NETMASK=255.255.255.255
   NETWORK=127.0.0.0
   # If you're having problems with gated making 127.0.0.0/8 a martian,
   # you can change this to something else (255.255.255.255, for example)
   BROADCAST=127.255.255.255
   ONBOOT=yes
   NAME=loopback
 
[root@WEB1 network-scripts]# ifup ifcfg-lo:0
[root@WEB1 network-scripts]# ifconfig
   ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.10.10.13  netmask 255.255.255.0  broadcast 10.10.10.255
       inet6 fe80::a2d:9ece:c698:b051  prefixlen 64  scopeid 0x20<link>
       
   lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 10.10.10.100  netmask 255.255.255.255
       loop  txqueuelen 1  (Local Loopback)
 
3、修改内核参数
[root@WEB1 ~]# vim /etc/sysctl.conf
   #LVS-DR ARP通信行为控制
   net.ipv4.conf.all.arp_ignore = 1
   net.ipv4.conf.all.arp_announce = 2
   net.ipv4.conf.default.arp_ignore = 1
   net.ipv4.conf.default.arp_announce = 2
   net.ipv4.conf.lo.arp_ignore = 1
   net.ipv4.conf.lo.arp_announce = 2
 
[root@WEB1 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 
4、添加路由
[root@WEB1 ~]# route add -host 10.10.10.100 dev lo:0
[root@WEB2 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.10.10.1      0.0.0.0         UG    0      0        0 ens33
10.10.10.0      0.0.0.0         255.255.255.0   U     0      0        0 ens33
10.10.10.100    0.0.0.0         255.255.255.255 UH    0      0        0 lo
 
5、将路由添加到开机自启动
[root@WEB1 ~]# echo "lvs-dr路由记录" >> /etc/rc.local
[root@WEB1 ~]# echo "route add -host 10.10.10.100 dev lo:0" >> /etc/rc.local
 
6、启用httpd服务
[root@WEB1 ~]# yum -y install httpd
[root@WEB1 ~]# echo "This is RS1" >> /var/www/html/index.html
[root@WEB1 ~]# systemctl start httpd
[root@WEB1 ~]# systemctl disable httpd
[root@WEB1 ~]# curl 127.0.0.1
This is RS1
 
 
真实服务器2
1、关闭网卡守护进程
systemctl stop NetworkManager
systemctl disable NetworkManager
 
2、配置回环子接口
[root@WEB2 ~]# cd /etc/sysconfig/network-scripts/
[root@WEB2 network-scripts]# cp -a ifcfg-lo ifcfg-lo:0
[root@WEB2 network-scripts]# vim ifcfg-lo:0
   DEVICE=lo:0
   IPADDR=10.10.10.100
   NETMASK=255.255.255.255
   NETWORK=127.0.0.0
   # If you're having problems with gated making 127.0.0.0/8 a martian,
   # you can change this to something else (255.255.255.255, for example)
   BROADCAST=127.255.255.255
   ONBOOT=yes
   NAME=loopback
 
[root@WEB2 network-scripts]# ifup ifcfg-lo:0
[root@WEB2 network-scripts]# ifconfig
   ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
       inet 10.10.10.14  netmask 255.255.255.0  broadcast 10.10.10.255
       inet6 fe80::a2d:9ece:c698:b051  prefixlen 64  scopeid 0x20<link>
       
   lo:0: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
       inet 10.10.10.100  netmask 255.255.255.255
       loop  txqueuelen 1  (Local Loopback)
 
3、修改内核参数
[root@WEB2 ~]# vim /etc/sysctl.conf
   #LVS-DR ARP通信行为控制
   net.ipv4.conf.all.arp_ignore = 1
   net.ipv4.conf.all.arp_announce = 2
   net.ipv4.conf.default.arp_ignore = 1
   net.ipv4.conf.default.arp_announce = 2
   net.ipv4.conf.lo.arp_ignore = 1
   net.ipv4.conf.lo.arp_announce = 2
 
[root@WEB2 ~]# sysctl -p
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
 
4、添加路由
[root@WEB2 ~]# route add -host 10.10.10.100 dev lo:0
 
5、将路由添加到开机自启动
[root@WEB2 ~]# echo "lvs-dr路由记录" >> /etc/rc.local
[root@WEB2 ~]# echo "route add -host 10.10.10.100 dev lo:0" >> /etc/rc.local
 
6、启用httpd服务
[root@WEB2 ~]# yum -y install httpd
[root@WEB2 ~]# echo "This is RS2" >> /var/www/html/index.html
[root@WEB2 ~]# systemctl start httpd
[root@WEB2 ~]# systemctl disable httpd
[root@WEB2 ~]# curl 127.0.0.1
This is RS2
 
测试:
[root@LVS1 ~]# curl 10.10.10.100
This is RS1
[root@LVS1 ~]# clear
[root@LVS1 ~]# curl 10.10.10.100
This is RS1
[root@LVS1 ~]# curl 10.10.10.100
This is RS2
[root@LVS1 ~]# curl 10.10.10.100
This is RS1
[root@LVS1 ~]# curl 10.10.10.100
This is RS1
[root@LVS1 ~]# curl 10.10.10.100
This is RS2
 
 
 
 
 
 
 
 
posted @ 2020-03-24 23:53  向云而生(陈云)  阅读(400)  评论(0编辑  收藏  举报