MySQL dual master replication и wireless-связь

Bakti9rov

!*|=?
MySQL dual master replication и wireless-связь

Всем привет,

Имеется два сервера (2 стойки блейд-сервера), настроенных друг на друга как слейвы (Dual Master Replication).

Все операции DDL могут выполняться на обоих серверах. Задача MMR - синхронизировать данные между двумя серверами.

Между ними существует соединение по беспроводной связи, и часто происходят сбои соединения.

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

Когда происходит обрыв соединения, каждый из серверов начинает работать автономно, сливая изменения в бинарный лог. При возобновлении связи и восстановлении репликации, возникает конфликт данных.

Кто может предложить варианты решения или предоставить консультацию за отдельную плату - просьба прислать свои контакты в ЛС.

-~{}~ 20.12.09 19:47:

Рассматриваю также вариант с mysql-proxy (rw-splitting, прокси висит перед каждым из серверов), но пока не нашел подходящих скриптов Lua для обработки ситуации, когда обрывается соединение между серверами.

p.s. ап теме!
 
У нас три сервера работают по такой же схеме. Бывает, что связь рвется, но после того как она снова установлена, slave вытягивает все из бинарного лога мастера, с той позиции на которой он остановился. Ни разу не было "конфликтов данных" на уровне mysql. Вы не могли бы уточнить, что вы имеете ввиду под этим самым конфликтом?
 
dadoc

проблема возникает в случае, когда primary keys генерируются на стороне внешнего приложения (не GUID и не AUTO_INCREMENT).

также, в случае, когда INSERT происходит на один сервер, а запросы UPDATE/SELECT/DELETE -- попадают на второй сервер, который еще не синхронизирован с первым.

иногда после возобновления перерыва в соединении возникают лаги из-за объемистых бинарных логов

-~{}~ 23.12.09 14:09:

а три сервера у вас в какую схему выстроены? Round Robin?

-~{}~ 27.12.09 18:52:

бамп теме. Кто-нибудь сталкивался с вышеперечисленным?
 
>>когда primary keys генерируются

самое тупое, что пришло в голову:

pk = max(pk);
while ((++pk % servers_count) != server_id) ;

а с лагами уж ничего не поделаешь...
 
Сверху