当前位置: 首页 > news >正文

PostgreSQL的walsender和walreceiver进程介绍

PostgreSQL的walsender和walreceiver进程介绍

在 PostgreSQL 中,WAL (Write-Ahead Logging) 是一种用于确保数据库事务日志安全可靠的机制。WAL 是 PostgreSQL 进行数据库恢复、复制等操作的基础。walsenderwalreceiver 是 PostgreSQL 内部两个非常重要的进程,它们负责主从复制中的日志传输和应用。

walsender

walsender(WAL Sender)是运行在主节点上的进程,它负责发送WAL记录给从节点。这个进程会读取pg_xlogpg_wal目录下的WAL日志文件,并通过TCP/IP网络传输到从节点。

主要职责
  1. 传输WAL记录:读取WAL记录并将其发送给从节点的walreceiver进程。
  2. 维持心跳:确保复制连接的活跃性,避免因连接问题导致的复制中断。
  3. 管理WAL发送:基于从节点的接收和应用情况管理WAL文件的发送。
配置参数

postgresql.conf 文件中,有几个与 walsender 相关的重要配置:

max_wal_senders = 10      # 最大WAL发送进程数量
wal_level = replica       # 设定为 replica 或更高级别以启用复制
max_replication_slots = 4 # 最大复制槽数
[pg12@test1 ~]$ ps -ef |grep walsender |grep -v grep
pg12      66591  62674  0 02:48 ?        00:00:00 postgres: walsender repmgr 192.168.10.101(53684) streaming 0/33DD75D0

walreceiver

walreceiver(WAL Receiver)是运行在从节点上的进程,它负责接收来自主节点的WAL记录并将其应用到从节点上去。

主要职责
  1. 接收WAL记录:通过网络从主节点的walsender接收WAL记录。
  2. 应用WAL记录:将接收的WAL记录写入磁盘,并根据需要应用到数据页上。
  3. 发送确认:向主节点发送确认消息,通知已经接收到的WAL日志位置信息。
配置参数

在从节点的 recovery.conf(或者 postgresql.auto.confstandby.signal 文件)中,定义一些与 walreceiver 相关的配置,比如主节点的连接信息:

primary_conninfo = 'host=primary_host port=5432 user=replicator password=mysecretpassword'
primary_slot_name = 'my_replication_slot'
[pg12@test2 archivelog]$ ps -ef |grep walreceiver |grep -v grep
pg12      92949  92944  0 02:48 ?        00:00:00 postgres: walreceiver   streaming 0/33DDDC78

动态协作

在主从节点间,walsenderwalreceiver 共同协作完成WAL日志的传输和应用:

  1. 连接建立:启动时,walreceiver连接到主节点,并启动walsender进程。
  2. WAL传输walsender读取WAL记录,并通过连接发送给walreceiver
  3. 确认机制walreceiver定期确认已接收和应用的WAL记录位置信息。
  4. 维护连接:通过心跳机制保持连接的稳定性。
  5. 故障情况下重连:如果连接中断,walreceiver会尝试重新连接到主节点,walsender也会重启。

总结

walsenderwalreceiver 是 PostgreSQL 主从复制中关键的进程,它们负责WAL日志的传输和应用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ubuntu20.04/22.04/24.04 docker 容器安装方法
  • 借助大模型将文档转换为视频
  • 【测试开岗面试】知识点总结
  • JDBC笔记
  • UE5源码Windows编译、运行
  • 办了房屋抵押经营贷,空壳公司不怕被查吗?续贷不上怎么办?
  • Chrome谷歌浏览器登录账号next无反应
  • Renesas R7FA8D1BH (Cortex®-M85)控制SHT20
  • win+linux平台C语言获取进程的线程数量
  • 稠密向量检索、稀疏向量检索、BM25检索三者对比
  • 【Java】【力扣】83.删除排序链表中的重复元素
  • SAM 2: Segment Anything in Images and Videos
  • Android 车联网——汽车模块介绍(附1)
  • Vue3.5+ 侦听器的3个更新
  • Java高级Day43-类加载
  • 深入了解以太坊
  • $translatePartialLoader加载失败及解决方式
  • Brief introduction of how to 'Call, Apply and Bind'
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • java中的hashCode
  • webpack项目中使用grunt监听文件变动自动打包编译
  • Yeoman_Bower_Grunt
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 基于HAProxy的高性能缓存服务器nuster
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何设计一个微型分布式架构?
  • 我建了一个叫Hello World的项目
  • 怎么将电脑中的声音录制成WAV格式
  • NLPIR智能语义技术让大数据挖掘更简单
  • Spring Batch JSON 支持
  • ​香农与信息论三大定律
  • #WEB前端(HTML属性)
  • #传输# #传输数据判断#
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (35)远程识别(又称无人机识别)(二)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Windows环境)FFMPEG编译,包含编译x264以及x265
  • (六)Flink 窗口计算
  • (十)T检验-第一部分
  • (四)opengl函数加载和错误处理
  • (四)stm32之通信协议
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (转)甲方乙方——赵民谈找工作
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • (转载)虚函数剖析
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net Core中Quartz的使用方法
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter
  • .NET程序员迈向卓越的必由之路
  • @Bean, @Component, @Configuration简析
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ 蓝桥杯Web真题 ]-布局切换
  • []FET-430SIM508 研究日志 11.3.31
  • [001-03-007].第07节:Redis中的管道