
图4-38 主备建连和流式复制流程图
如图4-38所示,日志复制请求是由“wal receiver”线程发起的。在libpqrcv_connect函数中,备机通过libpq协议连上主机,通过特殊的连接串信息,触发主机侧启动“wal sender”线程来处理该连接请求(相比之下,对于普通客户端查询请求,主机启动backend线程或线程池线程来处理连接请求)。在WalSndHandshake函数中,wal sender线程与wal receiver线程完成身份、日志一致性等校验之后,进入WalSndLoop开始日志复制循环。主要的主、备机握手和校验报文如表4-34所示,在主机收到T_StartReplicationCmd报文之后,开始进入日志复制阶段。
表4-34 主、备机握手和校验报文
| 报文类型 | 报文作用 |
| T_IdentifySystemCmd | 请求主机发送主机侧system_identifier,校验是否和备机一致 |
| T_IdentifyVersionCmd | 请求主机发送主机侧版本号,校验是否和备机一致 |
| T_IdentifyModeCmd | 请求主机发送主机侧HA状态,校验是否是主机状态 |
| T_IdentifyMaxLsnCmd | 请求主机发送当前最大的lsn位置(即日志偏移),用于备机重建 |
| T_IdentifyConsistenceCmd | 请求主机发送指定lsn位置日志记录的crc值,校验是否和备机一致 |
| T_IdentifyChannelCmd | 请求主机校验备机的端口是否在repliconn_info参数中,返回校验结果 |
| T_IdentifyAZCmd | 请求主机发送主机侧AZ名字 |
| T_BaseBackupCmd | 请求主机开始发起全量重建 |
| T_CreateReplicationSlotCmd | 请求主机创建流复制槽 |
| T_DropReplicationSlotCmd | 请求主机删除流复制槽 |
| T_StartReplicationCmd | 请求主机开始日志复制 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




