Обсуждение: Логическая репликация 10
Добрый день. Почитал я про логическую репликацию, довольно удобно работает. Однако она рассчитана на master-slave А есть ли логическая репликация master-master (ОС Windows) подскажите варианты.
Можно посмотреть ещё в этом направлении (шардирование таблиц по нескольким узлам, писать можно на любой узел):
но тут или брать уже готовую за деньги сборку от компании postgrespro или же попробовать самому собрать свой форк по их инструкции.
Пока ещё тоже находится в развитии..
С уважением, Сергей Гринько
Email: sergey.grinko@gmail.com
Email: sergey.grinko@gmail.com
7 августа 2018 г., 15:01 пользователь Москаленко Сергей <msvpersonal@yandex.ru> написал:
пока за деньгиopensource анонсировано в 12-й версии postgresql07.08.2018, 12:48, "vlads" <vlads@ngs.ru>:Добрый день.
Почитал я про логическую репликацию, довольно удобно
работает.
Однако она рассчитана на master-slave
А есть ли логическая репликация master-master (ОС Windows)
подскажите варианты.
Хорошие идеи, но платные. Задача проста - между двумя базами следует производить обмен через одну таблицу: ВКакуюБазуИдутДанные Данные ДатаПередачиДанныхДляСортировки Пока всё работает через сторонние таблицы и планировщиком обмена, который стягивает информацию с других баз. Второй вариант попробовал успешно, но настроек просто море: В обоих БД: CREATE TABLE public.test ( x SERIAL NOT NULL, val text, ok boolean NOT NULL DEFAULT false, CONSTRAINT test_pkey PRIMARY KEY (x) ) WITH ( OIDS = FALSE ) БД1 последовательно DROP SUBSCRIPTION slave; DROP PUBLICATION master; DELETE from test CREATE PUBLICATION master FOR TABLE test WITH (publish = 'insert,delete'); CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1 user=postgres dbname=postgres password=пароль port=порт' PUBLICATION master; INSERT INTO test(val) VALUES ('v1'), ('v2'); DELETE from test WHERE ok=true; SELECT * FROM test; БД2 DROP SUBSCRIPTION slave; DROP PUBLICATION master; DELETE from test CREATE PUBLICATION master FOR TABLE test WITH (publish = 'update'); CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1 user=postgres dbname=postgres password=пароль port=порт' PUBLICATION master; UPDATE test set ok=true where val='v1'; SELECT * FROM test; Так получается, что БД1 может отправлять данные для БД2, А как только БД2 поставит ОК=true БД1 сама удалит эту строку. Т.е. БД1 создаёт строки и удаляет, БД2 - обновляет строки. Т.е. для каждого направления обмена надо создавать свою таблицу, публицакию и свою подписку. А можно ли в строке CREATE PUBLICATION master FOR TABLE test WITH (publish = 'update'); сделать вместо (publish = 'update') - ещё какие-то условия, например, AND ВкакуюБазу='База2', что не уменьшит подписок, но по крайней мере уменьшит число таблиц. Надо попробовать. Ну или предложите ещё альтернативу. > Можно посмотреть ещё в этом направлении (шардирование >таблиц по нескольким > узлам, писать можно на любой узел): > https://postgrespro.ru/docs/enterprise/10/pg-shardman > но тут или брать уже готовую за деньги сборку от >компании postgrespro или > же попробовать самому собрать свой форк по их >инструкции. > Пока ещё тоже находится в развитии.. > > С уважением, Сергей Гринько > Email: sergey.grinko@gmail.com > > 7 августа 2018 г., 15:01 пользователь Москаленко Сергей >< > msvpersonal@yandex.ru> написал: > >> https://www.2ndquadrant.com/en/resources/postgres-bdr-2ndquadrant/ >> пока за деньги >> opensource анонсировано в 12-й версии postgresql >> >> 07.08.2018, 12:48, "vlads" <vlads@ngs.ru>: >> >> Добрый день. >> Почитал я про логическую репликацию, довольно удобно >> работает. >> Однако она рассчитана на master-slave >> А есть ли логическая репликация master-master (ОС >>Windows) >> подскажите варианты. >> >> >> >> >> >> -- >> С уважением! >> Москаленко Сергей >> Эл. почта: MSVpersonal@yandex.ru >> Skype: servlamo >> >>
>Ну или предложите ещё альтернативу.
Можно посмотреть в сторону внешних очередей. Kafka, RabbitMQ.
Для них есть коннекторы для Postgres.
---
Dmitriy Dobrotvorskiy
From: vlads <vlads@ngs.ru>
Sent: Wednesday, August 8, 2018 8:12:28 AM
To: pgsql-ru-general@lists.postgresql.org
Subject: Re: Логическая репликация 10
Sent: Wednesday, August 8, 2018 8:12:28 AM
To: pgsql-ru-general@lists.postgresql.org
Subject: Re: Логическая репликация 10
Хорошие идеи, но платные.
Задача проста - между двумя базами следует производить
обмен через одну таблицу:
ВКакуюБазуИдутДанные Данные
ДатаПередачиДанныхДляСортировки
Пока всё работает через сторонние таблицы и планировщиком
обмена, который стягивает информацию с других баз.
Второй вариант попробовал успешно, но настроек просто
море:
В обоих БД:
CREATE TABLE public.test
(
x SERIAL NOT NULL,
val text,
ok boolean NOT NULL DEFAULT false,
CONSTRAINT test_pkey PRIMARY KEY (x)
)
WITH (
OIDS = FALSE
)
БД1 последовательно
DROP SUBSCRIPTION slave;
DROP PUBLICATION master;
DELETE from test
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'insert,delete');
CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1
user=postgres dbname=postgres password=пароль port=порт'
PUBLICATION master;
INSERT INTO test(val) VALUES ('v1'), ('v2');
DELETE from test WHERE ok=true;
SELECT * FROM test;
БД2
DROP SUBSCRIPTION slave;
DROP PUBLICATION master;
DELETE from test
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'update');
CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1
user=postgres dbname=postgres password=пароль port=порт'
PUBLICATION master;
UPDATE test set ok=true where val='v1';
SELECT * FROM test;
Так получается, что БД1 может отправлять данные для БД2, А
как только БД2 поставит ОК=true БД1 сама удалит эту
строку. Т.е. БД1 создаёт строки и удаляет, БД2 - обновляет
строки.
Т.е. для каждого направления обмена надо создавать свою
таблицу, публицакию и свою подписку.
А можно ли в строке
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'update');
сделать вместо (publish = 'update') - ещё какие-то
условия, например, AND ВкакуюБазу='База2', что не уменьшит
подписок, но по крайней мере уменьшит число таблиц. Надо
попробовать.
Ну или предложите ещё альтернативу.
> Можно посмотреть ещё в этом направлении (шардирование
>таблиц по нескольким
> узлам, писать можно на любой узел):
> https://postgrespro.ru/docs/enterprise/10/pg-shardman
> но тут или брать уже готовую за деньги сборку от
>компании postgrespro или
> же попробовать самому собрать свой форк по их
>инструкции.
> Пока ещё тоже находится в развитии..
>
> С уважением, Сергей Гринько
> Email: sergey.grinko@gmail.com
>
> 7 августа 2018 г., 15:01 пользователь Москаленко Сергей
><
> msvpersonal@yandex.ru> написал:
>
>> https://www.2ndquadrant.com/en/resources/postgres-bdr-2ndquadrant/
>> пока за деньги
>> opensource анонсировано в 12-й версии postgresql
>>
>> 07.08.2018, 12:48, "vlads" <vlads@ngs.ru>:
>>
>> Добрый день.
>> Почитал я про логическую репликацию, довольно удобно
>> работает.
>> Однако она рассчитана на master-slave
>> А есть ли логическая репликация master-master (ОС
>>Windows)
>> подскажите варианты.
>>
>>
>>
>>
>>
>> --
>> С уважением!
>> Москаленко Сергей
>> Эл. почта: MSVpersonal@yandex.ru
>> Skype: servlamo
>>
>>
Задача проста - между двумя базами следует производить
обмен через одну таблицу:
ВКакуюБазуИдутДанные Данные
ДатаПередачиДанныхДляСортировки
Пока всё работает через сторонние таблицы и планировщиком
обмена, который стягивает информацию с других баз.
Второй вариант попробовал успешно, но настроек просто
море:
В обоих БД:
CREATE TABLE public.test
(
x SERIAL NOT NULL,
val text,
ok boolean NOT NULL DEFAULT false,
CONSTRAINT test_pkey PRIMARY KEY (x)
)
WITH (
OIDS = FALSE
)
БД1 последовательно
DROP SUBSCRIPTION slave;
DROP PUBLICATION master;
DELETE from test
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'insert,delete');
CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1
user=postgres dbname=postgres password=пароль port=порт'
PUBLICATION master;
INSERT INTO test(val) VALUES ('v1'), ('v2');
DELETE from test WHERE ok=true;
SELECT * FROM test;
БД2
DROP SUBSCRIPTION slave;
DROP PUBLICATION master;
DELETE from test
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'update');
CREATE SUBSCRIPTION slave CONNECTION 'hostaddr=127.0.0.1
user=postgres dbname=postgres password=пароль port=порт'
PUBLICATION master;
UPDATE test set ok=true where val='v1';
SELECT * FROM test;
Так получается, что БД1 может отправлять данные для БД2, А
как только БД2 поставит ОК=true БД1 сама удалит эту
строку. Т.е. БД1 создаёт строки и удаляет, БД2 - обновляет
строки.
Т.е. для каждого направления обмена надо создавать свою
таблицу, публицакию и свою подписку.
А можно ли в строке
CREATE PUBLICATION master FOR TABLE test WITH (publish =
'update');
сделать вместо (publish = 'update') - ещё какие-то
условия, например, AND ВкакуюБазу='База2', что не уменьшит
подписок, но по крайней мере уменьшит число таблиц. Надо
попробовать.
Ну или предложите ещё альтернативу.
> Можно посмотреть ещё в этом направлении (шардирование
>таблиц по нескольким
> узлам, писать можно на любой узел):
> https://postgrespro.ru/docs/enterprise/10/pg-shardman
> но тут или брать уже готовую за деньги сборку от
>компании postgrespro или
> же попробовать самому собрать свой форк по их
>инструкции.
> Пока ещё тоже находится в развитии..
>
> С уважением, Сергей Гринько
> Email: sergey.grinko@gmail.com
>
> 7 августа 2018 г., 15:01 пользователь Москаленко Сергей
><
> msvpersonal@yandex.ru> написал:
>
>> https://www.2ndquadrant.com/en/resources/postgres-bdr-2ndquadrant/
>> пока за деньги
>> opensource анонсировано в 12-й версии postgresql
>>
>> 07.08.2018, 12:48, "vlads" <vlads@ngs.ru>:
>>
>> Добрый день.
>> Почитал я про логическую репликацию, довольно удобно
>> работает.
>> Однако она рассчитана на master-slave
>> А есть ли логическая репликация master-master (ОС
>>Windows)
>> подскажите варианты.
>>
>>
>>
>>
>>
>> --
>> С уважением!
>> Москаленко Сергей
>> Эл. почта: MSVpersonal@yandex.ru
>> Skype: servlamo
>>
>>