RBD 是一个基于Ceph分布式存储系统的块设备复制方案 , 用于在PostgreSQL数据库中实现高可用性和容错性 。它通过将主服务器上的数据块实时复制?到备用服务器上 , 以确保在主服务器出现故障或宕机时 , 备用服务器可以立即接管其职责 。
RBD是一个基于网络块设备的复制方案 , 它可以在多个Ceph节点之间实现数据复制 , 并通过Ceph的故障转移机制来保证数据的可用性和一致性 。在RBD中 , 主服务器和备用服务器之间通过Ceph集群的网络通信 , 实现数据块的实时复制和同步 。
与其他流复制方案相比 , RBD具有以下优点:
- 数据复制速度更快:RBD通过Ceph的对象存储方式来管理数据 , 可以实现高效的数据复制和同步 , 比传统的流复制方案速度更快 。
- 数据安全性更高:RBD可以使用Ceph的数据加密和数据压缩功能 , 提高数据的安全性和传输效率 。
- 可扩展性更好:RBD可以根据需要对Ceph存储集群进行扩展 , 以满足不同的存储需求 。
- 系统稳定性更高:由于RBD是基于Ceph的分布式存储系统实现的 , 因此具有更好的容错性和可靠性 , 可以确保数据的可用性和一致性 。
备份服务器利用 WAL 段(在 PostgreSQL 术语中也称为 XLOGS)从其主服务器不断复制更改 。你可以通过在DBMS中使用预写日志(write-ahead logging)来为数据提供持久性和原子性 , 具体做法是在将字节数组数据块(每个块都带有唯一的LSN)应用到数据库之前 , 将它们序列化并写入稳定的存储介质
将变更应用到数据库可能会引起各种文件系统操作 。一个相关的问题是 , 在文件系统更新过程中 , 如果服务器由于停电而发生故障 , 数据库如何确保原子性 。具体做法是当数据库启动时 , 它会开始一个启动或重放过程 , 该过程可以读取可用的WAL段 , 并将它们与存储在每个数据页上的LSN进行比较(每个数据页都标记有影响该页的最新WAL记录的LSN) 。
基于日志发送的复制(块级)流复制改进了日志发送的过程 。与等待WAL切换不同 , 记录在创建时就被发送 , 从而减少了复制延迟 。
流复制也胜过日志发送 , 因为备份服务器通过复制协议在网络上与主服务器建立连接 。主服务器可以直接通过这个连接发送WAL记录 , 而不必依赖于用户提供的脚本 。
基于日志发送的复制(文件级)日志发送是将日志文件复制到另一台PostgreSQL服务器 , 通过重放WAL文件生成另一台备用服务器 。且此服务器被配置为在恢复模式下工作 , 目的是为了在监听新的 WAL 文件 , 并进行应用 。
备份服务器将成为主 PostgreSQL 服务器的热备份 。它还可以配置为只读副本 , 可以提供只读查询 。
WAL 归档在创建 WAL 文件时将其复制到除pg_wal子目录以外的任何位置以将其归档称为 WAL 归档 。每次创建 WAL 文件时 , PostgreSQL 都会调用用户提供的脚本进行归档 。
该脚本可以利用该scp命令将文件复制到一个或多个位置 , 例如 NFS。存档后 , 可以利用 WAL 段文件恢复数据库到任何给定时间点 。
其他基于日志的配置如下: