thinking multi-master PostgreSQL environment-阿里云开发者社区

开发者社区> 数据库> 正文
登录阅读全文

thinking multi-master PostgreSQL environment

简介:
今天一位开发的同事把我拉去开会,其中有聊到多IDC部署数据库的需求,并且数据库之间要求数据同步。后来因为复杂度并且应用程序可以忍受主库DOWN机,所以决定不上multi-master。不过还是引发了一下我对multi-master的思考。
大概是一个这样的场景:
thinking multi-master PostgreSQL environment - 德哥@Digoal - The Heart,The World.
 

多个IDC之间会需要同步部分数据,每个IDC有自己的本地数据(不需要同步),最终每个IDC的数据库中的全局数据要求一致。
然后各个IDC要有自己的hot-standby数据库。

首先是同步使用到的技术:
1. sync方案,two phase commit,
可以让应用来做跨库事务,那就不需要数据库惨和了。
或者用PostgreSQL 自身的dblink和two phase commit 技术。
2. async方案,数据库复制软件,例如 slony-I . 
3. async方案,数据库触发器和dblink.

然后是全局数据表的设计:
1. 分表,使用不同的表名字,相互复制记录逻辑上隔离,不需要考虑冲突的问题。
分表的目的是使用单向复制软件,如slony-I。
例如IDC A:
global_table_a rw
global_table_b replication from IDC B,read only in IDC A.
global_table_c replication from IDC C,read only in IDC A.

IDC B:
global_table_a replication from IDC A,read only in IDC B.
global_table_b rw
global_table_c replication from IDC C,read only in IDC B.

IDC C:
global_table_a replication from IDC A,read only in IDC C.
global_table_b replication from IDC B,read only in IDC C.
global_table_c rw

优点是不需要考虑冲突,而且可以使用单向复制软件。
缺点是增加MASTER节点的话,需要新建表。可能还需要改程序。当然也可以建立父表,增加继承表的方式,不改程序,但是又会引起和SLONY-I不兼容的问题,如触发器。

2. 共享表,使用同一个表名,相互复制同一个表里面的记录,可能需要考虑冲突的问题。
例如IDC A:
global_table 
IDC B:
global_table
IDC C:
global_table
优点是所有节点使用一个表名,增加节点比较方便,对应用透明。
确定是可能需要考虑冲突,但是这个应该在应用设计的阶段避免修改从别的IDC同步过来的记录。

先thinking这些。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章