我目前有几十个站点使用 rsyslog 通过 VPN 将数据推送到中央数据库。所有这些记录都进入一个表(每个站点每秒插入大约 20-30 条记录)。因此,一个表中大约有 3000 万条记录,并且增长迅速。数据库设计是一个单独的问题,稍后再处理。
我的目标是在每个站点设置一个本地数据库,用这个表来收集系统日志,并将其复制到我们的中央数据库(希望是同步的),复制到一个以设施命名的新表(而不是一个收集所有 17 个设施数据的大表)。
我研究过 Bucardo、Slony 和 SymmetricDS,但它们看起来都像是冗余/备份解决方案,但我真正需要的是从每个站点到中央数据库的看似基本的单表复制。
我对 Bucardo 的第一印象是,我需要在每个站点都安装它才能实现这一点。如果有人能提供一些建议,我正在寻找一些指导。我相信我已经在 Google 上搜索了无数次,但我希望证明我是错的。
答案1
PostgreSQL 的每个著名逻辑复制系统都适用于此:Bucardo、Londiste、Slony。它们不一定只是冗余解决方案。(可以说,它们是相当糟糕的冗余解决方案。)选择您最喜欢的一个。也许 Londiste 最容易上手,但 YMMV。(我不熟悉 SymmetricDS。)
答案2
从 Postgres 9.3 开始,你应该能够使用外部数据包装器来做到这一点 -此处有简要说明。
基本上在你的中央服务器上创建适当的表,然后创建表作为外部表(使用CREATE FOREIGN TABLE
) 在远程站点的 Postgres 实例上。然后,您可以像对待任何其他表一样对待外部表,只是所有更改都会发送回“真实”服务器。
请注意,如果您需要异步功能(在中央服务器离线时将内容写入远程站点的表,并在中央服务器恢复时将其发送),则此方法不起作用。为此,按照 Peter 的建议去做,使用基于事务的复制工具。