使用RegionlessDB集群实现异地多活
操作场景
业务部署在多区域时,可以使用RegionlessDB集群从就近区域访问数据库。如图1所示,一个RegionlessDB集群拥有一个主实例和两个从实例,主实例负责接收和处理读写请求,而从实例仅接收读请求。当开启写转发功能后,从实例接收到的写请求将自动转发到主实例进行处理。主实例完成写入操作后,会将数据同步到其他所有从实例,从而降低跨区域网络时延。使用写转发可以简化写数据流程,直接通过从实例IP地址接入数据库服务执行读写操作,同时在保持数据一致性的情况下,不影响就近读取的能力。
RegionlessDB集群约束限制
请参见约束与限制。
写转发约束限制
- 写转发会创建用户“_@gdb_WriteForward@_”,请不要修改或者删除该用户,否则写转发功能无法正常运行。
- 针对会隐式提交的命令,在不支持写转发的情况下,也会自动提交当前节点和主节点对应的事务。
- 针对全局一致性级别,每个事务第一次访问数据之前,需要使用会话池中的连接,从主节点获取数据点位(LSN),如果没有可以使用的会话,可能会导致读取数据的命令失败。
- 如果用户使用写转发的会话出现连接错误,并且用户处于多语句事务中,服务端会主动关闭与客户端和主节点的连接,保证客户端能够感知到对应的错误。
- 主从实例的版本需要保持为最新版本。
- 由于写转发是转发到主节点上执行,如果只读节点有相同数据库下的同名临时表,最终以主节点的数据为准。
- 从实例如果参与了故障转移,写转发相关参数(“rds_open_write_forwarding”和“rds_write_forward_read_consistency”)会恢复为默认值。
- 支持与不支持的场景如表1所示。
表1 写转发支持与不支持的场景说明 约束限制
说明
支持场景
- 写转发只有在从实例的事务隔离级别为RR的场景下才支持。
- 写转发支持如下命令:
- SQLCOM_UPDATE
- SQLCOM_INSERT
- SQLCOM_DELETE
- SQLCOM_INSERT_SELECT
- SQLCOM_REPLACE
- SQLCOM_REPLACE_SELECT
- SQLCOM_DELETE_MULTI
- SQLCOM_UPDATE_MULTI
- SQLCOM_ROLLBACK
如果执行了不支持的写转发命令,会出现如下报错信息:ERROR xxx (yyy): This version of MySQL doesn't yet support 'operation with write forwarding'.
其中“operation”为具体不支持的操作类型。
不支持场景
- 当前版本从实例进行写转发时,暂不支持显示WARNING和RECORD信息。
- 当前版本从实例进行写转发时,暂不支持中断执行中的SQL请求。
- 不支持SELECT FOR UPDATE语句。
- 不支持EXPLAIN写转发语句。
- 不支持写转发的语句包含SET VARIABLE。
- 在写转发开启的场景下,不支持SAVEPOINT。
- XA事务中不支持写转发。
- 当前不支持START TRANSACTION READ WRITE,可以直接使用START TRANSACTION进行测试写转发。
- 存储过程中不支持写转发。
- 写转发开启时,不支持创建临时表,如果需要创建临时表,可以暂时关闭写转发进行创建。









