集群初探
- nginx:keepalived,入口唯一
- tomcat:负载均衡集群,session共享,使用redis
- mysql:mysql proxy中间层,master可读写,以写为主,slave只读
- oracle:rac,外层看起来多个实例,底层是共享一个存储系统
集群与分布式
- 集群是软件的横向扩展,找帮手
- 分布式是软件的纵向扩展,分阶段
- 实际场景是:分布式+集群
集群的分类
集群可以实现高可用、负载均衡、提升单台计算机的CPU计算能力
- 高可用集群:集群中节点失效,热切换到可用节点
- 高CPU消耗集群:集群中节点并行消耗cpu资源,最终汇总各节点计算结果,同大数据处理思路
- 负载均衡集群:集群中按需分配各节点的访问频率
负载均衡器的功能
- 使用负载均衡算法保证机器的负载合理
- 健康检查:检查下游服务是否可用以及服务健康情况(Ping
三层
,TCP/UDP四层
,HTTP七层
,FTP,DNS等),剔除不健康服务的祖籍 - 会话保持:保证会话的原子性,一般使用会话共享(基于文件cookie、基于内存cookie、cookie禁用时隐藏域放置session-id)
- 缓存静态资源,减少后台资源消耗
负载算法
- 轮询、权重、优先权、最少连接数、最快响应、数学运算(余数、模、hash等)、基于数据包内容
- 优先权的方式是将服务分组,优先权是针对组的,组内仍使用负载算法。当整个组达到访问阈值时,切换到另一分组。多活
负载均衡实现
- 通过DNS域名解析进行负载均衡(非真正意义的负载),一个域名对应多个IP(寻找最近的IP),可以把域名解析到不同IP的机器,可使用dig查看域名解析结果
- 通过链路层(二层)解析进行负载均衡,后台服务设置相同的虚拟IP,通过指定MAC的方式访问后台服务
- 通过传输层(四层)TCP/UDP进行负载均衡,通过指定IP的方式访问后台服务,HAProxy、IPVS、F5等
- 通过应用层(七层)http/https/ws,三次握手后,通过解析应用层内容数据信息进行负载, nginx、HAProxy等
如果服务不是基于应用层,那么只能用四层以下的负载均衡方法
七层的方式使用起来最灵活、安全性也高、