powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
19 сообщений из 19, страница 1 из 1
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934265
Ковыряюсь сейчас с древним Astra Linux 1.3 (Debian Wheezy с ядром 3.2.0), и нужно мне сделать синхронизацию идентичных таблиц на 5-ти хостах.

Таблицы имеют идентичную структуру, имеют поле с PRIMARY KEY id, имеют поле с TIMESTAMP, имеют поле с UUID. Содержимое записей не меняется. Синхронизация должна быть двунаправленная (master-master?). То есть, нет никакой «главной» таблицы. Просто все записи, созданные на разных хостах, должны в итоге присутствовать на инстансах PostgreSQL на всех хостах.

Скорость репликации не важна. Достаточно, если синхронизация будет происходить периодически. В минуту каждый хост может добавить в таблицу от 0 до ~1000 новых записей. В любой момент сеть может «развалиться» и хосты не смогут видеть друг друга, при этом новые записи будут создаваться. После восстановления сети все новые записи должны засинхронизироваться на всех хостах.

Не факт, что все хосты будут работать одновременно. Может 4 хоста работать, а 1 быть выключен. После его включения он должен принять все данные, которые «пропустил» когда был выключен. Может быть и наоборот: работает только 1 хост, остальные выключены. После включения остальных хостов, данные с первого хоста должны перетечь на все остальные.

* * *

Сейчас я раздумываю, с помощью каких инструментов проще всего решить эту задачу. Насколько я понял, средства репликации, существующие для PostgreSQL 9.1 (тот же slony), умеют делать только master-slave репликацию, да и работа такой репликации в условиях нестабильной сети под большим вопросом.

Мне нужно что-то более простое, типа pt-table-sync от Percona, только не для MySQL, а для PostgreSQL. И чтобы оно работало на древних линухах.

Перед тем, как я начну писать решение на коленке, я хочу попробовать решить задачу уже готовыми инструментами . Кто что может предложить? Да, сменить дистрибутив не получится, ибо при аттестации/сертификации/лицензиации средства стандартного программного обеспечения зафиксированы.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934348
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации

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


при такой постановке задачи вам придется таки велосипед делать... может поверх slony через http://www.slony.info/documentation/2.2/logshipping.html
(чтобы хотя бы эту часть не писать самому).
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934375
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторимеют поле с PRIMARY KEY id,

Кстати, а что вы будете делать если на 2х хостах образуется 2 разные записи с одинаковым id.
Или если это невозможно в вашей архитектуре то как это обеспечивается?
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934423
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации,

master - master за деньги

Postgres Pro Enterprise
BDR
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934432
Maxim BogukКстати, а что вы будете делать если на 2х хостах образуется 2 разные записи с одинаковым id.
Или если это невозможно в вашей архитектуре то как это обеспечивается?
Конечно, могут быть одинаковые id в разных базах. Для уникальной идентификации сделано поле UUID.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934446
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fte
Что за форма регистрации,

master - master за деньги

Postgres Pro Enterprise
BDR

а оно есть 9.1? да еще и сертифицЫрованное...
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934467
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mefman,

Дык в Астролинуксе вроде 9.6 есть, или я ошибаюсь?
Postgres Pro Enterprise - ФСТЭК, МО нету
BDR - естественно нет ничего
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934499
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации
Maxim BogukКстати, а что вы будете делать если на 2х хостах образуется 2 разные записи с одинаковым id.
Или если это невозможно в вашей архитектуре то как это обеспечивается?

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

т.е. у вас в разных базах будет разные id для одного и того же uuid?
а зачем вам вообще тогда id primary key? какую он функцию выполняет если идентификация записи по uuid идет?
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934503
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fte
mefman,

Дык в Астролинуксе вроде 9.6 есть, или я ошибаюсь?
Postgres Pro Enterprise - ФСТЭК, МО нету
BDR - естественно нет ничего

Я не вникал. ТС написал, что текущие версии поменять не удастся.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934505
mefman
Я не вникал. ТС написал, что текущие версии поменять не удастся.


Да, не удасться. У нас сертифицирован Astra Linux 1.3, это да же не 1.5. Поэтому имеем PostgreSQL 9.1.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934526
Maxim Boguk
а зачем вам вообще тогда id primary key? какую он функцию выполняет если идентификация записи по uuid идет?


Есть идея синхронизироваться по "точкам синхронизации", которые и представляют из себя id. То есть, иметь, например, на каждом узле список точек синхронизации с другими узлами. Например, для 1-го узла будет таблица:

Код: php
1.
2.
3.
4.
5.
var | value
last_syncro_id_host2 | 15348
last_syncro_id_host3 | 11795
last_syncro_id_host4 | 8755
last_syncro_id_host5 | 12345



И тогда для получения новых данных нужно будет просто запросить новые строки с id больше, чем записано в таблице, после чего обновить значение id в таблице.

Запрашивать новые данные по точке во времени нельзя по следующей причине. В сети, помимо пяти хостов с PostgreSQL имеется куча хостов, которые на PostgreSQL-хост складывают данные (этот хост Мастером зовется, но не в смысле репликации master-slave). Когда сеть распадается, в отвалившемся сегменте появляется свой Мастер. Далее возможна ситуация, когда в этом отвалившемся сегменте «проснулся» давно не работавший хост, и выстрелил на мастер из своего кеша старые данные со старым временем (да у всех хостов еще есть SQLite-кеш). То есть, на Мастере отвалившегося сегмента появилась "вставка" старых данных. И таких вставок может быть несколько. И не надо забывать, что на нем же происходит и добавление новых данных. Потом сеть собирается, и Мастера должны засинхрить свои таблицы. Если ориентироваться по времени, то есть синхрить от последней временнОй точки синхронизации, то "вставка" старых данных обнаружена не будет.

А вот если синхрится по id, то старые данные со старым временем, в момент их приема Мастером, получат новый id, и при синхронизации с другими Мастерами они будут обнаружены.

Но и у этой идеи есть проблемы. Если на каком-то Мастере будет очищена база, или база будет "откатана" назад из какого-то бекапа, то новые id будут считаться с нуля. А в таблице синхронизации записаны какие-то большие id. И поэтому синхронизация заработает только после того, как id доберется до нужного значения. Или нужно каким-то образом следить, что если база обнулена, то и в таблице синхронизации нужно обнулить значение. Как такое слежение сделать, я пока не знаю.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934543
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации,

сам не использую, не вникал, но на мейлинг лист пришло, и как-то вспомнил вопрос Bucardo можно посмотреть, может подойдёт.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934634
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скачать свежую PG значит нельзя, а скачать Slony/Bucardo итд можно? Где логика?
Почему бы не скачать подобным образом исходники БД, слегка их поправить, чтобы говорила всем что она версии 9.1, и не заниматься другими извращениями?
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934659
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mefman
Скачать свежую PG значит нельзя, а скачать Slony/Bucardo итд можно? Где логика?
Почему бы не скачать подобным образом исходники БД, слегка их поправить, чтобы говорила всем что она версии 9.1, и не заниматься другими извращениями?


Ага. А потом после аудита безопасности идти в тюрьму?! :-)
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934690
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul
mefman
Скачать свежую PG значит нельзя, а скачать Slony/Bucardo итд можно? Где логика?
Почему бы не скачать подобным образом исходники БД, слегка их поправить, чтобы говорила всем что она версии 9.1, и не заниматься другими извращениями?


Ага. А потом после аудита безопасности идти в тюрьму?! :-)

тогда и за внедрение Slony/Bucardo можно в тюрму сесть,
и за самописные решения, если не озаботиться их сертификацией.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934738
fte
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mefman
fte
mefman,

Дык в Астролинуксе вроде 9.6 есть, или я ошибаюсь?
Postgres Pro Enterprise - ФСТЭК, МО нету
BDR - естественно нет ничего

Я не вникал. ТС написал, что текущие версии поменять не удастся.


Дык, связываетесь с Postgres Pro ..., ежели Вас, всё устроит, то
покупаете Postgres Pro Enterprise + support
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934742
mefman
тогда и за внедрение Slony/Bucardo можно в тюрму сесть,
и за самописные решения, если не озаботиться их сертификацией.


Да, левые пакеты низзя, сертификацию не пройдешь. Можно, с гемором, самосборные из исходников пакеты, с полным описанием каждой переменной и функции на русском языке. Поэтому небольшой скрипт (до 10 тыщ строк) я смогу таки документировать, а что-то большее - это еще заняться автотрансляцией комментариев на руссиш и исправлением фраз их чтоб была связная речь а не бред транслятора. Для такого действия нужен очень серьезный повод: поставил, прописал IP хостов и имя синхронизирующейся таблицы, и оно сразу само заработало.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934799
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации
mefman
тогда и за внедрение Slony/Bucardo можно в тюрму сесть,
и за самописные решения, если не озаботиться их сертификацией.


Да, левые пакеты низзя, сертификацию не пройдешь. Можно, с гемором, самосборные из исходников пакеты, с полным описанием каждой переменной и функции на русском языке. Поэтому небольшой скрипт (до 10 тыщ строк) я смогу таки документировать, а что-то большее - это еще заняться автотрансляцией комментариев на руссиш и исправлением фраз их чтоб была связная речь а не бред транслятора. Для такого действия нужен очень серьезный повод: поставил, прописал IP хостов и имя синхронизирующейся таблицы, и оно сразу само заработало.

Думаю, если вы в состоянии написать собственную репликацию, вас с руками оторвут в месте где не будет сертЫфикаций. Этот вариант предпочтительней изобретения велосипеда для работы с бабушкиным дистрибутивом.
...
Рейтинг: 0 / 0
Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
    #39934907
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что за форма регистрации
mefman
тогда и за внедрение Slony/Bucardo можно в тюрму сесть,
и за самописные решения, если не озаботиться их сертификацией.


Да, левые пакеты низзя, сертификацию не пройдешь. Можно, с гемором, самосборные из исходников пакеты, с полным описанием каждой переменной и функции на русском языке. Поэтому небольшой скрипт (до 10 тыщ строк) я смогу таки документировать, а что-то большее - это еще заняться автотрансляцией комментариев на руссиш и исправлением фраз их чтоб была связная речь а не бред транслятора. Для такого действия нужен очень серьезный повод: поставил, прописал IP хостов и имя синхронизирующейся таблицы, и оно сразу само заработало.


Таких решений в готовом виде под вашу задачу - нет. Тем более под настолько старую версию базы.
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Синхронизация содержимого таблицы для PostgreSQL 9.1 в 2020 году
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]