Я использую 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:[email protected]:3306/DATABASE'
но когда я запускаю API в своей тестовой среде, API-интерфейсы, которые просто читают данные из БД, выполняются просто отлично, но API-интерфейсы, которые что-то записывают в БД, выдают мне в основном следующие ошибки:
(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 и SQLALCHEMY с HAProxy? Как указать моему приложению использовать один URL-адрес для write
операций и другой HAProxy
URL-адрес для read-only
операций?
Я не нашел помощи в документации SQLAlchemy.
read
, а какой дляwrite
? 26.03.2018bind='master'
, вам нужно сообщить своему приложению, чтобы оно записывало в мастер, поскольку вы не можете писать для чтения реплик 26.03.2018bind='master'
в API, которые являютсяwriting
? 26.03.2018