PolarDB数据库代理是位于数据库和应用程序之间的网络代理服务,用于代理应用程序访问数据库时的所有请求,具有高可用、高性能、可运维、简单易用等特点,支持自动读写分离、事务拆分、连接池等高级功能。您可以连接PolarDB集群地址使用数据库代理的各项功能。

PolarDB架构及数据库代理介绍

1

PolarDB集群版是一个由多节点构成的数据库集群,包括一个主节点,多个只读节点。对外默认提供两个地址,分别为主地址和集群地址。其中,集群地址功能由PolarDB数据库代理提供,集群地址分为只读和可读可写两种读写模式,可读可写模式支持读写分离,只读模式支持按连接数负载。

使用限制

PolarDB集群版支持集群地址和数据库代理相关功能。PolarDB单节点历史库采用单节点架构无需集群地址和数据库代理功能。

注意事项

  • 使用集群地址后,若未启用事务拆分,事务内的所有请求都会路由到主节点。
  • 使用集群地址后,当执行SHOW PROCESSLIST命令时,系统会将所有节点的结果合并后返回。
  • 若执行了Multi Statements或调用了存储过程,当前连接的后续请求会全部路由到主节点,需断开当前连接并重新连接才能恢复读写分离功能。
  • PolarDB集群地址本身并没有最大连接数的限制,连接数的限制主要由后端数据库中计算节点的规格决定。
  • 新增只读节点或重启只读节点之后新建的读写分离连接,会转发请求到该只读节点。新增只读节点或重启只读节点之前建立的读写分离连接,不会转发请求到新增的只读节点或重启后的只读节点上,需要断开该连接并重新建立连接,例如,重启应用程序。
  • 请勿在运行Multi Statements或调用存储过程时修改环境变量,例如set names utf8mb4;select * from t1;,否则可能会导致请求路由到只读节点和主节点查到的数据不一致。

读写分离

PolarDB集群版自带读写分离功能。应用程序只需连接一个集群地址,写请求会自动发往主节点,读请求会自动根据各节点的负载(当前未完成的请求数)发往主节点或只读节点,详情请参见读写分离

事务拆分

PolarDB提供了事务拆分功能,旨在保证读写一致性的前提下,将事务中的读请求发送到只读节点,减轻主节点的压力。详情请参见事务拆分

连接池

PolarDB支持会话级连接池和事务级连接池,您可以根据业务场景选择合适的连接池,帮助降低因大量连接导致的数据库负载压力,详情请参见连接池

并行查询

并行查询是PolarDB MySQL8.0引入的并行查询框架。PolarDB会根据成本和规则的考虑,启动这个查询框架。更多关于并行查询的介绍请参见并行查询(Parallel Query)

自定义集群地址

除了默认集群地址,PolarDB数据库代理还支持自定义集群地址,您可以自定义集群地址的读写模式,并根据不同的业务场景将特定的节点加入自定义集群地址,增强业务的灵活性。详情请参见集群地址

FAQ

  • Q:为什么刚插入的语句,立即查的时候查不到?

    A:读写分离的架构下,主节点和只读节点之间复制会有延迟,但PolarDB支持会话一致性,即同一个会话内保证能读到之前的更新。

  • Q:为什么只读节点没有压力?

    A:默认情况下事务中的请求都会路由到主节点,若是用Sysbench做压测,0.5版本的Sysbench可以加上--oltp-skip-trx=on,1.0版本的Sysbench可以加上--skip-trx=on去掉事务,若业务上因为事务较多导致只读库负载过低,可以提交工单开启读写分离下的事务拆分功能。

  • Q:为什么某个节点的请求数比别的节点多?

    A:当前是根据负载来分发请求的,负载小的节点接收的请求数会更多。

  • Q:是否支持0毫秒延迟的读取?

    A:PolarDB集群的主节点和只读节点在正常负载情况下,具有毫秒级的延迟,读写分离连接地址暂时不支持在数据写入后0毫秒的读取。如果要求0毫秒延迟的读取,可使用主地址(动态指向PolarDB主节点)将读写请求发给主节点。

  • Q:新增的只读节点会自动加入到读写分离吗?

    A:新增只读节点之后新建的读写分离连接才会转发请求到该只读节点。若需要使新增只读节点之前建立的读写分离连接也转发请求到新增的只读节点,则您需要通过重启应用程序等操作断开该连接并重新建立连接。

相关API

API 描述
CreateDBEndpointAddress 创建PolarDB集群的公网地址。
CreateDBClusterEndpoint 创建PolarDB自定义集群地址。
DescribeDBClusterEndpoints 查询PolarDB集群的地址信息。
ModifyDBClusterEndpoint 修改PolarDB集群地址属性。
ModifyDBEndpointAddress 修改PolarDB集群的连接地址(如自定义集群地址)。
DeleteDBEndpointAddress 释放PolarDB集群地址(除了自定义集群地址的私网地址)。
DeleteDBClusterEndpoint 释放PolarDB自定义集群地址。