#####注意
以下内容翻译与PostgreSQL 10.3 高可用篇
-
Shared Disk Failover(SDF共享磁盘备份)
SDF 避免常规的只有一个数据库的同步备份
通过在多个服务器上共享单个磁盘数组
如果主库宕机,备库也能够挂载 开始使用,避免数据丢失。
共享硬盘功能是通用的网络存储设备,所以使用网络文件系统也是可用的,
通过关注 文件系统已经有丰富的POSIX的接口特性>缺点:
如果SDF 挂掉或者 ,则主库和从库都会停止服务
当主库运行的时候,从库从来不应该访问共享存储。 -
File System(Block Device)Replication 文件系统(块设备)复制
是SDF 修改过的一个文件系统复制的版本
若一个电脑的文件系统发生变化,则这些改变会被镜像复制到其他所有的文件系统中。
唯一的约束是 镜像复制的时候必须确保 从库和要复制的文件系统已经保持一致,尤其是 往从库
写操作的时候必须是和往主库写是同时完成的.
Distributed Replicated Block Device(DRBD)
>是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。
数据镜像:实时、透明、同步(所有服务器都成功后返回)、异步(本地服务器成功后返回)
是linux系统最受欢迎的文件系统镜像复制
-
Write-Ahead Log Shipping (预写日志原型)WAL
通过读取当前WAL的记录文件流可以保持热备份
如果主库宕机,从库也包含主库几乎所有的数据,也能够快速成为新的主库
这种方式对于整个数据库来说,可以是同步或者异步的
从库的实现可以使用 基于文件日志原型的 、流式复制或者两者整合的。 -
Logical Replication (逻辑复制)LR
LR 允许数据库服务会发送一个数据(modification)变更流给另一个服务器
LR会从WAL日志构造一个逻辑数据变更流。
LR 允许单个表变化的逻辑复制
LR 对主服务器或者复制服务器没有特殊设计要求,但是必须允许数据可以在多个服务器之间流动
-
Trigger-Based Master-Standby Replication(基于主备复制的触发器)
主备复制是构建发送数据变更查询到主服务器,数据变更主库会异步发送到从库
主库运行时从库能够提供只读查询 -
Slony-I
>是可以控制到每张表颗粒度 复制类型的一个例子
支持多个从库,因为是异步批量更新到从库
缺点:
故障切换可能会丢失数据 -
Statement-Based Replication Middleware(基于中间件复制的声明)
程序会拦截 每个SQL 查询,并且发送到一个或者所有服务器,每个服务器独立运行
读写查询一定会被发送到所有服务器,确保每个服务器接收到所有的数据变
只读查询仅仅会被发送到一个服务器,允许从库服务器中的一个实现负载
如果是简单查询没有数据变更 如函数 random(),CURRENT_TIMESTAMP和序列
在不同服务器可能不同的值,这是因为每个服务器都是独立运行的,且SQL是被分发到不同服务器的 ,如果这种方案不能接受,或者程序必须从单个服务器查询这些值则通过编写查询来使用这些值。
另一种操作是使用传统的主备复制构建操作,数据变更仅仅会被发送到主服务器,通过主备复制逐渐复制到从库。
不仅仅是中间件复制,所有服务器每次提交的事务可能被执行,也可能被中止。
或许可以使用两者兼具的 如: Pgpool-II (支持数据分割)
(PREPARE TRANSACTION and COMMIT PREPARED) ,通过PostgreSQL两次提交-
Asynchronous Multimaster Replication 异步多主复制
能够保证数据同步
缺点: 可能会导致执行锁,写性能比较差
-