Как спроектировать архитектуру синхронизации данных для MySQL?

Исходные данные:

  • центральный mysql работает на Amazon RDS (доступа к binlog нет)
  • есть 10-20 локальных физических сервера в разных точках мира
  • локальные сервера используют недолго — до двух недель
  • связь между локальными и центральными нестабильна, локальные могут уходить оффлайн
  • данные на локальных и центральном сервере могут обновляться одновременно ( ключи при этом пересекаться ну будут)


Задача — синхронизировать все локальные и центральный сервера в реальном времени c минимальной задержкой.

Думаем реализовать решение собственными скриптами.

Может есть стандартные решения?
  • Вопрос задан
  • 2743 просмотра
Пригласить эксперта
Ответы на вопрос 1
kocherman
@kocherman
Я уже такое реализовывал. Правда на MSSQL 2000, но суть не меняется.

Все сущности БД содержали такие поля:

OBJECT_ID
OBJECT_NAME
OBJECT_DATE_INSERT
OBJECT_USER_INSERT
OBJECT_DATE_UPDATE
OBJECT_USER_UPDATE
DELETED

Выше — это, как бы, параметры класса Object, от которого наследуются все остальные классы.

OBJECT_ID — уникальный для всех объектов БД.

Один основной сервер выделяет раз в сутки диапазоны ID для локальных серверов, и, собственно, раздает их при новой синхронизации.

Синхронизация проходит в 4 этапа:

1. Выбираем новые объекты, созданные на локальном сервере:
LOCAL_SERVER.OBJECT_DATE_INSERT > LAST_SYNC_DATE

2. Выбираем измененные на локальном сервере объекты с момента последней синхронизации:
LOCAL_SERVER.OBJECT_DATE_UPDATE > LAST_SYNC_DATE

3. Выбираем новые объекты, созданные на всех остальных локальных серверах кроме нашего:
REMOTE_LOCAL_SERVER.OBJECT_DATE_INSERT > LAST_SYNC_DATE

4. Выбираем измененные, соответственно, на всех остальных локальных серверах объекты:
REMOTE_LOCAL_SERVER.OBJECT_DATE_UPDATE > LAST_SYNC_DATE
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы