@kamenevn

Резервный сервер базы данных mysql?

Добрый день.
Хотелось бы поинтересоваться таким вопросом: как сделать резервный сервер базы данных - mysql.
Дано:
1) два сервера совершенно в разных точках мира( 1-й главный, 2-й пока под бэкапами )
2) проект на nginx + php + mysql

Задача: Сделать отказоустойчивую систему. Если на главном сервере что-то ломается, или нагрузка, то пользователя перенаправлять на другой сервер.

Если с файлами и nginx всё понятно - для файлов rsync или нечто подобное, то вот с базой данных не понятно. База достаточно большая, есть таблицы на 2 000 000 записей, есть и больше. Репликация вида master-master - не подходит, ставили, тестили - крайне не стабильно работает, да и нужно моментальное обновление базы, т.к. работаем с деньгами пользователей, если что-то где-то потеряется, то будет проблема.

Есть ли какое-либо решение?
  • Вопрос задан
  • 2646 просмотров
Пригласить эксперта
Ответы на вопрос 2
alexclear
@alexclear
A cat
Репликация вида master-master не работает вообще. Никогда. Забудьте про нее, не упоминайте про нее, считайте, что ее нет.
Встроенная репликация в MySQL вообще работает работает из рук вон плохо.
Возможно, вам стоит рассмотреть вариант записи в две базы прямо в приложении или же репликации через умный прокси, который умеет ожидать ответ от двух баз сразу. Попробуйте rubyrep (только не верьте тому, что у них написано про master-master).

PS. Кстати, неплохим вариантом является MySQL поверх DRBD - репликация на уровне блочного устройства, но с географически распределенными серверами работать это будет медленно. Но, по крайней мере, это будет работать.
Ответ написан
Комментировать
Alexufo
@Alexufo
противоречивый, сложный, весь компьютерный.
Моментальная репликация как вы понимаете, работать не может при физически далеких серверах. Вы только добавляете проблем, прибавляя вероятность глюков на канале между базами. У oracle конечно же есть репликация отазоустойчивая, с кластерами всякими. Дорого)
У azure есть sql бд с тройной репликацией по дефолту.
Но я думаю, вам лучше всего держать свой сервер с репликацией на уровне железок.
И паралельно можете сливать какой нибудь лог именно себе на сервер, просто лог транзацкий, чтобы вслучае чего уж... уж.. точно могли руками все проверить. Вот лог с последними 1000 транзациями можете себе реплицировать куда угодно в силу пары клибайт за транзацию. Но я тут не являюсь специалистом, опыта такого нет - только теоретик)
mssql ведет лог транзакций в отдельный от базы журнал, по корому можно отказываться и накатываться.

Да, у mysql все есть на сайте - и горячий бекап и реплика. Только уже за денежку)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы