掘金 后端 ( ) • 2024-03-28 15:47

本文分享自华为云社区《GaussDB(DWS)业务高可靠原理》,作者: yd_291396996。

1. 前言

适用版本:【8.1.0及以上】

GaussDB(DWS)所有内部组件CN、DN、GTM、CM等采用多活或主备设计,通过集群管理进行故障检测和切换,保证了单点故障场景下业务的可靠性。此外还采用了CN RETRY、远程读、ELB等技术进一步对业务进行保障,下面将对这几种技术的原理进行详细的介绍。

2. CN RETRY

CN Retry是提高数据库系统HA技术中的一环,配合集群故障自恢复,实现集群实例故障业务不中断,其要做到的是故障时业务的重试(实现业务不中断,提高业务的连续性)。

2.1 原理介绍

对于来自gsql客户端、JDBC、ODBC驱动的SQL语句,在SQL语句执行失败时,CN端能够自动识别语句执行过程中的报错,并重新下发任务进行自动重试。CN Retry功能是默认开启的,由GUC参数max_query_retry_times进行控制,支持范围是0-20,默认为6,代表可语句出错时会自动重试6次,0代表关闭该功能,GaussDB(DWS)绝大部分错误类型都支持CN Retry功能,比如主机单点故障,业务断连的情况。

2.2 解决的问题

在集群故障场景为实现用户业务不中断,首先需要集群能够从故障状态恢复到可用状态,集群HA能力实现了集群在故障时的自恢复,然后需要有重执行机制保障业务不中断,CN Retry实现故障场景CN 端语句自动重执行,重试过程对用户是无感知的。

2.3 技术方案

CN Retry在CN端实现故障报错时的语句自动重执行。CN端作为语句执行的入口,在语句执行报错时,rerty机制识别该报错,如果是可以被retry的错误类型,先将报错前已执行的操作进行回滚,而后重新执行该语句。如果能够执行成功,则跳过执行过程中的报错(不将执行过程中的错误信息上报给客户端),重执行的动作客户端无感知,经尝试后如果依然无法成功执行则将错误信息上报给客户端。

2.4 技术规格

3. 远程读

在GaussDB(DWS)中,主备DN是默认强同步的,具备一致性。当主DN遇到数据错误的情况时,可以去备DN请求对应的Page/CU,只要备DN已经redo完对应的数据,即可返回Page/CU给主DN。

3.1 原理介绍

远程读具体原理如下:

  • 主DN对行存表和列存表的数据校验。
  • 实现主备间通信,备DN根据主DN的请求返回对应的Page/CU。
  • 主DN遇到数据错误时向备DN发生数据页请求。
  • 备DN根据请求读取数据并校验,返回数据给主DN。
  • 主DN校验返回的数据,校验通过则覆盖本地数据
  • 此外,主DN还需记录数据错误,提供视图给CM,CM向上返回告警,提示用户更换磁盘。

3.2 规格约束

  • 由于依赖主备机制,只能处理DN上数据错误,并且备机处于可以查询状态。
  • 数据错误校验,依赖有校验信息的生成。历史数据依赖扩容或定期Vacuum来生成校验信息。
  • 仅针对数据静默损坏场景,可以通过远程读解决;对于操作系统和文件系统上的异常,应通过节点隔离或主备倒换方式处理。
  • 从远程读取数据后,本地数据对本地Page/CU进行原位覆盖。尽量进行恢复,不保证下次读时依然正常。
  • 临时表,Unlogged表在备机无数据,不支持远程读。

4. ELB

华为云弹性负载均衡( Elastic Load Balance)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。消除单点故障提升应用系统的可用性。

  1. 存在负载均衡时,当出现接入点CN故障,CN1的流量会自动切换至CN2
  2. 未配置负载均衡的集群,当出现接入点CN故障,CN1的流量会被丢弃,引发业务受损

4.1 组件介绍

弹性负载均衡由以下3部分组成:

  1. 负载均衡器:接受来自客户端的传入流量并将请求转发到一个或多个可用区中的后端服务器。
  2. 监听器:您可以向您的弹性负载均衡器添加一个或多个监听器。监听器使用您配置的协议和端口检查来自客户端的连接请求,并根据您定义的分配策略和转发策略将请求转发到一个后端服务器组里的后端服务器。
  3. 后端服务器:每个监听器会绑定一个后端服务器组,后端服务器组中可以添加一个或多个后端服务器。后端服务器组使用您指定的协议和端口号将请求转发到一个或多个后端服务器。对应DWS集群,后端服务器组绑定是CN节点。

4.2 功能介绍

流量调度:ELB通过监听器检查连接请求,根据定义的分配策略将请求流量分发至后端服务器。

健康检查:定期检查后端服务器的业务可用性,确保将请求发送到健康检查正常的ECS,这里的ECS指DWS集群的CN节点。

会话保持:将一定时间内来自同一用户的访问请求,转发到同一后端服务器处理,保证用户访问的连续性。

4.3 弹性负载均衡类型

独享型负载均衡:独享型负载均衡实例实例性能独享,资源隔离,实例的性能不受其他实例的影响,单实例最高支持2kw并发,您可根据业务需要选择不同规格的实例。

共享型负载均衡:属于集群部署,实例资源共享,实例的性能会受其它实例的影响,不支持选择实例规格,集群最高可支持每秒新建连接数不超过100万,1亿并发连接。共享型负载均衡就是原增强型负载均衡。

4.4 典型应用场景

潮汐效应业务:随时在ELB上添加和移除后端服务器,同时结合弹性伸缩服务,更好的提升业务的灵活扩展能力。

访问量较大业务:通过ELB将访问流量均衡的分发到多个后端云服务器上,确保业务快速平稳运行。

消除单点故障:通过健康检查及时发现并屏蔽后端故障服务器,并将流量转发到后端其他正常的服务器上,确保业务不中断。

5. 总结

本文主要介绍了GaussDB(DWS)为业务高可靠保驾护航的三大利器:CN RETRY、远程读、ELB。CN RETRY可以实现用户无感知的业务重试;远程读可以解决部分磁盘故障导致的文件损坏故障;ELB则可以在CN故障时,实现秒级的流量转发,将请求发送给其他CN。此外还补充了当前CN RETRY与远程读的规格约束。

点击关注,第一时间了解华为云新鲜技术~