High-Availability 高可用:通过设计减少系统不能提供服务的时间,简称有b计划
High-Performance 高性能:快
Active-Standby 双机热备
主服务器运行应用,备份服务器处于空闲状态,但实时监测主服务器的运行状态。一但主服务器出现异常或故障,备份服务器立刻接管主服务器的应用。
Active-Active 双机互备
两台服务器均为工作机,均为应用系统提供支持,同时还相互监测对方状况。当任一台主机宕机时,另一台主机主动接管异常机的应用,以保证业务的不间断运行(虽然加大了正常运行主机的负载)。最常见的例子:网站服务器
load-balancing 负载均衡
1、大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间
2、单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总
Load-Balance就是Active Active的一种
Cluster 群集
多台主机一起工作,各自运行一个或几个服务。当某个主机发生故障时,运行在其上的服务就被其它主机接管。
split-brain 脑裂
在"双机热备"高可用(HA)系统中,当联系两个节点的"心跳线"断开时(即两个节点断开联系时),本来为一个整体、动作协调的HA系统,就分裂成为两个独立的节点(即两个独立的个体)。由于相互失去了联系,都以为是对方出了故障,“本能"地争抢"共享资源”、争起"应用服务"。
后果:1)或者共享资源被瓜分、两边"服务"都起不来了;2)或者两边"服务"都起来了,但同时读写"共享存储",导致数据损坏(常见如数据库轮询着的联机日志出错)。
反向代理
你通过一个服务器去访问外面叫代理,那么外面的数据通过一个服务器再访问你就叫反向代理。
反向代理(reverse proxy)是指用代理服务器来接受外部的访问请求,然后将请求转发给内网的上游服务器,并将从上游服务器上得到的结果返回外部客户端。作为反向代理是 Nginx 的一种常见用法。这里的负载均衡是指一种策略,争取把请求平均地分布到每一台上游服务器上。
Q1:在应用层面,应用在两个主机上同时运行,怎么保证应用之间的一致性?
模式1:两台主机上运行的应用是同一种,但是可以互不关联相互独立完成。只需要配置好负载均衡,保证提供高性能的服务即可。
模式2:两台主机上运行的应用是相关联的,一台产生的结果会对另一台影响。通过消息日志,存储到本地数据库或共享的消息队列,再通过业务规则自动发起作用。反过来,对于两台主机都要写入的数据,通过锁的方式,保证只有一台在输出。
Q2:在数据层面,应用产生的数据,怎么保证一致性?
节点层面:Oracle RAC(Real Application Clusters)是Oracle数据库提供的一种数据库集群技术,专门用于实现数据库的高可用性和可扩展性。RAC允许多个数据库实例运行在不同的服务器上,共享访问相同的数据库文件,通过缓存融合(Cache Fusion)技术实现数据的一致性。RAC提供了连接负载均衡(Connection Balancing)和基于服务的负载均衡(Service-Based Load Balancing)两种方式来分散负载
容灾层面:Data Guard。它是在主节点与备用节点间通过日志同步来保证数据的同步,可以实现数据库快速切换与灾难性恢复。这里的节点由是不同城市的机房组成。
Q3:从Ingress来看,北向进来的业务请求,怎么做到尽量平均分摊到AA集群里的不同节点上,基于什么规则去进行分发?
通过负载均衡。包含三个方面:
软件(nginx、LVS)硬件(F5),
网络层次(二层、四层、七层),
本地(机房内)全局(地理位置)。
负载均衡分类
本地or全局
本地(主机层面考虑):
微观层面上的负载均衡算法:权重、轮询、最小链接数等等……很多
全局(地理层面考虑):
全球某个地方发来的请求,分配给响应时间最短的、最快域名解析的机房里的服务器
软件硬件分类
F5:硬件负载均衡器
lvs:重量级的四层负载软件
nginx:轻量级七层均衡(也能做4层负载, 通过stream模块)
haproxy:七层代理,也可以模拟四层转发
网络层次分类
二层负载均衡(mac)
根据OSI模型分的二层负载,一般是用虚拟mac地址方式,外部对虚拟MAC地址请求,负载均衡接收后分配后端实际的MAC地址响应.
三层负载均衡(ip)
一般采用虚拟IP地址方式,外部对虚拟的ip地址请求,负载均衡接收后分配后端实际的IP地址响应. (即一个ip对一个ip的转发, 端口全放开)
四层负载均衡(tcp)
在三次负载均衡的基础上,即从第四层"传输层"开始, 使用"ip+port"接收请求,再转发到对应的机器。
七层负载均衡(http)
从第七层"应用层"开始, 根据虚拟的url或IP,主机名接收请求,再转向相应的处理服务器。
二层:链路聚合
四层:基于IP+端口的负载均衡
在三层负载均衡的基础上,通过发布三层的IP地址(Virtual IP),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT处理,转发至后台服务器,并记录下这个TCP或者UDP的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。 L4 switch,主要分析IP层及TCP/UDP层
七层:基于虚拟的URL或主机IP的负载均衡
在四层负载均衡的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征。比如:不同业务交给不同服务器,假设用户访问高流量网站,在会话期间,它可能会请求静态内容(例如图像或视频)、动态内容(例如新闻订阅源)或者交易信息(例如订单状态)等等。7层负载平衡允许负载均衡器根据请求本身中的消息(如内容类型)来路由请求。可以将对图像或视频的请求路由到存储它的服务器;可以将诸如折扣价之类的交易信息请求路由到负责管理定价的应用服务器…