流复制
在流复制模式下,主备节点分别起了 WalSenderProcess
、WalReceiverProcess
进程,通过 C/S 结构实现了 S 端发送 WAL
数据,C 端接收并回放数据,最终实现了主备流复制功能。
流复制协议
WAL
数据的收发需要遵循一定的规则,比如需要 COPY
模式。这个规则就是流复制协议,具体的协议内容可参见官网信息:流复制协议。
libpqwalreceiver.c
WalSenderProcess
可以和普通的 backend
进程一样,使用现有的 libpq 接口,不再详述。
WalReceiverProcess
因为和普通的 psql
这种客户端需求不太一样,所以需要对 libpq 接口做一些特殊的定制,文件 libpqwalreceiver.c
就是这些接口的定制化实现。该源文件实现了如下的接口函数,以供 WalReceiverProcess
使用:
static WalReceiverFunctionsType PQWalReceiverFunctions = { libpqrcv_connect, libpqrcv_check_conninfo, libpqrcv_get_conninfo, libpqrcv_identify_system, libpqrcv_readtimelinehistoryfile, libpqrcv_startstreaming, libpqrcv_endstreaming, libpqrcv_receive, libpqrcv_send, libpqrcv_create_slot, libpqrcv_exec, libpqrcv_disconnect };
为了避免与现有的 libpq 接口有冲突,该源文件会被编译成动态库文件 libpqwalreceiver
,详见与其同目录的 Makefile 文件:
OBJS = libpqwalreceiver.o $(WIN32RES) SHLIB_LINK = $(libpq) $(filter -lintl, $(LIBS)) SHLIB_PREREQS = submake-libpq PGFILEDESC = "libpqwalreceiver - receive WAL during streaming replication" NAME = libpqwalreceiver
相关推荐
PostgreSQL 中 libpq 相关代码解析之建立链接 (一)
PostgreSQL 中 libpq 相关代码解析之建立链接 (二)
PostgreSQL 中 libpq 相关代码解析之建立链接 (三)
PostgreSQL 中 libpq 相关代码解析之流复制(四)
分类:PostgreSQL
4 replies ›