一、PostgreSQL高可用的种类
常用的高可用架构及基本原理
• 共享存储
• 流复制
• 逻辑复制
1.2 流复制
需要注意流复制只能用于主从复制,而逻辑是可以用于主主之间的复制。
- 主节点可以有多个从节点
- 从节点上还可以挂载从节点
- 从节点个数没有明确限制,层级无限制
- 主从间可以同步复制、可以一步复制,
- 也可以同步一步混合复制
1.3 逻辑复制
- 所有节点都是对等关系,都可读写
- 所有节点可以是发布节点,订阅节点,
- 也可以同时是发布节点和订阅节点
1.4 流复制的工作原理
当有订阅者订阅主节点时,fork一个子进程,通过发送WAL的方式也就是发送redo的方式同步,效率较高。postgresql 从9.0 开始支持流复制(Streaming Replication).
通过流复制技术,可以从实例级复制出一个与主库一模一样的从库(也称之为备库) 。 举个简单的例子,在主机 pghost1 上创建了一个 PostgreSQL 实例,并在实例上创建多个数据
库,通过流复制技术可以在另外一台主机如 pghost2 上创建一个热备只读 PostgreSQL 实例,我们通常将 pghost1 上的数据库称为主库( Primary Database 或 Master ) , pghost2 上的
数据库称为备库( Standby Database 或 Slav时, pghost1称为 主节点, pghost2 称为备节点 。
流复制同步方式有同步、异步两种,
如果主节点和备节点不是很忙,通常异步模式
下备库和主库的延迟时间能控制在毫秒级.
流程图如下图:
1.4.1 以一次commit为例子
当有数据commit时,执行器Executor 会将数据从WAL buffer写入WAL文件中。
通过sender 发送到从数据端。从端则将WAL日志应用到数据库文件data file(在heap上因此也成为head表).
从库的执行器就可以读到同步过来的数据.
1.5 流复制实战
二、逻辑复制