DR模型
-
1 .RS 中必须包含VIP,并且VIP隐藏。链路层传输的数据包(CIP->VIP)外层包裹RS的MAC地址(同一局域网),RS接收数据包,直接响应客户端。
-
2.隐藏VIP:对外隐藏,对内可见。
/proc/sys/net/ipv4/config/* IF */
-
3.LVS调度算法
-
a.静态调度
- rr(Round Robin):轮询调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度。 - wrr(Weight):加权,(以权重之间的值实现各个主机之间的调度)
由于每台服务器的配置、安装的业务应用不同,其处理能力不一样,所以,根据不同服务器的处理能力,给每个服务器分配不同的权值,接收权值能力范围的处理请求。 - sh(Source Hashing):源地址散列,会话绑定,保留建立连接的session信息
源地址散列,根据请求的IP地址负载,作为散列的(hash key)从静态列表找到对应的服务器,若服务器没有超过负荷,将请求发送到该服务器,否则返回空。 - dh(Destination Hashing):目标地址散列,把同一个IP请求,发给同一个server
目标地址散列,针对把目标地址IP负载,通过目标地址hash找到对应的服务器,若服务器没有超过负荷,将请求发送到服务器,否则返回空。
- rr(Round Robin):轮询调度
-
b.动态调度
- lc(Least Connection):最少连接
把新的连接分配到连接数最少的服务器,最少连接是一种动态调度算法,它通过当前服务器活跃的最小连接数来估计服务器的负载均衡,调度器需要记录各个服务器已建立的连接数量,当请求被负载到某台服务器,其连接数加1,连接中止或超时,连接数减1。
系统实现时,当前服务器的权重值为0时,当前服务器不可用,不会被调度。
简单算法:active*256+inactive(谁的小,挑谁) - wlc(Weight Least-Connection):加权最少连接
加权最少连接是最少连接调度的超集,各个服务相应的权值表示其处理能力,服务器的缺省权值为1,系统管理员可以设置权值,加权最少连接尽可能使服务器建立的连接与其权值匹配。
简单算法:(active*256+inactive)/weight (谁的小,挑谁) - sed(Shortest Expected Delay):最短期望延迟
基于wlc算法。 简单算法:(active+1)*256/weight - nq(Never Queue):永不排队
无需队列,如果有台realserver的连接数=0直接分配过去,不需要sed。 - lblc(Locality-Based Least Connection):局部最少连接
基于局部的最少连接调度(Locality-Based Least Connections 简称’LBLC’)算法是针对请求报文的目标IP地址的 负载均衡调度,目前主要用于Cache集群系统,因为在Cache集群客户请求报文的目标IP地址是变化的。这里假设任何后端服务器都可以处理任一请求,算法的设计目标是在服务器的负载基本平衡情况下,将相同目标IP地址的请求调度到同一台服务器,来提高各台服务器的访问局部性和Cache命中率,从而提升整个集群系统的处理能力。
LBLC调度算法先根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则使用’最少连接’的原则选出一个可用的服务器,将请求发送到服务器。 - lblcr(Locality-Based Least Connection withReplication):可复制局部最少连接
带复制的基于局部性的最少连接(Locality-Based Least Connections with Replication 简称’LBLCR’)算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统,它与LBLC算法不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。按’最小连接’原则从该服务器组中选出一一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按’最小连接’原则从整个集群中选出一台服务器,将该服务器加入到这个服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。
- lc(Least Connection):最少连接
-
-
4.图解
-
5.实战
-
1.node01/02/03 ifconfig 检查配置网络层
-
2.node01节点VIP配置
ifconfig eht0:8 192.168.150.100/24 ( /24等于255.255.255.0, 一个字节8个2进制位的1)
ifconfig eht0:8 down
-
3.node02/03修改arp协议,防止VIP被通告
cd /proc/sys/net/ipv4/conf/
cd eth0
修改arp_ignore和arp_announce的默认值,不允许使用vi命令修改文件,不能保存,报错。
echo 1 > arp_ignore
echo 2 > arp_announce
这里只是修改了eth0接口的arp协议,去all目录下修改全部接口。
-
4.node02/03 设置隐藏VIP配置
ifconfig lo:2 192.168.150.100 netmask 255.255.255.255
/32 掩码需要与IP要做按位与(&)计算,生成路由条目。如果是/24,可以从LO接口访问192.168.150.100;这样eht0与掩码做&运算得到192.168.150.0并且与LO计算后一样。
ping 192.168.150.20 就可以有两个选择,对于内核来讲回环接口会优先使用,发送给LO,这样永远发不出去,所以掩码/32,规避死循环。 -
5.node02/03 安装httpd server
yum install httpd -y
service httpd start
vi /var/www/html/index.html
from 192.168.150.1x
-
6.node01 安装ipvsadm
yum install ipvsadm -y
ipvsadm -A -t 192.168.100.80 -s rr 配置入口规则,轮询调度
-t:TCP协议
-u:UDP协议
service-address:ip:port
-f:FWM 防火墙标记
-E:修改
-D:删除 -D -t|u|f server-address
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w 1
ipvsadm -ln
-r server-address:RS的地址,IP:PORT
-g:DR
-i:TUN
-m:NAT
-w:权重
-e:修改
-d:删除
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w 1
-
-
6.验证
浏览器访问 192.168.150.100 F5 刷新
node01验证
netstat -natp
没有192.168.150.100:80 socket的连接
ipvsadm -lnc 查看偷窥记录
node01转发到192.168.150.12/13的数据包
FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题
(如果node02 downd掉,如果负载到12机器,发送了握手的包,12没有发送确认的包,卡在SYN-RECV)
node02验证
接收192.168.150.100:80 socket的连接