物理复制和逻辑复制
物理复制和逻辑复制
概念
WAL
区别
逻辑复制
将 PostgreSQL 的日志级别设置为 wal_level = logical 会启用逻辑复制(logical replication)功能,这对于一些应用场景非常有用。
逻辑复制是一种高级的复制技术,它可以在不同的 PostgreSQL 数据库之间同步数据,甚至可以跨版本同步数据。与传统的流复制(streaming replication)相比,逻辑复制可以更加灵活地选择需要复制的表和列,也可以过滤掉不需要复制的数据。此外,逻辑复制可以在主库上执行数据转换和过滤操作,这对于一些特殊需求非常有用,例如数据仓库和实时数据分析等。
但是,启用逻辑复制也有一些缺点。首先,逻辑复制需要更多的 CPU 和内存资源,因为它需要解析和转换数据。其次,逻辑复制的延迟可能会更高,因为它需要在主库上执行额外的转换和过滤操作。最后,逻辑复制的实现相对较新,可能会有一些稳定性和兼容性方面的问题。
因此,是否要启用逻辑复制,需要根据具体的应用需求和系统配置来进行决策。如果您需要更灵活的复制选项,并且具有足够的 CPU 和内存资源,那么启用逻辑复制可能是一个不错的选择。但是,如果您对数据同步的延迟和稳定性有较高的要求,那么传统的流复制可能更适合您的需求。
流复制
PostgreSQL 的流复制(streaming replication)是一种基于二进制日志(binary log)的复制技术,它可以将一个 PostgreSQL 主库上的数据实时复制到一个或多个从库中。主库将修改后的数据写入二进制日志文件(WAL 日志),从库通过流式复制(streaming replication)将主库的 WAL 日志拷贝到本地,并将日志中的操作应用到自己的数据库中,从而实现数据的实时同步。
在 PostgreSQL 的流复制中,有两种类型的从库:
热备(Hot Standby)从库:它可以接收数据并执行只读查询,但不能执行写操作,因为所有写操作都必须在主库上执行。
流式复制(Streaming Replication)从库:它可以接收数据并执行读写操作,因为它可以像主库一样执行写操作。
流复制的优点在于它可以实现实时数据同步,并且可以在从库上执行读写操作,从而提高整个系统的可用性和性能。同时,流复制的实现非常稳定,并且已经被广泛应用于生产环境中。
要启用流复制,需要在 PostgreSQL 的配置文件中设置一些参数,例如:
主库配置
wal_level = replica
max_wal_senders = 5
wal_keep_segments = 10
从库配置
hot_standby = on
primary_conninfo = 'host=master_ip_address port=5432 user=replica password=replica_pass'
其中,wal_level 表示主库需要记录的 WAL 日志级别,max_wal_senders 表示主库可以同时发送 WAL 日志给多少个从库,wal_keep_segments 表示主库需要保留的 WAL 日志段数。而在从库中,hot_standby 表示是否启用热备功能,primary_conninfo 表示连接到主库的参数。
流复制的具体实现步骤和细节较为复杂,需要结合具体的场景进行设置和调优。但是,一旦正确配置和使用,流复制可以帮助 PostgreSQL 构建高可用、高性能的数据库系统。