lvs调度器
1. 集群和分布式
系统性能扩展方式:
- scale up :垂直扩展,向上扩展,性能更强的计算机运行同样的服务
- scale out:水平扩展,向外扩展,增加设备,并行地运行多个服务调度分配问题,cluster
垂直扩展不再提及的原因:
- 随着计算机性能的增长,其价格会成倍增长
- 单台计算机的性能是有上限的,不可能无限制的垂直扩展
1.1 集群Cluster
cluster:集群,为解决某个特定问题将多台计算机组合形成的单个系统
cluster分为三种类型:
- LB:Load Balancing,负载均衡,多个主机组成,每个主机只承担一部分访问请求
- HA:High Availiablity,高可用,避免SPOF(single Point Of failure)单点失败
MTBF:Mean Time Between Failure 平均无故障时间,正常时间
MTTR:Mean Time To Restoration (repair)平均恢复前时间,故障时间
A=MTBF/(MTBF+MTTR) (0,1):99%,99.5%,99.9%,99.99%,99.999%
SLA:服务等级协议(简称SLA,全称:service level agreement)是在一定开销下为保障服务的性能和可用性,服务提供商与用户间定义的一种双方认可的协议,通常这个开销是驱动提供服务质量的主要因素。在常规的领域中总设定所谓的三个9,四个9来进行表示,当没有达到这种水平时,就会有一系列的惩罚措施,而运维,最主要的目标就是达成这种服务水平
1年=365天=8760小时
90=(1-90%)*365=36.5天
99=8760*1%=8706小时
99.9=8760*0.1%=8760*0.001=8.76小时
99.99=8760*0.0001=0.876小时=0.786*60=52.6分钟
99.999=8760*0.00001=0.0876小时=0.0876*60=5.26分钟
99.9999=(1-99.9999%)*365*24*60*60=31秒
停机时间又分为两种,一种是计划内停机时间,一种是计划外停机时间,而运维的主要关注计划外停机时间
- HPC:High-performance computing,高性能 https://top500.org/
1.2 分布式系统
分布式存储:C二皮河,GlusterFS,FastDFS,MogileFS
分布式计算:hadoop,Spark
分布式常见应用
- 分布式应用–服务安装功能拆分,使用微服务
- 分布式静态资源–静态资源放在不同的存储集群上
- 分布式数据和存储–使用key-value缓存系统
- 分布式计算–对特殊业务使用分布式计算,比如Hadoop集群
1.3 集群和分布式
集群:同一个业务系统,部署在多台服务器上,集群中,每一台服务器实现的功能没有差别,数据和代码是一样的
分布式:一个业务被拆成多个子业务,或者本身就是不同的业务,部署在多台服务器上。分布式中,每一台服务器实现的功能是有差别的,数据和代码也是不一样的,分布式每一台服务器的功能加起来,才是完整的业务
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率
对大型网站,访问用户很多,实现一个集群,在前面部署一个负载均衡服务器,后面几台服务器完成同一业务,如果有用那个号进行相应业务访问时,负载均衡根据后端那台服务器的负载情况,决定由哪台取完成响应,并且一台服务器跨了,其他的服务器可以顶上去,分布式的每一个节点,都完成不同的业务,一个节点跨了,那这个业务可能就会失败
1.4 集群设计原则
可扩展性–集群的横向扩展能
可用性–无故障时间(SLA service level agreement)
性能–访问响应时间
容量–单位时间内的最大并发吞吐量(C10K并发问题)
1.5 集群设计实现
1.5.1 基础设施层面
提升硬件资源性能-- 从入口防火墙到后端web server均使用更高性能的硬件资源
多域名–DNS轮询A记录解析
多人口–将A记录解析到多个公网IP入口
多机房–同城+异地容灾
CDN(Content Delivery Network)-- 基于GSLB(Global Server Load Balance)实现全局负载均衡,如:DNS
1.5.2 业务层面
分层:安全层、负载层、静态层、动态层、(缓存层、存储层)持久化和非持久化
分割:基于功能分割大业务为小业务
分布式:对应特殊场景的业务,使用分布式计算
1.6 LB Cluster 负载聚合集群
1.6.1 按实现方式划分
- 硬件
F5 Big-IP
Citrix Netscaler
A10 A10 - 软件
- lvs:Linux Virtual Server,阿里四层SLB(Server Load Balance)使用
- nginx:支持七层调度,阿里七层SLB使用 Tengine
- haproxy:支持七层调度
- ats:Apache Traffic Server,yahoo捐助给apache
- perlbal:perl编写
- pound
1.6.2 基于工作的协议层次划分
- 传输层(通用):DNAT和DPORT
- LVS
- nginx:stream
- haproxy:mode tcp
- 应用层(专用):针对特定协议,常称为proxy server
- http:nginx,httpd,haproxy(mode http),…
- fastcgi:nginx,httpd,…
- mysql:mysql-proxy,mycat…
1.6.3 负载均衡的会话保持
1 session sticky:同一用户调度固定服务器
- source IP:LVS sh算法(对某一特定的服务而言)
- cookie
2 sessionreplication: 每台服务器拥有全部session
session multicast cluster
3 session server:专门的session服务器
Memcached,Redis
1.7 HA高可用集群实现
keepalived:vrrp协议
Ais:应用接口规范
- heartbset
- cman+rgmanager(RHCS)
- coresync_pacemaker
2. Linux Virtual Server 简介
2.1 LVS
LVS:Linux Virtual Server,负载均衡调度器,内核集成,章文嵩(花名 正明),阿里的四层SLB(Server
Load Balance)是基于LVS+keepalived实现
LVS官网:http://www.linuxvirtualserver.org/
阿里SLB和LVS:
https://yq.aliyun.com/articles/1803
https://github.com/alibaba/LVS
整个SLB相同由3个部分组成:四层负载均衡,七层负载均衡和控制系统
- 四层负载均衡,采用开源软件LVS,并根据云计算需求对其进行定制化
- 七层负载均衡,采用开源软件Tengine
- 控制系统,用于配置和健康负载均衡系统
LVS相关术语
- VS:Virtual Server,负责调度
- RS:Real Server,负责真正提高服务
2.2 LVS工作原理
VS根据请求报文的目标IP和目标协议及端口将其调度转发至某RS,根据调度算法来挑选RS。LVS是内核级功能,工作在INPUT链的位置,将发往INPUT的流量进行处理
范例:查看内核支持LVS
[root@centos8 ~]#grep -i -C 10 ipvs /boot/config-4.18.0-193.el8.x86_64
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_DEVGROUP=m
CONFIG_NETFILTER_XT_MATCH_DSCP=m
CONFIG_NETFILTER_XT_MATCH_ECN=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_HL=m
# CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_IPVS=m
# CONFIG_NETFILTER_XT_MATCH_L2TP is not set
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
# CONFIG_NETFILTER_XT_MATCH_NFACCT is not set
CONFIG_NETFILTER_XT_MATCH_OSF=m
CONFIG_NETFILTER_XT_MATCH_OWNER=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
--
2.3 LVS集群体系架构
2.4 LVS功能及组织架构
负载均衡的应用场景为高访问量的业务,提高应用程序的可用性和可靠性
2.4.1 应用于高访问量的业务
如果应用访问量很高,开源通过配置监听规则将流量分发到不同的云服务器ECS(Elastic Compute Service)实例上。此外,可用使用会话保持功能将同一客户端的请求转发到同一台后端ECS
2.4.2 扩展应用程序
可用根据业务发展的需要,随时添加和移除ECS实例来扩展应用程序的服务能力,适用于各种Web服务器和App服务器
2.4.3 消除单点故障
可用在负载均衡实例下添加多台ECS实例。当其中一部分ECS实例发生故障后,负载均衡会自动屏蔽故障的ECS实例,将请求分发给正常运行的ECS实例,保证应用系统仍能正常工作
2.4.4 同城容灾(多可用去容灾)
为了提高稳定可靠的负载均衡服务,可在各地域部署多可用区以实现同地域容灾。当主可用区出现机房故障或不可用时,负载均衡仍然有能力在非常短的时间内切换到另一个备可用区恢复服务能力;当主可用区恢复时,负载均衡同样会自动切换到主可用区提供服务
如上图所示,在负载均衡实例下绑定不同可用区的ECS实例。正常情况下,用户访问流量将同时转发至主、备可用区的ECS实例;当可用区A发生故障时,用户访问流量将之转发至备用取ECS实例,此种部署即可以避免因为单个可以区故障而导致对外服务的不可用,也可以通过不同产品间可以去的选择来降低延迟
如上图所示,即在负载均衡实例的主可用区绑定多台ECS实例,而在备可用区没有任何ECS实例。当主可用区故障时会造成业务中断,因为备可用区没有ECS实例来接收请求。这种部署方式很明显是以牺牲高可用性为代价来降低延时
2.4.5 跨地域容灾
可以在不同地域下部署负载均衡实例,并分别挂载相应地域内不同可用区的ECS。上层利用云解析做智能DNS,将域名解析到不同地域的负载均衡实例服务地址下,可实现全局负载均衡。当某个地域出现不可用时,暂停对应解析即可实现所有用户访问不受影响
2.5 LVS 集群类型中的术语
- VS:Virtual Server,Director Server(DS),Dispatcher(调度器),Load Balancer
- RS:Real Server(lvs),upstream server(nginx),backend server(haproxy)
- CIP:Client IP
- VIP:Virtual sever IP VS外网的IP
- DIP:Director IP VS 内网的IP
- RIP:Real server IP
- 访问流程:VIP<–>VIP==DIP<–>RIP
3. LVS 工作模式和相关命令
3.1 LVS集群的工作模式
- lvs-nat:修改请求报文的目标IP,多目标IP的DNAT
- lvs-dr:操纵封装新的MAC地址
- lvs-tun:在源请求IP报文之外新加一个IP首部
- lvs-fullnat:修改请求报文的源和目标IP
3.1.1 LVS的NAT模式
lvs-nat:本质是多目标IP的DNAT,通过请求报文中的目标地址和目标端口修改为某挑出的RS的RIP和PORT实现转发,需开启ip_firewalld
- RIP和DIP应在同一个IP网络(可以在不同网段,但要加路由器,步建议使用),且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标端口(可映射多目标)
- VS必须是Linux系统,RS可以是任意OS系统
客户端发出请求报文,源IP为CIP,目标IP为LVS的VIP,然后经由VS转发到为挑出的RIP(即目标IP由VIP–>RIP)
RIP发出响应报文,源IP为RIP,目标IP为CIP,然后经由LVS修改源IP为VIP(RIP–>VIP)
LVS工作在prerouting和input之间,检查到VIP时进行转发
3.1.2 LVS的DR模式
LVS-DR:Direct Routing,直接路由,LVS默认模式,应用最广泛,通过微请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口MAC,目标MAC 是某个挑出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变
客户端发起请求,源MAC为CIP的MAC,目标MAC为路由器外网MAC,经由路由后源MAC为路由器内网的MAC,目标MAC为VIP的MAC,到达LVS后,源MAC为DIP的MAC,目标MAC为RIP的MAC
请求报文:CIP-MAC:路由器外网MAC–>路由器内网的MAC:VIP-MAC–>DIP-MAC:RIP-MAC
回应报文:RIP-MAC:路由器内网的MAC–>路由器外网MAC:CIP-MAC
源IP和目标IP以及端口都保持不变
DR模式的特点
- Director和各RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求报文发往Director,为了防止IP冲突
- 在前端网关做静态绑定VIP和Director的MAC地址
- 在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP 0j mangle --mangle-ip-s $RIP
- 在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce
- RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一网络;RIP的网关不能指向DIP,以确保响应报文不会经由Director
- RS和Director要在同一物理网段
- 请求报文要经由Director,但响应报文不经由Director,而由RS直接发往Client
- 无须开启ip_forward,不支持端口映射(端口不能修改)
- RS可使用大多数OS系统