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 相关的重要配置:

conf 复制代码
max_wal_senders = 10      # 最大WAL发送进程数量
wal_level = replica       # 设定为 replica 或更高级别以启用复制
max_replication_slots = 4 # 最大复制槽数
bash 复制代码
[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 相关的配置,比如主节点的连接信息:

conf 复制代码
primary_conninfo = 'host=primary_host port=5432 user=replicator password=mysecretpassword'
primary_slot_name = 'my_replication_slot'
bash 复制代码
[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日志的传输和应用。

相关推荐
卡兰芙的微笑5 分钟前
get_property --Cmakelist之中
前端·数据库·编辑器
Z_W_H_16 分钟前
【PostgreSQL】安装及使用(Navicat/Arcgis),连接(C#)
数据库·postgresql
繁依Fanyi17 分钟前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
豆姐姐23 分钟前
金九银十,分享一波用例设计、数据库、编程笔试题!
自动化测试·数据库·测试用例·软件测试面试
优思学院24 分钟前
优思学院|如何从零开始自己学习六西格玛?
大数据·运维·服务器·学习·六西格玛黑带·cssbb
计算机程序设计开发26 分钟前
计算机毕业设计公交站点线路查询网站登录注册搜索站点线路车次/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
数据库·vue.js·spring boot·课程设计·计算机毕业设计
Flying_Fish_roe36 分钟前
linux-软件包管理-包管理工具(RedHat/CentOS 系)
linux·运维·centos
千寻简1 小时前
Cursor免费 GPT-4 IDE 工具的保姆级使用教程
java·运维·ide·ai
waterHBO1 小时前
ER 图 Entity-Relationship (ER) diagram 101 电子商城 数据库设计
数据库
青云交1 小时前
大数据新视界 --大数据大厂之Kubernetes与大数据:容器化部署的最佳实践
数据库·kubernetes·容器编排·资源管理·大数据处理·扩展性、故障恢复·存储持久化·监控、日志管理、性能提升