LVS-DR简单模型实现负载均衡

LVS-DR模型:基于直接路由的web服务
基本的原理:Director和RealServer必须在物理上有一个网卡通过局域网相连(高速交换机或者HUB),Director只负责调度请求,响应报文则由RealServer直接返回给Client。用户的IP为CIP,用户请求VIP,VIP被Director和RealServer共享,DIP是连接RealServer的IP地址,
由于RIP和VIP及DIP在同一个物理网段,在ARP广播每个RealServer都能收到,正常情况下都会回应,为了解决这个问题,设置Director的VIP对外可见,用于接收虚拟服务的请求报文,而每个Realserver的VIP配置在各自的No-ARP网络设备上,对外不可见。由Directory根据调度算法选择Realserver,将数据帧的MAC地址改为所选RS的MAC,再将修改后的数据帧在RS组所在的局域网内发送。因为数据帧的MAC是选出的RS,所以该RS肯定可以收到这个数据帧,而后根据本地路由表将数据包路由至本地回环设备,接着,监听于本地回环设备VIP上的服务则对进来的数据进行相应的处理,而后将处理结果回应至RIP,但数据包的原地址依然是VIP。最后该响应报文会根据路由表被直接返回给Client
LVS-DR简单模型实现负载均衡_第1张图片

注意:

  • 每个服务器的网卡是桥接的
  • RIP和DIP必须在同一个物理网段
  • RIP的网关一定不能指向DIP
  • DIP不能做端口映射
  • 若网页打不开,查看虚拟机的防火墙是否关闭

Director
DIP:eth0:10.33.1.129 VIP:eth0:0:10.33.1.120
这里写图片描述
这里写图片描述

arp_announce:定义将自己地址向外通告MAC-IP时的限制级别:
0:将本地任何接口上的任何地址向外通告
1:试图仅向目标网络通告与其网络匹配的地址
2:仅向与本地接口上地址匹配的网络进行通告

arp_ignore: 定义网卡在响应外部ARP请求时候的响应级别:
0 - (default): reply for any local target IP address, configured on any interface.
默认值,不管哪块网卡接收到了ARP请求,只要发现本机有这个MAC都给与响应
1 - reply only if the target IP address is local address configured on the incoming interface.
尽量避免响应ARP请求中MAC不是本网卡的,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就尽量避免响应
2 - reply only if the target IP address is local address configured on the incoming interface and both with the sender’s IP
总是选择匹配的网卡来响应,一个主机有多块网卡,其中一块网卡接收到了ARP请求,发现所请求的MAC是本机另一块网卡的,这个时候接收到ARP请求的这块网卡就一定不响应,只有发现请求的MAC是自己的才给与响应

在启用VIP之前设定RealServers上arp_ignore和arp_announce,否则,则需要在Director上清空arp表才能正常使用LVS

[root@wrapper ~]#vim /etc/sysctl.conf
[root@wrapper ~]# sysctl -p

这里写图片描述
也可以在每个Real Server执行以下命令
LVS-DR简单模型实现负载均衡_第2张图片
在Real Server本地lo接口的别名(lo:0)上配置一个不向外通告,也不响应ARP请求的VIP,同时要添加路由
RS1:eth0:10.33.1.117 lo:0:10.33.1.120
RS1:eth0:10.33.1.143 lo:0:10.33.1.120
LVS-DR简单模型实现负载均衡_第3张图片
LVS-DR简单模型实现负载均衡_第4张图片
物理机ping一下VIP,只有Director上的VIP响应
这里写图片描述
LVS-DR简单模型实现负载均衡_第5张图片
ipvsadm配置集群服务
语法:ipvsadm [options] -t|-u -f service-address [options]
定义一个集群服务:

ipvsadm -A|-E   -t|-u  -f service-address [-s scheduler]
-A         ##添加一个集群服务
-E         ##修改一个集群服务
-s         ##指定调度用的算法
-t|-u      ##service-address为VIP:port
-f         ##service-address为防火墙标记

向集群服务中添加RS:

ipvsadm -a|e -t|u|f service-address -r server-address [options]
-a                     ##添加一个RS
-e                     ##修改一个RS
-service-address       ##已定义过的集群服务
-r                     ##指定RS地址
-w|weight              ##指定该real server的权重,这个设为0表示禁用该realserver。

指定LVS的类型:

-g|--gatewaying      ##direct routing(DR模型,默认选项)
-m|--masquerading    ##masquerading(NAT模型)
-i|--ipip            ##ipip encapsulation(tun类型)

scheduler(LVS算法)
ipvs在调度时所使用的算法,添加集群服务时通过“-s”指定(这个由内核中的ipvs代码提供)
静态方法:仅根据算法本身进行调度,不考虑后端服务器的负载
rr # round robin,轮询
wrr # weighted round robin, 加权轮询(根据添加RS时指定的权重进行调度,权重越大调度的次数越多)
sh # source hashing,表示来源于同一个CIP的请求将始终被定向至同一个RS(SESSION保持)
dh # destination hashing,只要访问同一个地址,就调度到同一个real server
动态方法:根据算法及各RS当前的负载状况进行调度
lc # least connection,调度给当前连接数最少的RS
Overhead=Active*256+Inactive # Active:活动状态连接数,Inactive:非活动状态连数,调度时Director选择Overhead值最小的RS
wlc # weighted lc #默认使用这种算法,更容易保证调度公平
Overhead=(Active*256+Inactive)/weight #weight:权重
sed # shortest expection delay
Overhead=(Active+1)*256/weight
nq # Never Queue #现将请求分配给所有的空闲服务器,没有空闲的服务器了之后,再根据sed算法进行调度
lblc # Locality-Based Least Connection #主要用于cache集群系统,动态的DH,很少用到
lblcr # lblc with Replication #带复制功能的lblc

在Direcor上添加集群服务
这里写图片描述
访问测试
LVS-DR简单模型实现负载均衡_第6张图片
LVS-DR简单模型实现负载均衡_第7张图片
查看调度状况
LVS-DR简单模型实现负载均衡_第8张图片

你可能感兴趣的:(Cluster)