PostgreSQL 中 libpq 相关代码解析之流复制(四)

流复制

在流复制模式下,主备节点分别起了 WalSenderProcessWalReceiverProcess 进程,通过 C/S 结构实现了 S 端发送 WAL 数据,C 端接收并回放数据,最终实现了主备流复制功能。

流复制协议

WAL 数据的收发需要遵循一定的规则,比如需要 COPY 模式。这个规则就是流复制协议,具体的协议内容可参见官网信息:流复制协议

libpqwalreceiver.c

WalSenderProcess 可以和普通的 backend 进程一样,使用现有的 libpq 接口,不再详述。
WalReceiverProcess 因为和普通的 psql 这种客户端需求不太一样,所以需要对 libpq 接口做一些特殊的定制,文件 libpqwalreceiver.c 就是这些接口的定制化实现。该源文件实现了如下的接口函数,以供 WalReceiverProcess 使用:

[code lang=text]
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
};
[/code]

为了避免与现有的 libpq 接口有冲突,该源文件会被编译成动态库文件 libpqwalreceiver,详见与其同目录的 Makefile 文件:

[code lang=text]
OBJS = libpqwalreceiver.o $(WIN32RES)
SHLIB_LINK = $(libpq) $(filter -lintl, $(LIBS))
SHLIB_PREREQS = submake-libpq
PGFILEDESC = “libpqwalreceiver – receive WAL during streaming replication”
NAME = libpqwalreceiver
[/code]

相关推荐

PostgreSQL 中 libpq 相关代码解析之大纲

PostgreSQL 中 libpq 相关代码解析之建立链接 (一)

PostgreSQL 中 libpq 相关代码解析之建立链接 (二)

PostgreSQL 中 libpq 相关代码解析之建立链接 (三)

PostgreSQL 中 libpq 相关代码解析之流复制(四)

如无特殊说明,文章均为本站原创,转载请注明出处
源自: 王明军的博客
本文链接地址: PostgreSQL 中 libpq 相关代码解析之流复制(四)
广告

Categories: PostgreSQL

Tagged as: ,

4 replies

发表评论

This site uses Akismet to reduce spam. Learn how your comment data is processed.