LVS负载均衡服务器搭建(详细)
⼀、LVS概述
1.LVS:Linux Virtual Server
四层交换(路由):根据请求报⽂的⽬标IP和⽬标PORT将其转发⾄后端主机集群中的某台服务器(根据调度算法); 不能够实现应⽤层的负载均衡
lvs(⼜称ipvs),基于内核中的防⽕墙netfilter实现
2.lvs集群术语:
vs:Virtual Server虚拟服务,可称为Director、Dispatcher分发器、Balancer负载均衡器
rs画框里的女人
:Real Server真实服务器
CIP:Client IP客户端IP
VIP:Director Virtual IP等同于FIP(流动IP),负载均衡器虚拟IP
DIP:Director IP调度IP(第⼆张⽹卡IP地址)
RIP:Real Server IP真实服务器IP
3.LVS:ipvsadm/ipvs
(1)ipvsadm: CLI⼯具
⽤户空间的命令⾏⼯具,⽤于管理集群服务及集群服务上的RS等;# yum install -y ipvsadm
(2)ipvs:内核存在(CentOS默认⽀持)
⼯作于内核上的netfilterINPUT钩⼦之上的程序代码;其集群功能依赖于ipvsadm定义的集群服务器规则; ⽀持基于TCP、UDP、SCTP、AH、EST、AH_EST等协议的众多服务;
4.负载均衡集群中设计时的要点:
(1)ssion保持
ssion sticky (iphash):IP地址绑定,来源IP记录在ip hash表作统⼀调度
ssion cluster(multicast/broadcast/unicast):⼴播集群同步(复制)ssion,只适⽤于⼩规模场景
ssion rver ():ssion服务器
(2)数据共享(提供⼀致性存储)
1) 共享存储;
NAS:Network Attached Storage (⽂件级别),⽹络附加存储,⽂件服务器
SAN:Storage Area Network (块级别),存储区域⽹络
DS:Distributed Storage,分布式春初
2) 数据同步:rsync … ...
1.lvs-nat:地址伪装模型
多⽬标的DNAT:通过将请求报⽂的⽬标地址和⽬标端⼝修改为挑选出某RS的RIP和PORT来实现;
客户端主机发起请求报⽂CIP指向VIP,通过内核的核⼼⽹卡间转发功能,VIP会将请求交给DIP进⾏调度,DIP根据设定的算法进⾏负载均衡给后端的RS主机的RIP,在这个过程中DIP调度功能会将⽬标IP地址重写为RIP。请求和返回请求读要调度DIP来进⾏转换操作。
(1)RIP和DIP应该使⽤私⽹地址,RS的⽹状应该指向DIP;
(2)请求和响应报⽂都要经由director转发;极⾼负载的场景中,Director可能会成为系统瓶颈(响应报⽂⼤);
(3) ⽀持端⼝映射(转发);
(4) VS必须为Linux,RS可以为任意操作系统;
(5)RS的RIP与Director的DIP必须在同⼀IP⽹络;
2.lvs-dr(direct routing直接路由):⽹关模型
通过修改请求报⽂的MAC地址进⾏转发;IP⾸部不会发⽣变化(源IP为CIP,⽬标IP始终为VIP)
客户端发起请求,经过层层路由到达离VS服务器最近的交换机,通过交换机转发给VS服务器,由VS服务器负载均衡转发请求给RS服务器。在此过程中VIP修改MAC地址调度请求给实践感想
真实主机。在此过程中通过ARP协议在⼀个局域⽹中⼴播寻找真实主机的MAC地址。每个RS 真实主机的⽹卡会⼀个别名地址VIP,实现全过程源地址为CIP,⽬标地址为VIP不变。调度基于寻找MAC。⽹关模型中的所有主机均要能与外⽹通信。这样RS主机就能够直接响应客户机。
(1)确保前端路由器将⽬标IP为VIP的请求报⽂⼀定会发送给Director;
解决⽅案:
2)禁⽌RS响应VIP的ARP请求;
a) arptables上定义;
b) 修改各RS的内核参数,并把VIP配置在特定的接⼝上实现禁⽌其响应;
(2)RS的RIP可以使⽤私有地址,也可以使⽤公⽹地址;
RIP使⽤私有地址可以通过在之前加⼀个路由器的⽅式和外⽹通信,直接响应客户机
(3)RS跟Director必须在同⼀物理⽹络中;
(4)请求报⽂必须由Director调度,但响应报⽂必须不能经由Director;
(5) 不⽀持端⼝映射;
(6) 各RS可以使⽤⼤多数的操作系统;
3.lvs-tun(ip tunneling):IP隧道模型
转发⽅式:不修改请求报⽂的IP⾸部(源IP为CIP,⽬标IP为VIP),⽽是在原有的IP⾸部这外再次封装⼀个IP⾸部(源IP为DIP,⽬标IP为RIP);
(1)RIP,DIP,VIP全得是公⽹地址;
(2)RS的⽹关不能也不可能指向DIP;
(3)请求报⽂经由Director调度,但响应报⽂将直接发给CIP;
(4) 不⽀持端⼝映射;
(5)RS的OS必须⽀持IP隧道功能;
4.lvs-fullnat:完整模型(同时改变请求报⽂的源IP和⽬标IP)
通过同时修改请求报⽂的源IP地址(cip-->dip)和⽬标IP地址(vip--> rip)实现转发;
注意:前三种为标准类型,第四种为后添加类型,内核默认可能不⽀持,需⾃编译内核
(1)VIP是公⽹地址;RIP和DIP是私⽹地址,且可以不在同⼀IP⽹络中,但需要通过路由互相通信;
(信阳毛尖的功效与作用
2)RS收到的请求报⽂的源IP为DIP,因此其响应报⽂将发送给DIP;
(3)请求报⽂和响应报⽂都必须经由director;
(4) ⽀持端⼝映射;
(5) RS可使⽤任意OS;
三、LVS scheduler调度算法
1.静态⽅法:仅根据算法本⾝进⾏调度
(1)RR :round robin,轮询机制,依次分配请求,⽅式简单但时负载均衡的效果⼀般
(2)WRR :weighted rr,加权轮询,权重越⼤承担负载越⼤
(3)SH :source ip hash,源地址哈希,将来⾃同⼀个ip请求通过记录在ip hsash表中绑定在同⼀个服务器,实现ssion保持 缺点:调度粒度⼤,对负载均衡效果差;ssion黏性不同,连接时长保持不同
(4)DH :desination ip hash,⽬标地址哈希。能实现连接追踪,但不考虑负载均衡效果
正向web代理,负载均衡内⽹⽤户对互联⽹的请求;
Client--> Director --> Web Cache Server(正向代理)
2.动态⽅法:根据算法及各RS当前的负载状态进⾏评估
Overhead负载值,VS转发时记录每个RS的Active和Inactive数量(甚⾄权重)进⾏算法计算
Active大学生读书心得
活动链接值,当发起新请求后保持在ESTABLISHED状态时,仍有请求响应
Inactive⾮活动链接值,在ESTABLISHED状态时,尚未断开保持空闲等待状态
(1)LC:least connection,最少连接
Overhead=A穿的英语怎么说
ctive*256+Inactive
后端的RS谁的连接少就分发请求⾄那台RS,若overhead⼀样则⾃上⽽下轮询列表中的RS
(2)WLC:weighted least connection,加权最⼩连接
Overhead=(Active*256+Inactive)/weight,计算结果⼩的将为选中的下⼀跳RS服务器
缺点:当Overhead⼀样时,⾃上⽽下轮询响应,权重⼩的若在列表上⽅则其会响应
(3)SED:Shortest Expection Delay,最短期望延迟
Overhead=(Active+1)*256/weight
缺点:解决WLC问题,但时⽆法确保权重⼩的主机⼀定响应
(4)NQ:never Queue,永不排队,SED算法改进
RS权重⼤⼩排列,每台RS服务器先分配⼀个请求,其余的按照权重⼤⼩计算分配
(5)LBLC:Locality-Bad LC,基于本地的最少连接,动态的 DH连接算法
(6)LBLCR:LBLC with Replication,带复制功能的LBLC
四、ipvsadm命令
1.管理集群服务:
ipvsadm -A|E -t|u|f rvice-address [-s scheduler][-p [timeout]]
ipvsadm -D -t|u|f rvi描写大海的词语
ce-address
-A:添加、-E:修改、-D:删除
rvice-address服务地址和 -t|u|f 结合使⽤,具体格式如下
-t, tcp, vip:port TCP的ip和port
-u, udp, vip:port UDP的ip和port
-f, fwm, MARK 防⽕墙标记
-s scheduler:默认为WLC调度算法,可省;
-p [timeout] :超出时长,持久连接相关,默认时长为300秒
2.管理集群服务上的RS:
ipvsadm-a|e -t|u|f rvice-address -rrver-address [-g|i|m] [-w weight]
ipvsadm -d -t|u|f rvice-address -rrver-address
-
a:添加⼀个RS、-e:修改⼀个RS、-d:删除⼀个RS
rver-address指的是rip[:port],端⼝可省表⽰与之前的rvice-address相同,只有nat模式⽀持端⼝映射才会使⽤[-g|i|m]
-g:GATEWAY (默认),lvs-dr模型
-i: IPIP, lvs-tun隧道模型
-m: MASQUERADE,lvs-nat模型
3.查看
ipvsadm -L|l[options]
-n:numeric,数字格式显⽰地址和端⼝;
-c:connection,显⽰ipvs连接;
--stats:显⽰统计数据;
--rate:速率
--exact:精确值,不经过单位换算的数值
4.清空规则:
ipvsadm -C
5.数器清零:
ipvsadm -Z [-t|u|f rvice-address]
6.保存和重载:
保存:
ipvsadm-S > /PATH/TO/SOME_RULE_FILE
ipvsadm-save > /PATH/TO/SOME_RULE_FILE
重载:
ipvsadm -R < /PATH/FROM/SOME_RULE_FILE
ipvsadm-restore< /PATH/FROM/SOME_RULE_FILE并重
注意:需要结合重定向⼀起使⽤,从⾃定义的规则⽂件中导⼊导出
附录(ipvsadm -h):