Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Репликация типа мастер-мастер в MySQL

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Возможно ли, и какие подводные скалы имеются?
nkl
Отправлено: 28 Января, 2013 - 08:22:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 305
Дата рег-ции: Янв. 2012  


Помог: 1 раз(а)




Здравствуйте. Приступая к написанию ТЗ для крупного проекта заказчик дал четкое требование: система должна быть доступна для работы даже при падении соединения с интернетом. Система представляет собой сложный документооборот внутри учебного заведения. Не долго думая, пришла в голову идея поднять в интрасети заказчика связку LAMP идентичную той, что будет крутиться в интернете. Тут же возник вопрос по поводу репликации. Я так понимаю, единственный безболезненный способ репликации, это создание реплики БД в интрасети заказчика только в режиме чтения. Но задача стоит ясно, кроме чтения, должна быть и возможность записи.
Почитав несколько статей на хабре, понял, что репликация типа мастер-мастер может привести к полной каше в БД. Вопрос знатокам: так ли это? Или существует безболезненные методы репликации типа мастер-мастер? Как это реализовано в Active Direcotory Windows? Почему в активном каталоге винды репликация типа мастер-мастер возможна, причем без каких либо подводных камней, а в MySQL нет. Может быть можно написать какой либо костыль на Perl, что бы как-то синхронизировал таблицы и писал в обе БД только самые последние изменения. Если честно, совершенно не представляю как это возможно...
 
 Top
Мелкий Супермодератор
Отправлено: 28 Января, 2013 - 08:45:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Разумеется, это так. Мастер-мастер - всегда головная боль.
Известная аксиома услуг "быстро, качественно, дешево - выберите любые 2 пункта" в мире СУБД предлагает взаимоисключающий выбор между доступностью, производительностью и согласованностью данных.

nkl пишет:
Почему в активном каталоге винды репликация типа мастер-мастер возможна, причем без каких либо подводных камней

Это значит, что эти самые камни там есть. Потому что задача одновременного достижения всех 3 пунктов нерешаема в принципе. Не знаком, возможно там пожертвовали производительностью и работает двухфазный коммит. Что не исключает определённой каши, если изолировать оба мастера друг от друга и начать делать противоречивые настройки.

nkl пишет:
костыль на Perl, что бы как-то синхронизировал таблицы и писал в обе БД только самые последние изменения

И познакомитесь как раз с проблемой невозможности нормального функционирования мастер-мастер.
Что вы будете делать, если будет такая ситуация:
0) соединение между машинами пропало
1) первый мастер обновил значение в строке на число 5
2) второй мастер обновил то же самое значение на число 6
Какое из них правильное и после восстановления связи должно быть синхронизировано? 5? 6? Или же вовсе 7?

nkl пишет:
создание реплики БД в интрасети заказчика только в режиме чтения

Почему не на удалённой площадке как раз? Это же документооборот внутри учебного заведения.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 01 Февраля, 2013 - 03:38:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




Мелкий пишет:
Какое из них правильное и после восстановления связи должно быть синхронизировано? 5? 6? Или же вовсе 7?
То, которое было последним. И гори оно огнем, этот мастер-мастер.
 
 Top
Zuldek
Отправлено: 01 Февраля, 2013 - 09:49:06
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2122
Дата рег-ции: Июнь 2010  


Помог: 50 раз(а)




А не вариант развернуть единый сервер БД в локали заказчика и к нему подвязать всю систему? Нужно смотреть по требованиям к системе и т.д., но если это документооборот одной конкретной организации, то такое же вполне возможно сделать, поскольку нагрузки и количество соединений можно точно спрогнозировать.

В противном случае, если, как вы указали, репликация средствами мускула вас не устраивает (фактическая остановка приложения), то ваше решение - слать данные с слейва на мастер (или мастер-мастер) через веб-сервис/любой аналогичный костыль. При этом между серверами придется делать OpenVPN. Так или иначе, это будет костыль, причем довольно шаткий. Ещё можно посмотреть в сторону облачных баз данных, но требований к системе не знаю, потому не уверен можно ли этот подход вам рекомендовать.

На вашем месте серьёзно бы подумал на предмет поднятия единого сервера БД в локали заказчика.

Если позволяет ТЗ, можно строить не обмен данными в реальном режиме, а работу через одно мастера, например внешнего, а при падении интернет-соединения система остается живой в локали и работает через локальный сервер БД. В живом режиме синхронизировать БД, допустим раз в несколько часов средствами и, после появления доступа обновлять данные на внешнем мастере и переключать клиентов обратно на него.

(Отредактировано автором: 01 Февраля, 2013 - 10:10:40)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Администрирование БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB