postgresql - 主从和数据库高可用

5 阅读2分钟

为什么需要主从

  1. 当一台数据库失效时,马上可以切换到另一台数据,保证业务连续;
  2. 其中一台只接受写操作,另一台接受读操作,减轻压力,提高并发;
  3. 通过对主库进行数据备份,确保数据不丢失。

如何实现主从同步

通常,我们在主数据库上进行only read操作,在从数据库上进行only write操作。 那当一个数据在主库上进行更新之后,如何在从库上读到最新的数据就是一个关键的问题。

从同步流程来看,有以下三种:

1.同步复制 > 主库写成功后,立刻同步,从库写成功后再返回结果

2.异步复制 > 主库成功后,返回结果,数据放在buffer中

3.半同步复制 > 主库写成功后,将数据发送给从苦,然后立即返回结果,而不管从苦是否写成功

从同步方式来看,有以下或更多种:

  1. 基于WAL

    使用共享存储,如SAN存储,一台机器失败后,把SAN存储输出的磁盘挂到另一台机器上,然后把磁盘上的文件系统挂起来后完成切换

    • Change发生时:
      • 先将变更后内容记入WAL Buffer
      • 再将更新后的数据写入Data Buffer
      • Commit发生时:
      • WAL Buffer刷新到Disk
      • Data Buffer写磁盘推迟
      • Checkpoint发生时:
      • 将所有Data Buffer刷新到磁盘
  2. 基于触发器

    使用触发器记录数据变化,然后同步到另一台数据库上。

  3. 基于语句复制

    用户不直接连接到底层数据库,而是连接到一个中间件,中间件把数据库的变更发送到底层多台数据库上,从而完成数据的同步。