前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PG的wal receiver进程如何启动

PG的wal receiver进程如何启动

作者头像
yzsDBA
发布2022-09-06 15:20:19
7010
发布2022-09-06 15:20:19
举报

备机的receiver进程是由恢复进程即startup进程发启。具体如下:

1)恢复进程首先需要打开需要恢复的WAL日志文件。通过函数WaitForWALToBecomeAvailable完成。

2)从前文中可知,日志文件读取的顺序是LOG_FROM_ARCHIVE - XLOG_FROM_PG_WAL - XLOG_FROM_STREAM。也就是先从归档中读取,归档读取失败再切换到pg_wal下,再失败则切换流复制。这3种日志源循环切换,直至找到一个可打开的日志文件

3)备机恢复进程首先从归档目录下找需要的日志文件打开。因为备机没有转储命令,所以打开失败

4)接着从XLOG_FROM_PG_WAL日志源也就是pg_wal目录下找需要的日志文件进行打开。先将本地日志恢复。

注:这里没有标记日志源currentSource为XLOG_FROM_PG_WAL

5)本地日志恢复完后,再次进入WaitForWALToBecomeAvailable函数,此时需要切换到流复制日志源XLOG_FROM_STREAM。

6)流复制发启拉取起点及时间线的设置:

(1)读取checkpoint时就需要发启流复制,此时日志位置ptr是checkpoint的redo位置,时间线tli是checkpoint的时间线。

(2)其他场景,日志位置ptr是本地日志恢复结束位置,时间线tli是本地日志恢复完时的时间线。

(3)请求拉取日志位置:将ptr进行段文件对齐,也就是说从日志段文件开头进行拉取。

7)向备机主进程发送PMSIGNAL_START_WALRECEIVER信号

8)备机主进程接收到信号后,sigusr1_handler函数处理该信号。标记WalReceiverRequested为true,调用MaybeStartWalReceiver->StartWalReceiver最终fork出一个子进程,并标记为walreceiver,进入WalReceiverMain

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-07-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yanzongshuaiDBA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档