首页 > 解决方案 > maxscale 代理不会将来自 flask-sqlachamy 的读取请求路由到从属设备

问题描述

我有一个带有一个主设备和两个从设备的 maxscale mariadb 集群。我正在使用 flask-sqlachemy ORM 进行查询和写入。

我写了风格的阅读查询

db.session(User).join()....

现在我所有的读取查询都将扩展到最大规模的主节点

以下是maxcalse日志

2021-09-14 17:38:26   info   : (1239) (Read-Write-Service) > Autocommit: [disabled], trx is [open], cmd: (0x03) COM_QUERY, plen: 287, type: QUERY_TYPE_READ, stmt: SELECT some_col FROM user 
2021-09-14 17:38:26   info   : (1239) [readwritesplit] (Read-Write-Service) Route query to master: Primary <

我也尝试过其他方法

conn = mysql_connector.connect(...)
conn.autocommit(True)
cursor = conn.cursor()
cursor.execute(query)

这工作正常,并将查询路由到从属设备之一。

但我的大部分代码都是用 ORM 风格编写的。有没有办法在使用时实现这一点flask-sqlalchemy

标签: mysqlflask-sqlalchemymaxscale

解决方案


如果禁用自动提交,则始终有一个打开的事务:用于START TRANSACTION READ ONLY启动显式只读事务。这允许 MaxScale 将事务路由到从站。


推荐阅读