【巡检问题分析与最佳实践】PolarDB 流量 & 代理问题

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: PolarDB集群原生支持读写分离方式接入业务,但是在真实业务中,经常出现节点上负载不均情况,严重的话可能导致单节点承担大量的流量被拖跨,最终整个集群雪崩影响业务。本文主要描述PolarDB代理的配置方法以及流量不均时如何定位。

往期分享

RDS MySQL

RDS MySQL 实例空间问题

RDS MySQL 内存使用问题

RDS MySQL 活跃线程数高问题

RDS MySQL 慢SQL问题

RDS MySQL 实例IO高问题

RDS MySQL 小版本升级最佳实践

RDS PostgreSQL

RDS PostgreSQL 实例IO高问题

RDS PostgreSQL 慢SQL问题

RDS PostgreSQL CPU高问题

RDS SQL Server

RDS SQL Server 磁盘IO吞吐高问题

RDS SQL Server CPU高问题

RDS SQL Server 空间使用问题

PolarDB

PolarDB MySQL CPU高问题

Redis

Redis 流控问题

Redis 内存高问题

Redis CPU高问题

MongoDB

MongoDB 内存高问题

MongoDB 磁盘IO高问题

MongoDB 空间使用问题

概述

PolarDB集群原生支持读写分离方式接入业务,但是在真实业务中,经常出现节点上负载不均情况,严重的话可能导致单节点承担大量的流量被拖跨,最终整个集群雪崩影响业务。

本文主要描述PolarDB代理的配置方法以及流量不均时如何定位。

数据库代理

基本信息

在RDS MySQL产品中,数据库代理需要单独购买并配置,而在PolarDB M集群中,默认即开启数据库代理功能,同时功能也比 MySQL的数据库代理更为强大。

  • 主地址:读写,直接指向主节点,只能配置连接名,无法配置代理功能
  • 集群地址:读写方式可配置,支持标准代理配置,不可删除
  • 自定义地址:读写方式可配置,支持标准代理配置,可删除

地址配置(ENDPOINT)

只读类型

在选定读写模式是【只读】类型的情况下,配置项比较少,需要注意的是只读类型的endpoint如果只使用单节点,尽量不要应用在生产环境中。

另外可调整的参数是【并行查询】,此配置只在只读endpoint中可配置,在PolarDB 8.0 中支持了并行查询,如果只读endpoint承接一些AP类业务流量,可以单独提供只读节点给此endpoint,并且尽量和TP业务节点不要重合,同时对并行查询的并行度单独调整,以充分利用CPU资源执行并行查询。


读写类型

读写类型中需要注意的点主要是

  • 一致性级别
  • 最终一致性:不考虑数据的同步情况,按负载进行节点请求的调度,会出现写入的数据未同步完成,只读节点上读取不到的情况,抽象如图:

  • 会话一致性:简单理解就是指在同一个连接里的前后请求,一般在写入后立即请求数据时使用,也是PolarDB推荐的一致性配置,抽象如图:

  • 全局一致性:每一个会话都要判断只读节点是否已经同步到最新数据,对一致性要求最高的场景下启用,抽像如图:

  • 以上三种一致性级别,需要根据业务需求配置。
  • 主库不接受读:满足一致性需求的前提下,将读请求全部分流到只读节点执行,如果不满足一致性需求(只读同步完成),流量还是会路由到主实例。
  • 事务拆分:将事务头部的读取语句拆分到只读节点上以承担主节点压力,如图:

  • 连接池

  • 会话级连接池:用以缓存连接信息,主要是连接风暴的场景下使用,例如PHP大量短连接的场景下,无法控制连接到实例的总连接数
  • 事务级连接池:标准连接池方案,对长连接进行复用,类似Druid等连接池中间件,控制连接实例的总连接数


注意

  • endpoint配置读写模式时,系统表查询会被路由到主节点,即使节点没有配置在当前endpoint,可能对一些业务场景有影响,例如:
select*from information_schema.processlist;
  • 读写模式下,即使没有配置主节点,写请求会自动路由到主节点
  • 如果对一致性有要求,推荐使用会话一致性,可以满足大部分业务场景,如果小部分业务的一致性要求不能在同一会话中完成(dml ->select),可以考虑使用hint方式强制读主节点,例如:
/*FORCE_MASTER*/select*from information_schema.processlist;

流量定位

有时观察实例性能,会发现实例的流量不均匀,需要定位原因,防止流量倾斜导致的实例性能问题。


常见问题

  • 主节点负载高, 只读节点负载低的情况
  • 场景一:都是业务侧直接连接了主地址导致只读没有分流,特别是在【RDS一键迁移PolarDB】的最终切换过程中,默认原RDS地址会切换到PolarDB的主地址上,这种情况下会导致流量全部流转到rw节点。此类问题需要业务侧调整连接地址为集群或自定义地址。
  • 场景二:使用的是读写分离地址,但业务上有大量的写,在代理层会把所有的写流量路由到主节点。此类场景可以尝试打开【主库不接受读】和【事务拆分】,尽可能让只读节点承担一些读流量
  • 只读节点负载高,主节点负载低
  • 此类场景一般是预期内的只读节点承截流量,例如配置了主不接受读和事务拆分,同时大量的请求都是读请求时,此类场景是比较理想的PolarDB流量分配,即使只读节点资源不够,也可以通过快速添加新的只读节点以分担负载,监控曲线例如:


以上两种都是预期内的负载分配,但有可能负载情况不在预期,如集群地址中有多个只读节点,但只有某个节点负载非常高,此类情况就需要定位是否有流量异常或者实例性能异常的情况。


异常定位

  • 实例复用
  • 由于PolarDB可以自定义多个endpoint,不同endpoint之前节点也可以复用,就有可能造成流量交叉导致实例负载不平均,例如TP业务和 AP业务不同的地址,但配置了相同的只读节点,如果出现交叉使用的节点负载异常,有很大可能就是不同业务之间的资源争抢,可以尝试将问题节点从某个地址中摘除,再对比负载情况。
  • 另外不建议节点交叉部署。
  • 实例本身性能问题
  • 在某些情况下,实例可能是由于自身问题导致资源负载高,例如在《PolarDB MySQL CPU高问题》 一文提到的AHI问题,不同节点分配的流量会导致AHI的分配也不相同,可能会导致某个节点上出现争抢问题,此时就要定位具体原因以优化节点性能。另外代理层是按负载情况分配的,如果单节点负载高,流量也会自动向负载低的节点倾斜,可能导致集群性能整体出现问题。
  • 来源定位
  • 目前PolarDB还未完全接入DAS历史数据诊断,如果需要定位异常流量来源,只能观察当前连接请求的情况,在一键诊断->会话管理 入口,可以查看用Hosts维度会话的统计,以确认是否有非预期的业务来源访问。同时可将正常节点与异常节点做对比以定位异常流量来源




相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
5月前
|
SQL 存储 监控
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
234 1
|
2月前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
5月前
|
监控 关系型数据库 MySQL
|
6月前
|
监控 关系型数据库 分布式数据库
【PolarDB 开源】PolarDB HTAP 实践:混合事务与分析处理的性能优化策略
【5月更文挑战第21天】PolarDB开源后在HTAP领域表现出色,允许在同一系统处理事务和分析工作负载,提高数据实时性。通过资源分配、数据分区、索引优化等策略提升性能。示例代码展示了创建和查询事务及分析表的基本操作。PolarDB还提供监控工具,帮助企业优化系统并应对业务变化。其HTAP能力为开发者和企业提供了强大支持,推动技术进步,加速数字化时代的业务发展。
438 1
|
1月前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了一种结合知识图谱与大型语言模型(LLM)的GraphRAG系统,利用PolarDB、通义千问及LangChain实现。知识图谱通过结构化信息、语义理解和推理等功能,增强了信息检索与自然语言处理效果。PolarDB具备图引擎与向量检索能力,适配知识图谱存储与查询。通义千问处理自然语言,LangChain则整合模型与应用。实战步骤包括环境准备、数据库配置与数据导入,并通过实例展示了图谱与向量联合检索的优越性,提升了问答系统的准确性和实用性。
|
3月前
|
监控 关系型数据库 分布式数据库
PolarDB 读写分离的最佳实践
【8月更文第27天】PolarDB 是阿里云推出的一款高度兼容 MySQL、PostgreSQL 和 Oracle 的云原生数据库服务。它支持读写分离,能够显著提高应用的性能和响应速度。本文将详细介绍如何在 PolarDB 中实施读写分离策略,并通过示例代码演示具体的配置步骤。
121 1
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之大数据量的实时分析查询挑战如何解决
PolarDB 并行查询问题之大数据量的实时分析查询挑战如何解决
36 2
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 并行查询问题之帮助处理实时性分析查询如何解决
PolarDB 并行查询问题之帮助处理实时性分析查询如何解决
40 1
|
5月前
|
存储 关系型数据库 分布式数据库
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析
PolarDB已经成为小鹏汽车应对TB级别大表标注、分析查询的"利器"。
突破大表瓶颈|小鹏汽车使用PolarDB实现百亿级表高频更新和实时分析

相关产品

  • 云原生数据库 PolarDB
  • 下一篇
    无影云桌面