Как реплицировать данные между главным сервером и удаленным автономным подчиненным сервером - PullRequest
0 голосов
/ 04 мая 2020

У меня есть следующая система управления:

Центральный офис с postgresql базой данных (основной), которая хранит данные обо всех удаленных судах и обрабатывает все идентификаторы. Каждое судно имеет свой собственный postgresql сервер (ведомый), который хранит данные об этом частном судне. Центральный сервер и удаленные серверы не подключены через сеть

Мне нужно организовать репликацию данных между серверами. Сервер Office имеет приоритет.

В настоящее время передача данных организована по следующей схеме:

  • master создает файл экспорта, содержащий всю базу данных подчиненного устройства
  • экспорт мастера файл передается по электронной почте и через спутник. inte rnet
  • slave импортирует эти файлы, полностью переписывая свою собственную базу данных
  • каждый раз, когда происходит изменение, slave помечает измененные строки, задавая значения c flags (isAdded, isModified, isDeleted)
  • slave создает файл экспорта, в который записываются все измененные строки
  • файл экспорта slave передается по электронной почте и через спутник inte rnet
  • главный файл подчиненного импорта:
    • , если строка имеет флаг isAdded = TRUE, она создает новую строку (INSERT INTO ...)
    • , если строка имеет флаг isModified = TRUE, она ищет для существующей строки и обновляет ее (UPDATE ... WHERE id = ...)
    • , если строка имеет флаг isDeleted = TRUE, она ищет существующую строку и удаляет ее (DELETE ... FROM ... WHERE id = ...)
  • мастер сбрасывает isAdded = NULL, isModified = NULL, isDeleted = NULL флаги, которые в указывает, что строка принята сервером и ее идентификатор действителен.
  • master снова создает файл экспорта и т. д. ...

Эта схема репликации, очевидно, очень ошибочна - она Это было временное решение для перебора.

Основная проблема в том, что он работает, только если передача полудуплексная (если я правильно понимаю термин). Slave не может вносить изменения в базу данных, когда она уже создала свой файл экспорта, но не импортировала его из master.

Я хотел ввести некоторую репликацию, основанную на временных отметках, но главная проблема - неправильная дата и настройки времени на удаленных судах и невозможность подключения к NTP-серверам для синхронизации.

Я также хотел ввести некоторые виды импорта-экспорта для отслеживания изменений, но мне кажется, что я собираюсь заново изобрести колесо.

Существует ли какое-либо общее решение для автономной репликации на основе файлов, кроме разработки с нуля? Какой-то отраслевой стандарт?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...