繁体   English   中英

Postgres 15 多主复制

[英]Postgres 15 Multi-Master Replication

在过去的几天里,我一直在尝试使用 postgresql 实现一个有效的多主复制,但是没有成功。 我遇到了多种工具,但都没有用。

我想我已经接近解决方案了,但我碰壁了。

现在我正在使用 pg_logical。 似乎 pg_logical 单独不允许多主但只能主从。 我看到有人在使用插件“BDR”,但我找不到任何安装它的方法,从我读到的内容来看,它不再维护,已经转移到付费的云端解决方案(我不能在我的场景中使用)

如果有人有复制、多主机、多服务器的解决方案(无法访问 inte.net,仅在安装期间)

我也尝试过 bucardo,但再次失败。

谢谢你们

您可以尝试逻辑复制行过滤来双向复制表数据。

https://www.postgresql.org/docs/15/logical-replication-row-filter.html

为每个节点提供一个唯一的 ID,并创建一个仅限于其唯一 ID 的发布。

这对于只插入的只读表(即审计日志)来说是理想的。 但对其他操作的用途有限。

--On host=192.168.2.2
--Set WAL level to logical
--Execute in # order,
--#1
CREATE TABLE service.message_log
(
    id bigint NOT NULL,
    server_id smallint NOT NULL,
    message bytea,
    CONSTRAINT message_log_pkey PRIMARY KEY(id, server_id)
);

--#2
CREATE PUBLICATION message_log_host2002 FOR TABLE service.message_log WHERE (server_id = 2002);

--#5
CREATE SUBSCRIPTION message_log_host1002 CONNECTION 'host=192.168.1.2 port=5435 user=repuser dbname=testdb' PUBLICATION message_log_host1002;

--#8
INSERT into service.message_log (id, server_id, message) VALUES (1, 2002, 'Hello from 192.168.2.2');
INSERT into service.message_log (id, server_id, message) VALUES (2, 2002, 'Test from 192.168.2.2');
--On host=192.168.1.2
--Set WAL level to logical
--#3
CREATE TABLE service.message_log
(
    id bigint NOT NULL,
    server_id smallint NOT NULL,
    message bytea,
    CONSTRAINT message_log_pkey PRIMARY KEY(id, server_id)
);

--#4
CREATE PUBLICATION message_log_host1002 FOR TABLE service.message_log WHERE (server_id = 1002);

--#6
CREATE SUBSCRIPTION message_log_host2002 CONNECTION 'host=192.168.2.2 port=5435 user=repuser dbname=testdb' PUBLICATION message_log_host2002;

--#7 
INSERT into service.message_log (id, server_id, message) VALUES (1, 1002, 'Hello from 192.168.1.2');
INSERT into service.message_log (id, server_id, message) VALUES (2, 1002, 'Test from 192.168.1.2');

核实

select id, server_id, convert_from(message, 'UTF8') from service.message_log 

Output from 192.168.1.2: 
1   1002    "Hello from 192.168.1.2"
2   1002    "Test from 192.168.1.2"
1   2002    "Hello from 192.168.2.2"
2   2002    "Test from 192.168.2.2"

Output from 192.168.2.2:
1   1002    "Hello from 192.168.1.2"
2   1002    "Test from 192.168.1.2"
1   2002    "Hello from 192.168.2.2"
2   2002    "Test from 192.168.2.2"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM