PostgreSQL 主从的进程和Oracle dataguard的进程对比介绍
PostgreSQL 的主从复制和 Oracle Data Guard(Oracle 的高可用、灾难恢复和数据保护解决方案)在实现高可用性和数据保护方面有很多相似之处,但它们的实现细节和所涉及的进程有所不同。以下是对这两者主要进程的比较:
PostgreSQL 主从复制
PostgreSQL 主从复制(Streaming Replication)通常涉及以下关键进程:
-
WAL Sender (WAL 发送进程):
- 进程名:
wal_sender
- 作用:在主库上运行,将 WAL(预写式日志)记录发送到一个或多个从库。每个从库通常有一个对应的
wal_sender
进程。 - 启动:当从库请求流复制时,主库会启动
wal_sender
进程。
- 进程名:
-
WAL Receiver (WAL 接收进程):
- 进程名:
wal_receiver
- 作用:在从库上运行,接收来自主库的 WAL 数据并将其写入从库的 WAL 日志文件中。
- 启动:当从库启动并连接到主库时,
wal_receiver
进程被启动。
- 进程名:
-
WAL Writer (WAL 写入进程):
- 进程名:
wal_writer
- 作用:将 WAL 日志数据从缓冲区写入磁盘。此进程存在于所有 PostgreSQL 实例中,无论是主库还是从库。
- 启动:在数据库启动时自动启动。
- 进程名:
-
Checkpointer (检查点进程):
-
Background Writer (后台写入进程):
- 进程名:
bgwriter
- 作用:将脏缓冲区写入磁盘,以减轻 checkpointer 的负担。在主库和从库中都存在。
- 启动:在数据库启动时自动启动。
- 进程名:
-
Startup (启动进程):
- 进程名:
startup
- 作用:在从库上运行,负责应用从主库接收到的 WAL 数据,从而将从库的数据库文件恢复到最新状态。
- 进程名:
Oracle Data Guard
Oracle Data Guard 中主要涉及以下关键进程:
-
Log Writer (日志写入进程):
- 进程名:
LGWR
- 作用:在主库上运行,将重做日志记录从内存写入磁盘的在线重做日志文件。
- 进程名:
-
Archiver (归档进程):
- 进程名:
ARCn
- 作用:将已经满的在线重做日志文件复制到归档日志文件中。在主库和备库上都存在,如果启用了归档模式。
- 进程名:
-
Log Transport Services(日志传输服务):
- 进程名:
LNS
和RFS
- Log Network Server (日志网络服务器进程,
LNS
):在主库上运行,将重做数据传输到远程日志应用服务。 - Remote File Server (远程文件服务器进程,
RFS
):在备库上运行,接收来自主库的重做数据并将其写入远程重做日志文件。
- 进程名:
-
Recovery (恢复进程):
- 进程名:
MRP
(Managed Recovery Process, 自动恢复进程)和LSP
(Logical Standby Process, 逻辑备库进程) - MRP:在理备库上运行,应用收物到的重做数据以保持数据库同步。
- LSP:在逻辑备库上运行,解析和应用重做数据。
- 进程名:
-
Fetch Archive Log (获取归档日志进程):
- 进程名:
FAL
- 作用:在备库上运行,用于请求主库重新发送丢失的日志文件。
- 进程名:
比较总结
-
日志传输:
- PostgreSQL:使用
wal_sender
和wal_receiver
进程传输 WAL 日志。 - Oracle Data Guard:使用
LNS
和RFS
进程传输重做日志。
- PostgreSQL:使用
-
日志写入与归档:
- PostgreSQL:
wal_writer
写入 WAL 日志,备库也有 WAL 写入机制。 - Oracle Data Guard:
LGWR
写入重做日志,ARCn
负责日志归档。
- PostgreSQL:
-
恢复与同步:
- PostgreSQL:在从库上使用
wal_receiver
接收日志并通过常规恢复进程应用。 - Oracle Data Guard:使用
MRP
在物理备库上应用日志,LSP
在逻辑备库上解析并应用重做数据。
- PostgreSQL:在从库上使用
-
额外支持:
- PostgreSQL:主要依赖流复制和物理备库,较少使用逻辑复制备份。
- Oracle Data Guard:提供更丰富的逻辑和物理备库支持,并有多样的自动恢复与重新同步机制(如
FAL
)。
总结
PostgreSQL 和 Oracle 在主从复制和数据保护上的实现有相似之处,但其具体进程和操作细节有所不同。PostgreSQL 的主要进程较少且集中,而 Oracle Data Guard 涉及更多专用进程,更细致地处理归档、日志传输和恢复操作。