PostgreSQL的高可用与数据复制方案
2019独角兽企业重金招聘Python工程师标准>>>
PostgreSQL是开源的,有多种高可用与数据复制方案,这里做个简单的比较。
一、高可用性、负载均衡、复制方案
共享磁盘失效切换
共享磁盘失效切换通过仅保存一份数据库副本来避免花在同步上的开销。 这个方案让多台服务器共享使用一个单独的磁盘阵列。 如果主服务器失效,备份服务器将立即挂载该数据库, 就像是从一次崩溃中恢复一样。这个方案允许快速的失效切换并且不会丢失数据。
共享硬件的功能通常由网络存储设备提供, 也可以使用完全符合POSIX行为的网络文件系统(参阅Section 17.2.1)。 这种方案的局限性在于如果共享的磁盘阵列损坏了, 那么整个系统将会瘫痪。 另一个局限是备份服务器在主服务器正常运行的时候不能访问共享的存储器。
文件系统复制(块设备)
一种改进的方案是文件系统复制:对文件系统的任何更改都将镜像到备份服务器上。 这个方案的唯一局限是必须确保备份服务器的镜像与主服务器完全一致— 特别是写入顺序必须完全相同。DRBD是Linux上的一种流行的文件系统复制方案。
事务日志传送
热备份服务器可以通过读取WAL记录流来保持数据库的当前状态。 如果主服务器失效,那么热备份服务器将包含几乎所有主服务器的数据, 并可以迅速的将自己切换为主服务器。这是一个异步方案, 并且只能在整个数据库服务器上实施。
使用基于文件的日志传送或流复制,或两者相结合。 前者参阅Section 25.2, 后者参阅Section 25.2.5。 请参阅Section 25.5获取关于热备的信息。
基于触发器的主备复制
这个方案将所有修改数据的请求发送到主服务器。 主服务器异步向从服务器发送数据的更改信息。 从服务器在主服务器运行的情况下只应答读请求。对于数据仓库的请求来说, 从服务器非常理想的。
Slony-I是这个方案的一个例子,它支持针对每个表的粒度并支持多个从服务器。 因为它异步、批量的更新从服务器, 在失效切换的时候可能会有数据丢失。
基于语句的复制中间件
可以使用一个基于语句的复制中间件程序截取每一个SQL查询, 并将其发送到某一个或者全部服务器。每一个服务器都独立运行。 读-写请求发送给所有服务器,所以每个服务器接收到任何变化。但是只 读请求则仅发送给某一个服务器,从而实现读取的负载均衡。
如果只是简单的广播修改数据的SQL语句, 那么类似random()
, CURRENT_TIMESTAMP
以及序列函数在不同的服务器上将生成不同的结果。 这是因为每个服务器都独立运行并且广播的是SQL语句而不是如何对行进行修改。 如果这种结果是不可接受的,那么中间件或者应用程序必须保证始终从同 一个服务器读取这些值并将其应用到写入请求中。 另外还必须保证每一个事务必须在所有服务器上全部提交成功或者全部回滚, 或者使用两阶段提交(PREPARE TRANSACTION 和COMMIT PREPARED)。 Pgpool-II和Continuent Tungsten是这种方案的实例。
异步多主服务器复制
对于那些不规则连接的服务器(比如笔记本电脑或远程服务器), 要在它们之间保持数据一致是很麻烦的。 在这个方案中,每台服务器都独立工作并周期性的与其他服务器通信以识别相互冲突的事务。 可以通过用户或者冲突判决规则处理出现的冲突。
同步多主服务器复制
在这种方案中,每个服务器都可以接受写入请求, 修改的数据将在事务被提交之前必须从原始服务器广播到所有其它服务器。 过多的写入动作将导致过多的锁定,从而导致性能低下。 事实上,在多台服务器上同时写的性能总是比在单独一台服务器上写的性能低。 读请求将被均衡的分散到每台单独的服务器。 某些实现使用共享磁盘来减少通信开销。 同步多主服务器复制方案最适合于读取远多于写入的场合。 它的优势是每台服务器都能接受写请求—因此不需要在主从服务器之间划分工作负荷。 因为在服务器之间发送的是数据的变化, 所以不会对非确定性函数(比如random()
)造成不良影响。
PostgreSQL不提供这种类型的复制。 但是PostgreSQL的两阶段提交(PREPARE TRANSACTION和 COMMIT PREPARED) 可以用于在应用层或中间件代码中实现这个功能。
商业解决方案
因为PostgreSQL是开放源代码并且很容易被扩展, 许多公司在PostgreSQL的基础上创建了商业的闭源解决方案, 提供独特的失效切换、复制、负载均衡功能。
Feature | Shared Disk Failover | File System Replication | Transaction Log Shipping | Trigger-Based Master-Standby Replication | Statement-Based Replication Middleware | Asynchronous Multimaster Replication | Synchronous Multimaster Replication |
---|---|---|---|---|---|---|---|
Most Common Implementation | NAS | DRBD | Streaming Repl. | Slony | pgpool-II | Bucardo | |
Communication Method | shared disk | disk blocks | WAL | table rows | SQL | table rows | table rows and row locks |
No special hardware required | • | • | • | • | • | • | |
Allows multiple master servers | • | • | • | ||||
No master server overhead | • | • | • | ||||
No waiting for multiple servers | • | with sync off | • | • | |||
Master failure will never lose data | • | • | with sync on | • | • | ||
Standby accept read-only queries | with hot | • | • | • | • | ||
Per-table granularity | • | • | • | ||||
No conflict resolution necessary | • | • | • | • | • |
有几个解决方案不适合上边这些分类:
数据分区
数据分区将表拆分为数据集。每个数据集只有一台服务器可以修改。 例如,数据可以按办事处进行分区,例如, 伦敦和巴黎,每个办公室用一个服务器。 如果查询需要伦敦和巴黎相结合的数据,应用程序可以查询两台服务器, 或主/备用复制可以用来保持每个服务器上有其他办公室的只读数据副本。
多服务器并行查询执行
许多上述解决方案允许多个服务器来处理多个查询, 但不是允许单个查询使用多个服务器来更快完成。 此解决方案允许多个服务器上单个查询同时运行。 它通常被通过服务器之间的数据分开而执行其查询的一部分, 并将结果返回到中央服务器,由它来联合结果并返回给用户。 Pgpool-II有这种能力。 也可以使用PL/Proxy工具集实现。
二、多节点集群方案比较
可以基于Replication Stream(流复制)。
Program | License | Maturity | Replication Method | Sync | Connection Pooling | Load Balancing | Query Partitioning |
---|---|---|---|---|---|---|---|
PgCluster | BSD | Stalled暂停 | Master-Master | Synchronous | No | Yes | No |
pgpool-I | BSD | Stable | Statement-Based Middleware | Synchronous | Yes | Yes | No |
Pgpool-II | BSD | Recent release | Statement-Based Middleware | Synchronous | Yes | Yes | Yes |
slony | BSD | Stable | Master-Slave | Asynchronous | No | No | No |
Bucardo | BSD | Stable | Master-Master, Master-Slave | Asynchronous | No | No | No |
Londiste | BSD | Stable | Master-Slave | Asynchronous | No | No | No |
Mammoth | BSD | Stalled | Master-Slave | Asynchronous | No | No | No |
rubyrep | MIT | Stalled | Master-Master, Master-Slave | Asynchronous | No | No | No |
BDR (Bi-Directional Replication) | PostgreSQL (BSD) | Beta |
Master-Master (no triggers needed) |
Asynchronous | No | No | No |
pg_shard | LGPL | Recent release | Statement-based Middleware (as an extension) | Synchronous | No | Yes | Yes |
- 本文来自于:https://my.oschina.net/liuyuanyuangogo/blog/497746
- 参考:
- 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high-availability.html
- 复制、集群和连接池: https://wiki.postgresql.org/wiki/Replication,_Clustering,_and_Connection_Pooling
- 集群方案功能列表: http://blog.osdba.net/46.html
转载于:https://my.oschina.net/u/2306127/blog/2994090
PostgreSQL的高可用与数据复制方案相关推荐
- GlusterFS+keepalived高可用分布式存储双机复制方案
一.实验环境 主机名 IP地址 角色 serverE 192.168.200.115 glusterFS主服务器 serverF 192.168.200.116 glusterFS从服务器 serve ...
- PostgreSQL 10 高可用 本地SSD盘 版本发布
信息摘要: 相比原 9.4 版本有多项功能更新,但由于架构限制当前不支持 PostgreSQL 9.4 高可用版 及 10 基础版 直接升级 适用客户: 所有 PostgreSQL 数据库用户 版本/ ...
- PGPool-II 4.2.1+PostgreSQL 13高可用
PGPool-II 4.2.1+PostgreSQL 13高可用 说明 按照示例文档过程一步步操作,要注意一些权限配置和用户密码.官方加密用了scram-sha-256,此文档全用md5.在ECS上部 ...
- 世界领先!详解蚂蚁金服自研数据库OceanBase的高可用及容灾方案
小蚂蚁说: 关于蚂蚁金服自研的金融级分布式关系型数据库OceanBase的故事相信大家已经不再陌生了(新来的同学可以移步<厉害了,蚂蚁金服!创造了中国自己的数据库OceanBase>了解更 ...
- MaxCompute,基于Serverless的高可用大数据服务
2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的"阿里云栖开发者沙龙大数据技术专场"走近北京联合大学,本次技术沙龙上,阿里巴巴高级技术专家吴永 ...
- MySQL高可用的几种方案
首先我们看看MySQL高可用的几种方案: 对于数据实时性要求不是特别严格的应用,只需要通过廉价的pc server 来扩展Slave 的数量,将读压力分散到多台Slave 的机器上面,即可通过分散 ...
- MaxCompute,基于Serverless的高可用大数据服务 1
为什么80%的码农都做不了架构师?>>> 摘要:2019年1月18日,由阿里巴巴MaxCompute开发者社区和阿里云栖社区联合主办的"阿里云栖开发者沙龙大数据技术专 ...
- 阿里云推PostgreSQL 10 高可用版
2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL.SQL Server 和PostgreSQL关系型数据库的云计算服务商. 用户在云上 ...
- 重磅发布!阿里云推PostgreSQL 10 高可用版
2015年,阿里云宣布正式推出RDS for PostgreSQL服务,届时,阿里云成为国内首家同时支持MySQL.SQL Server 和PostgreSQL关系型数据库的云计算服务商. 用户在云上 ...
最新文章
- Coursera在线学习---第十节.大规模机器学习(Large Scale Machine Learning)
- 基于tensorflow2.0实现猫狗大战(搭建网络迁移学习)
- ssis lookup_SSIS中的LOOKUP转换概述
- Jmeter接口测试实战分享,你一定要知道的问题总结!
- 【java笔记】网络编程:文件上传案例
- C语言怎么样?C语言如何?
- iOS--AppIcon和启动图片LaunchImage
- 巅峰对决 竞逐百万大赛 | 2019数字中国创新大赛第二批赛题强势来袭
- DSP28335学习笔记1
- 2060显卡驱动最新版本_教程:怎么安装更新NVIDIAAMD显卡驱动?
- 208个地级市和31个省市城乡泰尔指数(2010-2019年)
- java服务端集成腾讯IM 腾讯云通讯生成usersig的方法
- 设计一个电商平台积分兑换系统
- Android CPU 深度睡眠,处理器的深度和深度睡眠状态之间的差异
- ffmpeg学习日记701-报错-co located POCs unavailable
- 2014 ACM-ICPC 亚洲地区赛 西安站小结
- bat 命令获取当前目录和子目录下的所有文件的文件名
- 拼多多分类ID搜索商品数据分析接口(商品列表数据,商品销量数据,商品详情数据)代码对接教程
- 微信开放平台第三方平台授权小程序权限集id对应中文说明
- NFS 服务 lap1+lap2+mysql+nfs