你好,我想问一下,当我连接 obproxy 使用读写分离功能时,当前事务中执行写操作时,后端集群发生故障切换,后续事务执行会有什么表现,obproxy 会给用户发送事务中止异常吗?
我理解你这里说的“后端集群发生故障切换”是指主副本发生切换,具体表现如下:
当 OceanBase 主副本发生切换时,后续事务的执行会有如下表现:
-
事务的提交或回滚:如果在主副本切换时,当前事务尚未提交或回滚,那么 OBProxy 会检测到主副本的切换,并将请求重定向到新的主副本。新的主副本会继续处理未完成的事务。
-
客户端断开连接:如果在主副本切换过程中,客户端与 OBProxy 的连接断开,那么 OceanBase 数据库会隐式地发起一个回滚请求,将未提交的事务回滚。
-
新的事务开启:一旦主副本切换完成,OBProxy 会将后续的请求路由到新的主副本,新的主副本会开启新的事务来处理这些请求。
-
OBProxy 的容错处理:OBProxy 会实时监控数据库集群的状态,当检测到主副本发生切换时,会自动将请求路由到新的主副本,确保服务的连续性和高可用性。
综上所述,当 OceanBase 主副本发生切换时,OBProxy 会确保事务的正确处理,未提交的事务可能会被回滚,而新的事务会在新的主副本上继续执行。
另外读写分离 最佳实践参考下
https://www.oceanbase.com/docs/common-best-practices-1000000001489641?_gl=1b97xut_gaMTIwMjU5NTAzNC4xNzE0OTc1MTY1_ga_T35KTM57DZ*MTcyOTIyOTY3Ny4yNjcuMS4xNzI5MjQ1NDI1LjU3LjAuMA…
你好 我补充一下我的描述 就是当前事务写语句上发生failover 主副本切换完成 当前事务的后续sql语句还能继续执行吗 还是由obproxy进行异常返回 直到新事务开启在继续执行
你参考上述回答的第一条,正常情况下 新的主副本会继续处理未完成的事务。
所以 obproxy还会保留事务的状态,将当前未完成的事务和旧主节点上已执行但未提交的重新发到新主节点上 重做一遍是嘛
是的