Linux-集群基础- LVS-软件负载均衡
集群概述
什么是集群?
集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。
一个客户与集群相互作用时,集群像是一个独立的服务器。集群配置是用于提高可用性和可缩放性。
通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。
简单总结为:一组协同工作但对外表现为一个整体的服务器组
集群系统的优点:
- 高可扩展性:如上所述,可以通过增加服务器数量达到性能扩展。
- 高可用性:集群中的一个节点失效,它的任务可以传递给其他节点。可以有效防止单点故障。
- 高性能:负载均衡集群允许系统同时接入更多的用户。
- 高性价比:可以采用廉价的硬件服务器构造高性能的系统。
拓展:负载和分布式的区别?
饭店原来只有一个厨师,切菜洗菜备料炒菜全干。后来客人多了,厨房一个厨师忙不过来,又请了个厨师,两个厨师都能炒一样的菜,这两个厨师的关系是负载均衡。
为了让厨师专心炒菜,把菜做到极致,又请了个配菜师负责切菜,备菜,备料,厨师和配菜师的关系是分布式。
一个配菜师也忙不过来了,又请了个配菜师,两个配菜师关系是负载均衡
集群的分类:(LBC和HAC都是分布式集群)
- LBC:负载均衡集群
- HAC:高可用性集群
- HPC:高性能计算集群(科学计算集群)
第一类:LBC负载均衡集群(load balancer Cluster)
概念:由两个或两个以上的服务实体协调、配合完成一系列工作的模式,对外表现为一个整体。
目的:提高业务性能,降低单台服务器压力
算法:(算法是否合理)静态算法
RR(Round-Robin):轮询
WRR(wight-Round-Robin):权重(加权轮询)
负载调度器算法
静态算法:只考虑算法本身,不考虑服务器状态
- rr(轮循):从1开始到n结束
- wrr(加权轮循):按权重比例进行调度,权重越大,负责的请求越多
- sh(源地址hash):实现会话绑定,保留之前建立的会话信息。将来自于同一个ip地址的请求发送给一个真实服务器。
- dh(目标地址hash):将同一个目标地址的请求,发送给同一个服务器节点。提高缓存命中率
动态算法:既要考虑算法本身,也要考虑服务器状态(原理:通过hash表记录连接状态----active/inactive)
- LC(最少连接):将新的连接请求分配给当前连接数最少的服务器。 公式:活动连接*256 非活动连接
- WLC(加权最少连接):最少连接的特殊模式。 公式:(活动连接*256 非活动连接)/权重
- SED(最短期望延迟):加权最少连接的特殊模式。 公式:(活动连接 1)*256/权重
- NQ (永不排队):sed的特殊模式,当某台真实服务器连接为0时,直接分配,不计算
- LBLC(基于局部性的最少连接):dh的特殊模式,既要提高缓存命中率,又要考虑连接数量。先根据请求的目标 IP 地址寻找最近的该目标 IP 地址所有使用的服务器,如果这台服务器依然可用,并且有能力处理该请求,调度器会尽量选择相同的服务器,否则会继续选择其它可行的服务器
- LBLCR(带复制的基于局部性的最少连接):LBLCR=LBLC 缓存共享机制
LVS工作原理:ipvs(执行规则)/ipvsadm(命令编写:规则编辑器)
IPVS(负责数据包目标地址转换):钩子函数,内核机制,在请求没有到达目的地址之前,捕获并取得优先控制权的函数。
IPVSADM:工作在用户空间,负责为ipvs内核框架编写规则,定义谁是集群服务,谁是后端真实的服务器
名词:
- CIP:客户端IP
- DIP:负载调度器IP
- VIP:集群IP
- RIP:真实服务器IP
工作模式:
第一种:NAT 地址转换模式
实现原理
工作流程:
- 客户端将请求交给负载调度器,客户端发出数据包,此时这个数据包的源ip为CIP,目标ip为VIP(集群ip)
- 数据包到达负载调度器后,修改数据包的目标ip地址为真实服务器的ip,此时数据包的源ip为CIP,目标ip为RIP
- 将数据包发送给RS,之后RS响应将数据包发回给负载调度器,此时数据包的源ip为RIP,目标ip为CIP
- 负载调度器在转发时,会将源ip地址改为自己的VIP地址,然后再发给客户端,此时数据包的源ip为VIP,目标ip为CIP。
特点
- 负载调度器和真实服务器,必须位于同一网络
- 真实服务器的网关必须指向DIP
- 负载调度器必须位于客户端和真实服务器之间
- RIP通常都是私有地址,仅用于各个集群节点通信
- 支持端口映射
- 真实服务器可以使用任意操作系统、负载调度器必须是LINUX系统
缺点:
- 所有数据报文都要经过负载调度器、压力过大
第二种:DR:路由模式
实现原理
工作流程:
- 客户端发出数据包,源ip是CIP,目标ip是VIP
- 依靠路由把数据发送给负载调度器,负载调度器将数据包的源MAC地址修改为DIP(负载调度器)的MAC地址,将目标MAC地址修改为RIP的MAC地址,此时源ip和目标ip均未修改。
- 由于DS(负载调度器)和RS(真实服务器)在同一网络中,所以通过二层来传输,通过交换机再将数据包发到RS
- RS接收数据包之后,通过lo接口传送给ens33网卡向外发出,此时的源ip是VIP,目标ip为CIP。
- 最后通过路由发给客户端。
特点
- 负载调度器和真实服务器,必须位于同一网络
- 真实服务器的网关必须指向路由器
- 负载调度只处理入站请求
- RIP可以是私有地址,也可以是公网地址
- 真实服务器可以使用任意操作系统,负载调度器必须是LINUX系统
- 优点:负载调度器压力较小,支持100台左右的RS
- 缺点:配置相对复杂
第三种:TUN:隧道模式
实现原理
工作流程:
- 客户端发送数据包到负载调度器,此时数据包的源ip为CIP,目标ip为VIP。
- 负载调度器会在数据包的外面再次封装一层ip数据包,封装源ip为DIP,目标ip为RIP。此时源ip为DIP,目标ip为RIP。
- 之后负载调度器将数据包发给RS(因为在外层封装多了一层ip首部,所以可以理解为此时通过隧道传输),此时源ip为DIP,目标ip为RIP。
- RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的lo接口VIP,那么此时RS开始处理此请求,处理完成之后,通过lo接口传送给ens33网卡,然后向外传递。 此时的源IP地址为VIP,目标IP为CIP。
- 之后将数据包发给客户端。
特点
- 所有真实服务器节点既要有RIP,又要有VIP,并且RIP、必须是公网ip
- 负载调度器和真实服务器必须支持隧道功能
- 负载调度器只处理入站请求
- 真实服务器一定不能使用负载调度集群做默认网关
- 不支持端口映射
- 优点:可跨互联网搭建集群
- 缺点:对网络环境要求较高
第二类:HAC高可用集群(HA High availability Cluster)
目的:
- 最大限度的保证用户的应用程序持久、不间断的提供服务。(故障转移)
高可用性(HA,High Availablity)
- 是指通过尽量缩短系统停机时间(因日常的维护操作或突发的系统崩溃等),以提高系统和应用的可用性。一般是2个节点做出的HA集群,有很多通俗不科学的名称,比如“双机热备”,“双机互备”。 这样做的好处是当服务启动的时候,两台服务器一个作主(ser1),另外一个作从(ser2)。测试机每几秒会ping主机,当发现主机没有回应,就证明主机拓机了,那么从机马上会启动相应的服务,继续进行服务。这样就可保证服务部间断。
最大限度:(以下指的是一年内服务器的宕机时间,h—代表小时、m—代表分钟)
- 99% 87.6h
- 99.9% 8.8h
- 99.99% 53m
- 99.999% 5m
故障切换:
- 心跳检测:RS232串口线:串行电缆被认为是比以太网连接安全性稍好些的连接方式,因为hacker无法通过串行连接运行诸如telnet、ssh或rsh类的程序,从而可以降低其通过已劫持的服务器再次侵入备份服务器的几率。但串行线缆受限于可用长度,因此主、备服务器的距离必须非常短。
- 双机备份软件:Keepalived Rose Haproxy Heartbeat
特殊:
- 脑分裂:在一个网络或线缆故障时导致两个节点同时认为自已是唯一处于活动状态的服务器从而出现争用资源的情况,这种争用资源的场景即是所谓的“脑裂”,造成数据不完整,服务不可访问
解决方案:
- 设置参考ip,抢夺资源之前,都去ping参考ip(网关),ping不通时,不去抢资源,而是释放资源,将控制权交出去;
- 设置冗余线路,设置两条心跳线,两个网卡,第一个测时不同,再拿第二个去测。
- stonish(shoot the other node in the head 爆头):基于能够通过软件指令关闭某节点特殊的硬件设备,掐电源。
keepalive概述:
- 案例环境专为LVS和HA设计的一款健康检查工具
- 支持故障自动切换
- 支持节点健康状态检查
- 主备模式,共用同一个IP地址,但优先级不同