集群地址除了自动生成的默认地址,还可以手动新增自定义地址。

前提条件

2019年4月29日起创建的集群,可以直接新增自定义集群地址。2019年4月29日之前创建的集群需要提交工单申请,之后即可新增自定义集群地址。

背景信息

您可以在PolarDB MySQL集群上使用自定义集群地址,并且可以设置它们的读写模式、一致性级别,以及选择关联的只读节点等等,方便应用于不同的业务场景,增强了业务的灵活性。
说明
  • 一个集群最多可以有4个集群地址(1个默认地址+3个自定义地址)。
  • 默认的集群地址无法释放。自定义的集群地址可以被释放。
  • 默认的集群地址也可以和自定义地址一样进行自定义设置,具体注意事项请参见修改集群地址

新增自定义集群地址

  1. 登录 PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 单击目标集群ID。
  4. 单击访问信息区域中的创建自定义地址新增自定义地址
  5. 设置以下参数:
    创建自定义地址
    参数 说明
    读写模式 本地址的读写模式,分为只读可读可写(自动读写分离)
    说明 创建自定义地址后还可以修改读写模式。修改读写模式后,只对新建连接生效,已有的连接保持原来的模式。
    读负载节点 在左侧选择想要加入本地址用于处理读请求的节点。可选节点包括主节点和所有只读节点,本地址只会将读请求发往被选中的节点。
    说明
    • 读写模式为只读时,支持只挂载一个节点。但当此节点故障时,该地址可能会有最多1小时的不可用,请勿用于生产环境。因此,推荐至少选择2个节点,以提升可用性。
    • 读写模式为可读可写(自动读写分离)时,至少要选择2个节点。
    • 不论是否选中主节点,写请求都只会发往主节点。
    新节点自动加入 新增的节点是否要自动添加到该地址中。
    负载均衡策略 读写分离时,处理读请求的多个节点之间的调度策略,无需选择。
    主库不接受读 在确保一致性的前提下,将查询SQL发送到只读节点,来降低主节点的负载,确保主节点稳定。
    一致性级别
    • 最终一致性:能够提供最好的性能。
    • 会话一致性(推荐):提供Session级的读一致性保证,会略微增加主节点的负载。
    • 全局一致性:最高的一致性级别,可以保证跨Session的会话一致性,会增加主库的负载,当复制延迟高时不适用。

    具体请参见PolarDB一致性级别

    说明 如果读写模式为只读,只能选择最终一致性
    事务拆分

    默认情况下,PolarDB会将事务内的所有请求都发送到主节点以保障事务的正确性,但是某些框架会将所有请求封装到事务中,导致主节点负载过大。此时您可以开启事务拆分功能,开启后PolarDB会识别当前事务的状态,将正式开启事务前的读请求通过负载均衡模块分流至只读节点。详情请参见高级选项-事务拆分

    说明 事务拆分设置受一致性级别设置拘束,一致性级别会话一致性全局一致性时支持开启事务拆分一致性级别最终一致性时不支持开启事务拆分

    某些业务对全局一致有要求,开启事务拆分后将不满足全局一致,因此在事务拆分前请充分评估事务拆分功能是否适用于您的业务。

  6. 单击确定

修改默认/自定义集群地址

  1. 登录 PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 单击目标集群ID。
  4. 单击访问信息区域的编辑配置修改自定义地址
  5. 设置以下参数:
    参数 说明
    读写模式 本地址的读写模式,分为只读可读可写(自动读写分离)
    说明 创建自定义地址后还可以修改读写模式。修改读写模式后,只对新建连接生效,已有的连接保持原来的模式。
    读负载节点 在左侧选择想要加入本地址用于处理读请求的节点。可选节点包括主节点和所有只读节点,本地址只会将读请求发往被选中的节点。
    说明
    • 读写模式为只读时,支持只挂载一个节点。但当此节点故障时,该地址可能会有最多1小时的不可用,请勿用于生产环境。因此,推荐至少选择2个节点,以提升可用性。
    • 读写模式为可读可写(自动读写分离)时,至少要选择2个节点。
    • 不论是否选中主节点,写请求都只会发往主节点。
    新节点自动加入 新增的节点是否要自动添加到该地址中。
    负载均衡策略 读写分离时,处理读请求的多个节点之间的调度策略,无需选择。
    主库不接受读 在确保一致性的前提下,将查询SQL发送到只读节点,来降低主节点的负载,确保主节点稳定。
    一致性级别
    • 最终一致性:能够提供最好的性能。
    • 会话一致性(推荐):提供Session级的读一致性保证,会略微增加主节点的负载。
    • 全局一致性:最高的一致性级别,可以保证跨Session的会话一致性,会增加主库的负载,当复制延迟高时不适用。

    具体请参见PolarDB一致性级别

    说明
    • 如果读写模式为只读,只能选择最终一致性
    • 一致性级别修改后对所有连接立即生效。
    事务拆分

    默认情况下,PolarDB会将事务内的所有请求都发送到主节点以保障事务的正确性,但是某些框架会将所有请求封装到事务中,导致主节点负载过大。此时您可以开启事务拆分功能,开启后PolarDB会识别当前事务的状态,将正式开启事务前的读请求通过负载均衡模块分流至只读节点。详情请参见高级选项-事务拆分

    说明 事务拆分设置受一致性级别设置拘束,一致性级别会话一致性全局一致性时支持开启事务拆分一致性级别最终一致性时不支持开启事务拆分

    某些业务对全局一致有要求,开启事务拆分后将不满足全局一致,因此在事务拆分前请充分评估事务拆分功能是否适用于您的业务。

    连接池
    • 关闭(默认选项)
    • 开启会话级连接池

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

      PHP短连接优化用于减少短连接业务频繁建立新连接导致MySQL负载高。当您的连接断开时,系统会判断当前的连接是否是一个闲置的连接,如果是闲置连接,系统将会代理该连接并保留在连接池中一小段时间,如果这时新的连接建立的话就会直接从连接池里获得连接(命中的条件包括:user, clientip, dbname等),从而减少与数据库的建连开销;如果没有可用的连接,则走正常连接流程,重新与数据库建立一个新的连接。

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

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

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

      使用限制:

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

释放自定义集群地址

  1. 登录 PolarDB控制台
  2. 在控制台左上角,选择集群所在地域。
  3. 单击目标集群ID。
  4. 访问信息中的集群地址【推荐】中找到目标自定义地址,单击释放释放自定义地址
  5. 在弹出的对话框中,单击确定

相关API

API 描述
CreateDBClusterEndpoint 创建自定义集群地址。
DescribeDBClusterEndpoints 查询集群地址。
ModifyDBClusterEndpoint 修改集群地址。
DeleteDBClusterEndpoint 释放自定义集群地址。