PostgreSQL码农集散地

2个人干3个人的活?这思想用在数据库绝了!

文中参考文档在github需点击阅读原文打开, 同时推荐2个学习环境: 

1、懒人Docker镜像, 已打包200+插件:《最好的PostgreSQL学习镜像》

2、有web浏览器就能用的云起实验室: 《免费体验PolarDB开源数据库》
3、PolarDB开源数据库内核、最佳实践等学习图谱:  https://www.aliyun.com/database/openpolardb/activity 
关注公众号, 持续发布PostgreSQL、PolarDB、DuckDB等相关文章. 

从3副本到2.5副本?

https://www.bilibili.com/video/BV1Lm4y1d7ed/

为了提高数据库集群的可靠性, 我们通常会采用数据库多副本的功能, 例如一份数据3个副本(1主2从), 或者一份数据2个副本(1主1从).
为了保障极端场景的0事务丢失, 同时保证高可用(某一个节点故障, 可以切换到另1个节点), 至少需要1个与主节点完全同步的副本.

对于跨地域的部署架构, 为了同时保证可用性和可靠性, 通常会选择3节点的部署架构(A地域部署同步的主从节点+B地域的异步从节点). 这么做的原因是降低跨地域同步带来的RT增加.

社区版本:
PostgreSQL 社区版本支持quorum based sync replication功能, 可以配置同步副本数. 但是每个节点都必须是完整的才能参与failover的选举, 或者将wal日志转发给其他节点.
社区版本采用典型的3节点架构.
虽然 pg_receivewal 可以实时接收WAL, 但是它不支持将接收到的内容再通过流复制协议发送给其他的节点. 不友好, 无法实现实时wal文件中继.

弊端:

  • 数据和日志都有3份, 性价比较低.

  • WAL日志都需要从主库传输, 需要2条流复制链路, 主库的压力较大

PolarDB:
datamax组件: 简单的理解是整合了pg_receivewal + wal sender的功能.
Image

优势:

  • 数据只需要2份, 3份日志

  • 主节点只需要一份同步链路, 减轻了主库的wal sender负担

  • 中继节点无需要回放日志, 效率、稳定性都比完整的从库节点更高

PolarDB PG 的部署架构相当于2.5节点. 而不是3节点.

本期问题1:
为什么pg_receivewal不能作为wal的实时中继节点?

  • a. pg_receivewal 只接收日志文件, 不接收数据文件

  • b. pg_receivewal 只能接收日志, 不能发送日志

  • c. pg_receivewal 不是采用流复制协议的

  • d. pg_receivewal 采用的是流复制协议

答案:

  • b

解释:

  • 参考本文内容

本期问题2:
PolarDB datamax通常被用于跨地域的高可靠和高可用部署架构中, datamax组件有哪些功能?

  • a. 实时接收wal日志

  • b. 实时接收数据文件

  • c. 实时发送wal日志

  • d. 实时发送数据文件

答案:

  • ac

解释:

  • 参考本文内容

欢迎关注我的github (https://github.com/digoal/blog) , 学习数据库不迷路.  

近期正在写公开课材料, 未来将通过视频号推出, 欢迎关注视频号:

Image

文章中的参考文档请点击阅读原文获得.