您可以在PolarDB MySQL集群上新增自定义集群地址,通过设置集群地址的读写模式、一致性级别及关联的只读节点等,来满足不同的业务场景,增强业务的灵活性。 本文将介绍如何为PolarDB MySQL新增自定义集群地址。

前提条件

对于2019年4月29日起创建的集群,您可以直接新增自定义集群地址。若您需要为2019年4月29日之前创建的集群新增自定义地址,请提交工单联系售后服务。

使用限制

PolarDB MySQL 8.0集群在配置自定义集群地址时支持开启并行查询和设置并行度。

操作步骤

  1. 登录PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 单击目标集群ID,进入集群基本信息详情页。
  4. 链接地址区域,单击创建自定义地址自定义地址
  5. 创建自定义地址对话框内,设置如下参数。
    参数 说明
    读写模式 本地址的读写模式,可选模式为只读可读可写(自动读写分离)
    说明 创建自定义地址后还可以修改读写模式。修改读写模式后,只对新建连接生效,已有的连接保持原来的模式。
    地址名称 输入自定义集群地址的名称。
    读负载节点 在左侧选择想要加入本地址用于处理读请求的节点,可选节点包括主节点和所有只读节点。
    说明
    • 读写模式为可读可写(自动读写分离)时,至少要选择2个节点。不论是否选中主节点,写请求都只会发往主节点。
    • 读写模式为只读时,支持创建单节点地址,详情请参见常见问题
    新节点自动加入 新增的节点是否要自动添加到该地址中。
    负载均衡策略 读写分离时,在多个节点间用于处理读请求的调度策略,默认为基于负载的自动调度,且不可更改。
    一致性级别
    • 读写模式为可读可写(自动读写分离)时,可选一致性级别有最终一致性会话一致性(推荐)全局一致性,详情请参见一致性级别
    • 读写模式为只读时,默认一致性级别为最终一致性且不可更改。
    全局一致性读超时时间 等待只读节点同步到最新数据的超时时间,单位为ms。取值范围为0~6000ms,默认取值为20ms。
    说明 仅当一致性级别全局一致性时支持该配置。
    全局一致性读超时策略 在只读节点等待超时后,PolarDB的默认策略,取值范围如下:
    • 0,发送该请求到主节点(默认值)
    • 1,SQL报错(wait replication compelete timeout, please retry)
    说明 仅当一致性级别全局一致性时支持该配置。
    主库不接受读 开启之后,查询SQL将仅发送到只读节点,来降低主节点的负载,确保主节点稳定。
    说明 仅读写模式为可读可写(自动读写分离)时支持该配置。
    事务拆分 开启或关闭事务拆分,详情请参见读写分离
    说明 仅读写模式为可读可写(自动读写分离)一致性级别会话一致性(推荐)全局一致性时,支持该配置。
    连接池
    • 关闭(默认选项)
    • 开启会话级连接池

      会话级连接池适用于PHP短连接场景。

      PHP短连接优化主要用于减少短连接业务频繁建立新连接带来的负载。当某客户端连接断开时,系统会判断当前连接是否为闲置连接,如果是闲置连接,系统将会代理该连接并在连接池中保留一小段时间。当客户端重新发起连接请求时,若该闲置连接仍被保留在连接池中,则可直接使用已保留的闲置连接(命中的条件包括user、 clientip和 dbname等),从而减少与数据库的建连开销。如果连接池内没有可用的闲置连接,则走正常连接流程,与数据库重新建立新连接。

      说明 该优化并不能减少数据库的并发连接数,而是通过降低应用与数据库建连的速率来减少MySQL主线程的开销,更好的处理业务请求。但连接池里的闲置连接会短暂占用您的连接数。
    • 开启事务级连接池

      事务级连接池适用于总连接数比较多的场景,例如连接数上万的情况。

      事务级连接池主要用于减少业务的连接数,以及减少短连接场景下频繁新建连接带来的负载。客户端可以与代理建立大量连接,而同时代理到数据库只创建少量连接。当客户端发送连接请求时,代理将从连接池中选取符合条件的(现阶段为系统变量一致)连接进行请求发送到数据库,并在当前事务结束后将连接放入连接池。

      使用限制如下:

      • 当您执行以下行为时,连接将被锁定直至连接结束(即该连接不会再被放到连接池里供其它用户连接使用)。
        • 执行PREPARE语句或命令
        • 创建临时表
        • 修改用户变量
        • 大报文(例如16 M以上)
        • 使用lock table
        • 多语句
        • 存储过程调用
      • 不支持FOUND_ROWS、ROW_COUNT和LAST_INSERT_ID函数的调用,即使这些函数可以调用成功,也无法保证结果的正确性。
      • 对于设置了wait_timeout的连接,wait_timeout在客户端的表现可能不会生效,因为每次请求都会从连接池中获取连接,当wait_timeout超时后,只有连接池中的后端连接会断开,而后端连接断开并不会导致客户端连接断开。
      • 除了sql_modecharacter_set_servercollation_servertime_zone这四个变量以外,如果业务依赖其他会话级别的系统变量,那么需要客户端在建连之后显式进行SET语句执行,否则连接池可能会复用系统变量已经被更改过的连接。
      • 由于连接可能会被复用,所以使用select connection_id()查询当前连接的thread id可能会变化。
      • 由于连接可能会被复用,所以show processlist中,显示的IP地址和端口可能和客户端实际的IP地址和端口不一致。
      • 数据库代理会将所有节点上的SHOW PROCESSLIST结果合并并返回,而在事务级连接池开启后,前端连接和后端连接的thread id无法对应。这导致KILL命令会可能返回一个错误,但是实际上KILL命令已经正常执行成功,可再通过SHOW PROCESSLIST确定相应的连接是否断开。
    说明 仅系统默认集群地址在可读可写(自动读写分离)模式下支持该配置。
    并行查询 开启或关闭并行查询,详情请参见并行查询
    说明 仅集群版本为PolarDB MySQL 8.0的自定义集群地址在只读模式下支持该配置。
  6. 单击确定

常见问题

  • Q:如何创建单个节点的独立地址?
    A:仅当集群地址读写模式为只读且集群内拥有三个及以上节点时,才支持创建单节点地址。单节点地址的读负载节点只能是只读节点,详细操作步骤请参见操作步骤
    警告 创建单节点地址后,当此节点故障时,该地址可能会有最多1小时的不可用,请勿用于生产环境。
  • Q:一个集群最多允许创建多少个单节点地址?

    A:如果您的集群内有3个节点,则只允许为其中1个只读节点创建单节点地址;若集群内有4个节点,则允许为其中2个只读节点创建各自的单节点地址,以此类推。

  • Q:当出现系统故障需要进行主备切换时,单节点地址下对应的只读节点能否切换为新主节点?

    A:主备切换时,单节点地址下对应的只读节点不会被自动切换为新主节点。但您仍可以通过手动切换将其设置为新主节点,详细操作请参见主备切换

  • Q:一个集群最多可拥有多少个集群地址?

    A:一个集群最多可拥有4个集群地址,其中1个为默认地址,另外3个为自定义地址。

  • Q:可以修改集群地址吗?

    A:默认集群地址和自定义地址都支持修改配置,详情请参见修改集群地址

  • Q:可以释放集群地址吗?

    A:仅自定义集群地址可以被释放,默认集群地址无法被释放,详情请参见释放自定义集群地址

相关API

API 描述
CreateDBClusterEndpoint 创建自定义集群地址。
DescribeDBClusterEndpoints 查询集群地址。