Репликация MySQL. Должен ли я обрабатывать балансировку нагрузки из своего клиентского кода (PHP)? - PullRequest
2 голосов
/ 11 мая 2010

В среде репликации главный-подчиненный MySQL, если у меня есть 4 подчиненных сервера, как я могу выполнить выборочные запросы с балансировкой нагрузки?

Должен ли я написать класс PHP для работы с 4 ведомыми или можно адресовать запросы к собственному решению MySQL для балансировки нагрузки? Есть ли какое-либо решение для балансировки нагрузки MySQL?

Могу ли я использовать какой-либо другой инструмент для распространения моих запросов? Какова типичная настройка в подобных ситуациях?

Спасибо за все ответы!

Ответы [ 2 ]

3 голосов
/ 11 мая 2010

Общепринятой практикой было бы установить что-то вроде ldirectord перед вашим кластером mysql, чтобы предоставить виртуальный ip в качестве адреса с балансировкой нагрузки для кластера, тогда это могло бы распределить ваши запросы по различным серверам mysql.

Для этого потребуется маршрутизация ipvs, которая может / не может быть излишней для вашей конкретной ситуации, возможно, php-контроль балансировки нагрузки будет соответствовать тому, чего вы пытаетесь достичь.

2 голосов
/ 11 мая 2010

Да и нет.

На самом деле нужно ответить на два вопроса:

  1. Должен ли этот запрос идти к ведомому устройству или ведущему БД?
    • Эта логика, вероятно, должна быть в PHP. Часто бывают случаи, когда у вас должны быть самые свежие данные, которые нельзя получить от раба. Например, если пользователь изменяет страницу, вам необходимо создать обновленную страницу из главной базы данных - изменения, возможно, еще не внесены в подчиненные базы данных. Это зависит от конкретного приложения, поэтому сторонние инструменты могут не справиться с этим за вас.
  2. К какому ведомому должен обращаться этот запрос?
    • Это, вероятно, вам не нужно писать самостоятельно - для вашего приложения не очень важно, какой конкретный подчиненный обрабатывает запрос. Существующие инструменты должны хорошо с этим справляться.
...