Предположим у нас есть два сервера: серверА и серверБ. На сервереА у нас master БД, а на сервереБ у нас slave. Между ними есть репликация master-slave и включен hot standby. Также на каждом сервере запущен какой-то свой api, который взаимодействует с базой. Собственно вопрос, к чему мне нужно подключать api на сервереБ? Как сделать так, чтобы он читал из slave, но при этом писал в master?
Только Вы можете это знать (т.к. в общем случае "читал из slave, но при этом писал в master" — практически гарантия получения неконсистентных данных в базе).
В каноничном случае у каждого сервиса (не важно, где развёрнутого) есть пул соединений с базой. Этот пул (при правильной реализации) умеет слать запрос либо на мастер, либо на один из слейвов (пул сам их перебирает, следит за занятыми, отвалившимися, а также за прицепление открытых транзакций и prepare-statements к конкретной сессии бд). Ну а приложению остаётся использовать правильный метод для каждого запроса: слать его на мастер или на один из слейвов.
Обсуждают сегодня