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

流复制

在流复制模式下,主备节点分别起了 WalSenderProcessWalReceiverProcess 进程,通过 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 中 libpq 相关代码解析之流复制(四)

Advertisements

分类:PostgreSQL

Tagged as: ,

4 replies

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

w

Connecting to %s

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