Read/Read-Write Amazon Web Services RDS 的 URI

Read/Read-Write URIs for Amazon Web Services RDS

我正在使用 HAProxy 为我的应用程序的 AWS RDS (MySQL) 负载平衡,它是使用 Flask 编写的。

HAProxy.cfg 文件具有以下数据库配置

listen mysql
bind 127.0.0.1:3306
mode tcp
balance roundrobin
option mysql-check user haproxy_check
option log-health-checks
server db01 MASTER_DATABSE_ENDPOINT.rds.amazonaws.com
server db02 READ_REPLICA_ENDPOINT.rds.amazonaws.com

我正在使用 SQLALCHEMY,它的 URI 是:

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://USER:PASSWORD@127.0.0.1:3306/DATABASE'

但是当我在我的测试环境中 运行 一个 API 时,只是从数据库中读取内容的 API 执行得很好,但是 API正在向数据库写入内容的 s 给我的错误主要是:

(pymysql.err.InternalError) (1290, 'The MySQL server is running with the --read-only option so it cannot execute this statement')

我想在这种情况下我现在需要使用 2 个 URL,一个用于 read-only 操作,一个用于 writes

Flask 和带有 HAProxy 的 SQLALCHEMY 如何工作? 我如何告诉我的应用程序使用一个 URL 进行 write 操作和其他 HAProxy URL 到 read-only 操作?

我没有从 SQLAlchemy 的文档中找到任何帮助。

Binds

Flask-SQLAlchemy can easily connect to multiple databases. To achieve that it preconfigures SQLAlchemy to support multiple “binds”.

SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://USER:PASSWORD@DEFAULT:3306/DATABASE'
SQLALCHEMY_BINDS = {
    'master': 'mysql+pymysql://USER:PASSWORD@MASTER_DATABSE_ENDPOINT:3306/DATABASE',
    'read': 'mysql+pymysql://USER:PASSWORD@READ_REPLICA_ENDPOINT:3306/DATABASE'
}

指绑定:

db.create_all(bind='read') # from read only
db.create_all(bind='master') # from master