更新时间:2026-11-03 GMT+08:00
分享

应用无损透明(ALT)简介

操作场景

数据库实例在进行规格变更(实例级、节点级)、只读升主或小版本升级时,可能会中断用户会话,此时用户的应用程序需要感知到会话变化并提供复杂的应对措施来解决故障,比如判断数据库连接或事务是否中断,进行事务补偿以及重建数据库会话上下文等。

针对上述问题,TaurusDB提供了应用无损透明(Application Lossless and Transparent,简称ALT),分为读写ALT和只读ALT。在数据库系统切换时,可以避免数据库连接和事务中断,无需用户对事务进行补偿、无需恢复和重建会话上下文,从而实现无损的应用连续性,保证业务不中断。

应用无损透明(ALT)功能以用户连接为粒度,用户可以连接到数据库代理,在进行规格变更、只读升主或者小版本升级时,系统会复制用户的后台会话,在达到安全的事务边界后,确保后台会话操作上下文被完整克隆至目的节点,从而保证业务不会中断。

基本概念

表1 基本概念

概念

描述

安全的事务边界

指当前会话上的事务提交完成,开启下一个事务之前的状态。

例如:

  • 开启autocommit的事务块每个语句执行完成时,可以达到事务边界。
    start transaction;
    DML; 
    commit;
  • 关闭autocommit时,当commit执行完成,达到事务边界。
  • 单独DML、DDL语句,执行完成,可以达到事务边界。
  • 使用表锁、备份锁、用户自定锁时,释放锁以后,达到事务边界。

排干

应用无损透明(ALT)功能需要每个连接上均不存在运行中的事务,主备切换时需要等待已经执行的事务结束。等待事务结束的时间称为排干机制超时时间,通过参数“rds_tac_drain_timeout”控制,默认为5s,取值范围为1-60s。

业务压力较大,Prepare语句个数较多或者事务执行时间较长时,建议增加超时时间。不建议调小超时时间,如果在该时间内有连接没有排干事务,则这些连接不具有ALT的能力。

应用无损透明原理

TaurusDB支持读写ALT和只读ALT。

图1 读写ALT架构图

应用程序1和应用程序2分别通过Connection1和Connection2连接到数据库代理,数据库代理会与主节点和只读节点建立会话连接。

当发生实例规格变更(不包含只读节点规格变更)、只读升主、小版本升级时,需要进行主节点和只读节点间的切换。架构图右侧展示了切换后的状态:

  1. 切换前:代理建立Session X1和Session X2连接到主节点。
  2. 切换时:代理在只读节点上建立相同数量的连接Session Y1和Session Y2,通过代理将主节点上连接的业务转移到只读节点上。
  3. 切换后:主节点上的业务已切换至新主节点。
图2 只读ALT架构图(规格变更)

应用程序1和应用程序2分别通过Connection1和Connection2连接到数据库代理,数据库代理将与后端只读节点建立会话连接。

当实例发生规格变更(实例级、节点级)时,需要进行只读节点间的切换。架构图右侧展示了切换后的状态:

  1. 切换前:代理建立Session X1和Session X2连接到旧只读节点。
  2. 切换时:代理在新只读节点上建立相同数量的连接Session Y1和Session Y2,通过代理将旧只读节点上连接的业务流量转移到新只读节点上。
  3. 切换后:旧只读节点上的业务已切换至新只读节点,规格变更完成后旧只读节点最终会被删除。

版本与约束

表2 应用无损透明版本约束

功能

版本约束

读写ALT

  • TaurusDB内核版本需要大于等于2.0.54.240600。
  • 数据库代理内核版本需要大于等于2.24.06.000。

只读ALT

  • TaurusDB内核版本需要大于等于2.0.54.240600。
  • 数据库代理内核版本需要大于等于2.26.03.000。

约束限制

  • 实例为一主多读,至少有一个只读节点,已开启数据库代理且必须通过数据库代理地址连接实例。
  • 只读数据库代理模式下不支持应用无损透明(ALT)功能。
  • 单机类型的TaurusDB实例不支持实例级应用无损透明(ALT)功能。
  • Serverless实例不支持只读应用无损透明。
  • 应用无损透明(ALT)切换过程中,会短时间在目标新主机上创建和原主节点相同数量的备用连接,请确认数据库实例的总连接数上限为当前连接数的2倍或以上。对于只读ALT,在规格变更(实例级和节点级)时,还需要关注新规格的max_connections参数,否则可能会因为出现“Too many connections”错误而失败。

    修改最大连接数需要评估实例规格和内存使用情况,请参考TaurusDB数据库实例支持的最大数据连接数是多少。

  • 实例级规格变更时如需使用ALT功能,需要保证主节点实例的总连接数上限为当前连接数的2倍或以上,修改最大连接数需要评估实例规格和内存使用情况,请参考TaurusDB数据库实例支持的最大数据连接数是多少。

    变更结束后会保留部分连接,具体取决于您的连接超时参数(wait_timeout:服务器关闭连接之前等待非交互式连接活动的秒数)配置。

  • 应用无损透明(ALT)支持Prepare协议,切换过程中会重建Prepare语句的上下文信息,如果业务有大量的Prepare语句,可能影响切换的成功率。请确认参数max_prepared_stmt_count设置为Prepare语句个数的2倍或以上,修改max_prepared_stmt_count前需要评估实例规格和内存使用情况,请参考修改TaurusDB实例参数。

    执行如下SQL语句查询Prepare语句个数。

    show global status like 'prepared_stmt_count';
  • 应用无损透明(ALT)切换建议在业务低峰进行,如果业务主节点和只读节点压力过大或短时间内连续变更,可能影响切换的成功率。
  • 数据库代理的语法限制和功能限制请参考TaurusDB数据库代理注意事项。

不支持的功能

表3 开启ALT后不支持的特性清单

模块

描述

用户设置的系统变量

  • innodb_ft_user_stopword_table:只支持值为NULL。
  • transaction_write_set_extraction:只支持值为OFF。
  • profiling:不支持设置为1或者ON。

数据库代理

  • 暂不兼容会话级连接池。
  • 暂不兼容全局一致性。
  • 暂不兼容单列插入16MB以上的数据。
  • 暂不兼容查询结果集大于16MB以上的数据。

临时表

不支持用户临时表。

安全事务边界

  • 不支持长时间不提交的InnoDB事务块。
  • 不支持有未释放的表锁、用户锁,备份锁和binlog锁(Lock for backup/binlog)。
  • 不支持XA事务。

转移Prepare语句

  • 当Prepare语句中打开游标(Cursor)且未关闭场景,无法转移该Prepare语句。
  • 当Prepare语句的变量已经保存了LONG_DATA类型,无法转移该Prepare语句。

其他功能

不支持开启透明数据加密(TDE)。

相关文档