复制方式

一主一备是同步物理流复制

RO是异步流复制

当备机宕机后,如果此时主库有写操作,会写等待,此时管控会降为异步流复制模式,并重做备库

设置synchronous_commit参数

这个参数用来设置事务提交返回客户端之前,一个事务是否需要等待 WAL 记录被写入磁盘。合法的值是{local,remote_write,remote_apply,on,off}

  • off 级别最低

    当数据库事务提交时不需要等待本地 wal buffer 写入 wal 日志,立刻向客户端返回成功

  • local

    当事务提交时,写入本地磁盘即可

  • remote_write

    表示流复制主库提交事务时,需等待备库接收主库发送的wal日志流并写入备节点操作系统缓存中,之后向客户端返回成功,这种情况下备库出现异常关闭时不会有已传送的wal日志丢失风险,但备机OS异常宕机就有已传送的wal丢失风险

    备机只需写入缓存,不需要落盘

  • remote_apply 级别最高

    表示流复制主库提交事务时,需等待备库接收主库发送的wal流并写入wal文件,同时备库已经完成回放,之后才向客户端返回成功,简单的说remote_apply 表示本地wal已落盘,备库wal已落盘并且已经完成回放,这个设置保证了拥有两份持久化的wal,同时备库也已经完成了回放

    备机要wal回放完

  • on (默认)

    1 为on且没有开启同步备库的时候,会当wal日志真正刷新到磁盘永久存储后才会返回客户端事务已提交成功,

    2 当为on且开启了同步备库的时候(设置了synchronous_standby_names),必须要等事务日志刷新到本地磁盘,并且还要等远程备库也提交到磁盘才能返回客户端已经提交.

    主备都要wal落盘