更新时间:2026-01-15 GMT+08:00

TaurusDB for PostgreSQL数据库代理简介

数据库代理是TaurusDB for PostgreSQL和应用服务之间的网络代理服务,用于代理应用服务访问TaurusDB for PostgreSQL的所有请求。

读写分离是指通过数据库代理地址实现读写请求的自动转发。创建TaurusDB for PostgreSQL实例后,您可以开通数据库代理,通过代理地址,写请求自动访问主节点,读请求按照数据库代理的路由模式分发到各个节点,进行读写分离,降低主节点的负载。

数据库代理服务暂不收费。

基本概念

读写分离原理

TaurusDB for PostgreSQL支持开通一个或多个数据库代理。

一个TaurusDB for PostgreSQL实例下只有1个数据库代理实例,应用服务通过数据库代理地址连接到数据库代理实例,写请求通过数据库代理实例自动转发到主节点,读请求根据数据库代理实例的路由模式转发至主节点或只读节点。

图1 单个数据库代理读写分离原理图

一个TaurusDB for PostgreSQL实例下可以创建多个数据库代理实例,最多支持创建4个代理实例,主要适用于有隔离需求的复杂业务。不同的应用服务可以根据业务需要连接不同的数据库代理,数据库代理连接指定的只读节点,将不同应用服务之间的读请求最终转发到不同的只读节点上,实现业务隔离。

图2 多个数据库代理读写分离

读写分离优势

  • 相比在应用程序内手动做读写分离,扩容灵活,维护成本低。
  • 客户端读请求分发至后端只读节点,数据库实例整体负载更加均衡,提升资源利用率。
  • 通过代理将指定业务的读请求路由到选定的只读实例上,实现业务隔离,避免多个业务之间相互影响。

请求路由规则

注意事项

表2 数据库代理注意事项

分类

注意事项

不支持的功能

数据库代理不支持通过修改数据库的pg_hba文件限制访问权限,且pg_hba文件中不能限制proxy的IP,否则代理无法建立与数据库的连接。

使用约束

  • 至少创建1个只读实例才能开启读写分离功能。
  • 开启读写分离功能后,不允许修改TaurusDB for PostgreSQL实例的端口和读写内网地址。
  • 在存在多个代理实例部署或用户直接登录数据库的场景下,如创建用户、修改密码、权限变更等操作可能不会立即生效。上述操作的SQL语句会在不超过参数cache_refresh设定的延迟后生效(默认延迟:5 分钟)。
    说明:

    cache_refresh参数用于指定从数据库读取用户及数据库元数据、并刷新缓存的时间间隔,单位为秒,默认值 300 秒(5 分钟),支持用户手动修改。

  • lastval() 和 currval() 函数可能无法正确获取相关值,仅支持在事务中使用。
  • rdsAdmin 是数据库代理系统的内置账号。建议不要创建同名账号或修改此用户,以免影响读写分离功能的正常运行。
  • 修改数据库参数的语句仅在主节点上生效(包括 ALTER SYSTEM SET 和 SELECT pg_reload_conf() 等)
  • 如果开启事务,整个事务都会在主节点上执行。(若用户显式声明为只读事务,则整个事务将在只读节点上执行。)
  • 调用存储过程或使用公用表表达式(CTE)的 SQL 语句将被路由到主节点。
  • 当使用数据库代理时,数据库名、所有数据库对象名(含库名、表名、Schema、索引名、用户名等)仅支持 ASCII 可打印字符。
  • 不支持使用用户名'rdsAdmin', 'rdsBackup', 'rdsMetric', 'rdsRepl'通过代理登录数据库。
  • 不支持通过代理登录到'template0', 'template1'数据库。