Назад | Перейти на главную страницу

У меня одна база данных (mysql). Какая стратегия «отработки отказа» лучше?

Поставляется ли MySQL со встроенным автоматическим аварийным переключением? Или существуют балансировщики нагрузки, которые могут «определить», жива ли база данных ... а если нет ... передать ее в базу данных аварийного переключения?

Я знаю базовый MySQL, но не знаю, как лучше всего спроектировать отказоустойчивость для одной главной БД.

Сам по себе MySQL не обеспечивает механизма аварийного переключения. На самом деле это довольно сложная проблема для универсального решения, поэтому лучше решать ее в индивидуальном порядке с помощью определенных инструментов.

Поскольку вы не упоминаете, какую ОС вы используете, я просто приведу несколько примеров, как это может работать с Linux. Когда у вас настроена обычная репликация, вы можете взглянуть на Linux HA проект для инструментов, чтобы произошло аварийное переключение. С их помощью вы можете продвигать подчиненную БД при выходе из строя главного.

Другая возможность - использовать DRBD, что приведет к репликации на уровне хранилища, чтобы MySQL фактически не знал, что репликация происходит. Проблемы с этим подходом похожи на проблемы с регулярной репликацией, ваш основной и главный должны знать, какова ситуация. Для этого лучше всего подойдут инструменты Linux HA.

MySQL также имеет функции кластеризации, но для них потребуется как минимум три сервера, что накладывает некоторые ограничения на модель данных. С небольшими базами данных это не стоит проблем.

Вдобавок к этому вы захотите использовать какой-то пул соединений. Это сделает переключение на отказ прозрачным для клиентов, так как им не нужно будет знать, какая база данных фактически выполняет работу.

MySQL можно использовать с реплицированной стратегией, но в прошлый раз, когда я смотрел, поддержка для нее была не такой хорошей, как для других баз данных. Вам нужно изучить репликацию MySQL, чтобы прочитать об этом.