GaussDB(DWS) 业务高可靠的三大利器:CN RETRY、远程读、ELB
本文分享自华为云社区《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)将访问流量自动分发到多台云服务器,扩展应用系统对外的服务能力,实现更高水平的应用容错。消除单点故障提升应用系统的可用性。
存在负载均衡时,当出现接入点 CN 故障,CN1 的流量会自动切换至 CN2
未配置负载均衡的集群,当出现接入点 CN 故障,CN1 的流量会被丢弃,引发业务受损
4.1 组件介绍
弹性负载均衡由以下 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 与远程读的规格约束。
版权声明: 本文为 InfoQ 作者【华为云开发者联盟】的原创文章。
原文链接:【http://xie.infoq.cn/article/62b1d7a475b53c8de08769d3e】。文章转载请联系作者。
评论