应用无损透明(ALT)简介
操作场景
数据库实例在进行规格变更(实例级、节点级)、只读升主或小版本升级时,可能会中断用户会话,此时用户的应用程序需要感知到会话变化并提供复杂的应对措施来解决故障,比如判断数据库连接或事务是否中断,进行事务补偿以及重建数据库会话上下文等。
针对上述问题,TaurusDB提供了应用无损透明(Application Lossless and Transparent,简称ALT),分为读写ALT和只读ALT。在数据库系统切换时,可以避免数据库连接和事务中断,无需用户对事务进行补偿、无需恢复和重建会话上下文,从而实现无损的应用连续性,保证业务不中断。
应用无损透明(ALT)功能以用户连接为粒度,用户可以连接到数据库代理,在进行规格变更、只读升主或者小版本升级时,系统会复制用户的后台会话,在达到安全的事务边界后,确保后台会话操作上下文被完整克隆至目的节点,从而保证业务不会中断。
基本概念
| 概念 | 描述 |
|---|---|
| 安全的事务边界 | 指当前会话上的事务提交完成,开启下一个事务之前的状态。 例如:
|
| 排干 | 应用无损透明(ALT)功能需要每个连接上均不存在运行中的事务,主备切换时需要等待已经执行的事务结束。等待事务结束的时间称为排干机制超时时间,通过参数“rds_tac_drain_timeout”控制,默认为5s,取值范围为1-60s。 业务压力较大,Prepare语句个数较多或者事务执行时间较长时,建议增加超时时间。不建议调小超时时间,如果在该时间内有连接没有排干事务,则这些连接不具有ALT的能力。 |
应用无损透明原理
TaurusDB支持读写ALT和只读ALT。
版本与约束
| 功能 | 版本约束 |
|---|---|
| 读写ALT |
|
| 只读ALT |
|
约束限制
- 实例为一主多读,至少有一个只读节点,已开启数据库代理且必须通过数据库代理地址连接实例。
- 只读数据库代理模式下不支持应用无损透明(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数据库代理注意事项。
不支持的功能
| 模块 | 描述 |
|---|---|
| 用户设置的系统变量 |
|
| 数据库代理 |
|
| 临时表 | 不支持用户临时表。 |
| 安全事务边界 |
|
| 转移Prepare语句 |
|
| 其他功能 | 不支持开启透明数据加密(TDE)。 |

