Если вам в целях HA, то есть несколько вариантов. И однозначно хорошего среди них нет — нужно смотреть по обстоятельствам. Опять же много зависит, от того какая нужная надежность.
Если нужно очень очень надежно и малейшая потеря данных недопустима, то придется платить производительностью в любом случае. Обычная, асинхронная репликация вам не подойдет, так как не будет 100% уверенности, что данные успели уйти на слейв.
Можно использовать
DRDB + Heartbeat
Надежно, но пенальти на запись. И сеть между серверами должна быть хорошей.
Для FreeBSD можно нечто подобное соорудить при помощи репликации на уровне ZFS.
В 5.5 появилась
репликация с подтверждением записи данных, хотя бы на один из слейвов.
Если кратковременный простой и небольшая потеря данных, допустимы (внимание, я не предлагаю плевать на юзерские данные! Но одно дело банк и финансы, другое — потерять два три голоса за авотарочку...), то асинхронная репликация, вполне хорошее решение.
Однако, что то (например nagios) должен мониторить SHOW SLAVE STATUS, что бы вовремя заметить если репликация слетела.
Переключаться на слейв можно либо на уровне конфига вашего приложения. Либо используя
виртуальный IP, котроый в случаеумирания мастера быстро перекидывается на живой слейв.
А вот использовать запасную БД для балансировки запросов не всегда хорошая идея. Если упадет мастер, то запросы который раньше обрабатывались двумя серверами придется, придется отрабатывать одному слейву. Код должен быть готов, отрубить ряд ф-ций при таком раскладе.
Это все мое имхо…