高可用方案之PostgreSQL的逻辑复制和物理复制(一)

常见高可用方案:

共享磁盘故障转移

  共享磁盘故障转移避免了只使用一份数据库拷贝带来的同步开销。 它使用一个由多个服务器共享的单一磁盘阵列。

文件系统(块设备)

      复制DRBD是用于 Linux 的一种流行的文件系统复制方案。

事务日志传送

  温备和热备服务器能够通过读取一个预写式日志(WAL) 记录的流来保持为当前状态。如果主服务器失效, 后备服务器拥有主服务器的几乎所有数据, 并且能够快速地被变成新的主数据库服务器。这可以是同步的或异步的, 并且只能用于整个数据库服务器。

基于触发器的主-备复制

  一个主-备复制设置会把所有数据修改查询发送到主服务器。 主服务器异步地将数据修改发送给后备服务器。当主服务器正在运行时, 后备服务器可以回答只读查询。后备服务器对数据仓库查询是一种理想的选择。Slony-I是这种复制类型的一个例子。它使用表粒度, 并且支持多个后备服务器。因为它会异步更新后备服务器(批量), 在故障转移时可能会有数据丢失。

基于语句的复制中间件

  通过基于语句的复制中间件,一个程序拦截每一个 SQL 查询并把它发送给一个或所有服务器。 每一个服务器独立地操作。读写查询必须被发送给所有服务器, 这样每一个服务器都能接收到任何修改。但只读查询可以只发送给一个服务器, 这样允许读负载在服务器之间分布。

异步多主控机复制

       通过使用异步的多主控机复制, 每一个服务器独立工作并且定期与其他服务器通信来确定冲突的事务。

同步多主控机复制

  在同步多主控机复制中,每一个服务器能够接受写请求,并且在每一个事务提交之前,被修改的数据会被从原始服务器传送给每一个其他服务器。PostgreSQL不提供这种复制类型, 尽管在应用代码或中间件中可以使用PostgreSQL的两阶段提交 (PREPARE TRANSACTION和COMMIT PREPARED) 来实现这种复制。

商业方案

  因为PostgreSQL是开源的并且很容易被扩展, 一些公司已经使用PostgreSQL并且创建了带有唯一故障转移、 复制和负载均衡能力的商业性的闭源方案。

数据分区

数据分区将表分开成数据集。每个集合只能被一个服务器修改。

多服务器并行查询执行

 

1、逻辑复制和 物理复制(replication )

1.1、优劣和应用场景:

逻辑订阅,适合于发布端与订阅端都有读写的情况。

逻辑订阅,更适合于小事务,或者低密度写(轻度写)的同步。如果有大事务、高密度写,逻辑订阅的延迟相比物理复制更高。

逻辑订阅,适合于双向,多向同步。

物理复制,适合于单向同步。

物理复制,适合于任意事务,任意密度写(重度写)的同步。

物理复制,适合于HA、容灾、读写分离。

物理复制,适合于备库没有写,只有读的场景。

1.2、实验平台: centos7+pg10 两台

1.3、总架构:

       postgresql高可用方案有许多第三方方案,但是今天我们主要讲pg内核自己支持的 高可用方案 

高可用方案之PostgreSQL的逻辑复制和物理复制(一)_第1张图片

1.4、物理复制(基于 wal日志)

1.4.1、什么是wal日志? (Write-Ahead Logging

       wal日志,postgresql 在做修改、插入等DDL语言时,会先将操作语句写到wal日志里;记录所有操作;然后,在check point点,replay这些日志,真正去执行这些操作

在 oracle 里 这个叫 redo日志,mysql里这个叫 binlog ,sqlserver 也叫 wal日志

wal日志 是二进制文件,默认16M(当然,可以设置)

wal文件的命名 

wal日志号由64位组成,即有2**64个日志编号,用完了需要重置,但是这个数量已经很多了,相当于1024P个,1024*1024个T。

日志文件则由24个16进制数字组成,分三部分:时间线、LSN高32位、LSN低32位/(2**24)的值

高可用方案之PostgreSQL的逻辑复制和物理复制(一)_第2张图片

文件夹名为pg_wal在postgresql的data文件夹下,但是9.6版本文件名叫pg_xlog

我们也可以使用SQL语句查看wal日志最近一次保存的文件编号:

其他版本请参考:https://www.cnblogs.com/ctypyb2002/p/9793046.html

1.4.2、如何读取wal日志

postgresql自带 pg_waldump

Windows中和Linux中的-n参数位置不同,Windows中放在文件前面,而Linux是放在文件后面,-n 后面的数字是限制展现的行数,-p为指定文件目录的路径

高可用方案之PostgreSQL的逻辑复制和物理复制(一)_第3张图片

高可用方案之PostgreSQL的逻辑复制和物理复制(一)_第4张图片

每一行wal日志

rmgr : 资源名称

lsn: 0/020005C0 日志编号

prev 0/01FFE890 

desc : 对日志详细信息的描述

xid 事务id

1.4.3、手动切换日志

执行该语句select pg_switch_wal(); 你再看你的pg_wal里的文件会多出一条,如果没多出来,需要多刷新几次,可能反应慢些:

 

你可能感兴趣的:(postgresql,Centos)