PostgreSQL的流复制断点续传
PostgreSQL的流复制断点续传
PostgreSQL的流复制(Streaming Replication)具有断点续传的能力,这意味着当主节点和备用节点之间的连接由于网络故障等原因中断后,备用节点会自动从中断点继续接收WAL(Write-Ahead Logging)数据。当连接恢复后,备用节点会从上次接收的数据位置继续接收并应用WAL数据,以保持数据的一致性。
实现断点续传的机制
- WAL 记录:PostgreSQL使用WAL来记录所有对数据库的修改操作,这些记录通过流复制实时传送到备用节点。
- WAL 保留:主便在连接中断时备用节点保留一定数量的WAL文件,以节点能够从中断点继续接收数据。
- 重播机制:备用节点在恢复连接后,会自动从上次接收的位置继续接收和应用WAL记录。
配置相关参数
为了确保流复制能够有效地进行断点续传,以下几个配置参数至关重要:
主节点配置(Primary Node)
编辑 postgresql.conf 文件:
max_wal_senders = 10 # 允许的最大 WAL sender 进程数
wal_keep_size = 1024 # 保留的 WAL 日志大小(单位:MB)
max_replication_slots = 10 # 允许的最大复制槽数
max_wal_senders:设置允许的最大 WAL sender 进程数。wal_keep_size:确保在一定时间内主节点保留足够的WAL文件,以便在连接中断时备用节点可以继续接收。max_replication_slots:设置允许的最大复制槽数。
使用复制槽(Replication Slots)
复制槽用于确保WAL记录不会在备用节点处理数据之前被删除,这在连接中断时非常重要。
创建复制槽
在主节点上,创建复制槽:
SELECT * FROM pg_create_physical_replication_slot('my_replication_slot');
配置备用节点以使用复制槽
编辑备用节点的 recovery.conf 或者 postgresql.auto.conf 文件,或在 PostgreSQL 13 及以上版本中使用 standby.signal:
primary_slot_name = 'my_replication_slot'
日常操作和维护
检查WAL发送和接收状态
在主节点,可以通过以下命令检查复制槽的状态:
SELECT * FROM pg_replication_slots;
在备用节点,可以通过以下命令查看接收的WAL数据:
SELECT * FROM pg_stat_wal_receiver;
监控WAL延迟
监控主节点和备用节点之间的WAL延迟情况:
-- 在主节点
SELECT application_name, client_addr, state, sent_lsn, write_lsn, flush_lsn, replay_lsn FROM pg_stat_replication;-- 在备用节点
SELECT slot_name, restart_lsn, confirmed_flush_lsn FROM pg_replication_slots;
故障处理
断点续传场景模拟
- 切断连接:
# 模拟网络中断,通过防火墙规则切断主节点和备用节点之间的连接
sudo iptables -A INPUT -s <主节点IP> -j DROP
- 切断连接后,开始对数据库进行写入操作:
-- 在主节点进行写操作
INSERT INTO my_table (col1, col2) VALUES ('value1', 'value2');
- 恢复连接:
# 删除防火墙规则,恢复连接
sudo iptables -D INPUT -s <主节点IP> -j DROP
- 验证断点续传:
-- 检查备用节点的数据是否与主节点一致
SELECT * FROM my_table;
总结
PostgreSQL 的流复制具备良好的断点续传能力,通过正确配置 max_wal_senders、wal_keep_size 和复制槽(Replication Slots)等参数,可以满足生产环境中的高可用性需求。在设置过程中,需要注意:
- 合理配置WAL保留策略:确保在出现连接中断时,备用节点能够获取到所需的WAL文件。
- 使用复制槽:防止WAL记录在备用节点处理之前被删除。
- 监控WAL延迟和复制槽状态:确保系统健康运行。
通过这些措施,可以有效提高 PostgreSQL 数据库在高可用性场景下的稳定性和可靠性,确保数据实时同步和一致性。
相关文章:
PostgreSQL的流复制断点续传
PostgreSQL的流复制断点续传 PostgreSQL的流复制(Streaming Replication)具有断点续传的能力,这意味着当主节点和备用节点之间的连接由于网络故障等原因中断后,备用节点会自动从中断点继续接收WAL(Write-Ahead Loggin…...
【bug】通过lora方式微调sdxl inpainting踩坑
报错内容 ValueError: Attempting to unscale FP16 gradients. 报错位置 if accelerator.sync_gradients:params_to_clip (itertools.chain(unet_lora_parameters, text_lora_parameters_one, text_lora_parameters_two)if args.train_text_encoderelse unet_lora_parameters…...
[Python可视化]数据可视化在医疗领域应用:提高诊断准确性和治疗效果
随着医疗数据的增长,如何从庞大的数据集中快速提取出有用的信息,成为了医疗研究和实践中的一大挑战。数据可视化在这一过程中扮演了至关重要的角色,它能够通过图形的方式直观展现复杂的数据关系,从而帮助医生和研究人员做出更好的…...
css <样式一>
1. 盒子模型 1.1>boarder 在这里插入图片描述 boarder 相邻框合并问题 boarder-classpse 相同的边框会合并在一起 text-alicn center 文字居中对齐 ########### boarder 会撑大盒子的实际大小 一个盒子加了boarder之后会变大的我可以把我的盒子内容进行修改, 减少像素内…...
Linux 文件 IO 管理(第一讲)
Linux 文件 IO 管理(第一讲) 回顾 C 语言文件操作,提炼理解新创建的文件为什么被放在可执行文件的同级目录下?上述 log.txt 何时被创建?又是谁在打开它?那文件没有被打开的时候在哪里?一个进程可…...
Uniapp + Vue3 + Vite +Uview + Pinia 实现购物车功能(最新附源码保姆级)
Uniapp Vue3 Vite Uview Pinia 实现购物车功能(最新附源码保姆级) 1、效果展示2、安装 Pinia 和 Uview3、配置 Pinia4、页面展示 1、效果展示 2、安装 Pinia 和 Uview 官网 https://pinia.vuejs.org/zh/getting-started.html安装命令 cnpm install pi…...
人工智能和大模型的简介
文章目录 前言一、大模型简介二、大模型主要功能1、自然语言理解和生成2、文本总结和翻译3、文本分类和信息检索4、多模态处理三、大模型的技术特性1、深度学习架构2、大规模预训练3、自适应能力前言 随着技术的进步,人工智能(Artificial Intelligence, AI)和机器学习(Mac…...
java -- JDBC
一.JDBC概述: 过java语言操作数据库中的数据。 1.JDBC概念 JDBC(Java DataBase Connectivity,java数据库连接)是一种用于 执行SQL语句的Java API。JDBC是Java访问数据库的标准规范,可以 为不同的关系型数据库提供统一访问,它由…...
supermap iclient3d for cesium模型沿路径移动
可以直接settimeout隔一段时间直接设置位置属性,但是得到的结果模型不是连续的移动,如果想要连续的移动,就需要设置一个时间轴,然后给模型传入不同时间时的位置信息,然后就可以了。 开启时间轴 let start Cesium.Jul…...
基于AlexNet实现猫狗大战
卷积神经网络介绍 卷积神经网络(Convolutional Neural Network,简称CNN),是一种深度学习模型,特别适用于处理图像、视频等数据。它的核心思想是利用卷积层(Convolutional layers)来提取输入数据…...
1.接口测试基础
一、为什么要做接口测试? 1)前后端分离(前端调用后端接口,不测的话接口有问题,功能一定有问题) 2)项目一般都不是独立的,经常要调用外部的项目,项目和项目之间交换数据&a…...
使用mlp算法对Digits数据集进行分类
程序功能 这个程序使用多层感知机(MLP)对 Digits 数据集进行分类。程序将数据集分为训练集和测试集,创建并训练一个具有两个隐藏层的 MLP 模型。训练完成后,模型对测试数据进行预测,并通过准确率、分类报告和混淆矩阵…...
滑动窗口(2)_无重复字符的最长字串
个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 滑动窗口(2)_无重复字符的最长字串 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目…...
c语言 —— 结构变量
1.结构变量的定义 类型和变量是不同的概念,只能对变量进行赋值、存取或运算操作,而不能对一个类型进行这些操作。因此在声明了结构类型后,还需要定义结构变量,以便在程序中引用它。结构变量和其他变量一样,必须先定义后使用,定义方法有以下3种: (1)先定义结构类型,再定…...
一个py脚本,提供处理 GET 请求返回网站数据,处理 POST 请求接收并打印数据。支持跨域访问。
from flask import Flask, jsonify, request from flask_cors import CORSapp Flask(__name__)# 允许跨域请求 CORS(app)app.route(/getapi/getadate/test2, methods[GET]) def get_data():response_data {"sites": [{"name": "菜鸟教程", &qu…...
【Elasticsearch系列六】系统命令API
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
c++概念
C语言设计期末考试知识点 1. 基础语法 变量和数据类型: int, float, double, char, bool 等基本数据类型。常量:const 关键字。变量的作用域:局部变量、全局变量。 输入输出: cin 和 cout:标准输入输出流。格式化输出…...
Makefile 学习笔记(一)gcc编译过程
环境准备 .linux 系统(虚拟机) VS code linux 编译过程 预处理: 把.h .c 展开形成一个文件.宏定义直接替换 头文件 库文件 .i 汇编: .i 生成一个汇编代码文件 .S 编译: .S 生成一个 .o .obj 链接: .o 链接 .exe .elf gcc c语言 g c语言 gcc的使用 …...
mybatis的基本使用与配置
注释很详细,直接上代码 项目结构 源码 UserMapper package com.amoorzheyu.mapper;import com.amoorzheyu.pojo.User; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;import java.util.List;Mapper //在运行时生成代…...
2022高教社杯全国大学生数学建模竞赛C题 问题三问题四 Python代码
目录 问题33.1 对附件表单 3 中未知类别玻璃文物的化学成分进行分析,鉴别其所属类型3.2 对分类结果的敏感性进行分析 问题44.1 针对不同类别的玻璃文物样品,分析其化学成分之间的关联关系绘图散点图相关系数图 问题3 3.1 对附件表单 3 中未知类别玻璃文物…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
第25节 Node.js 断言测试
Node.js的assert模块主要用于编写程序的单元测试时使用,通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试,通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
#Uniapp篇:chrome调试unapp适配
chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器:Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...
React从基础入门到高级实战:React 实战项目 - 项目五:微前端与模块化架构
React 实战项目:微前端与模块化架构 欢迎来到 React 开发教程专栏 的第 30 篇!在前 29 篇文章中,我们从 React 的基础概念逐步深入到高级技巧,涵盖了组件设计、状态管理、路由配置、性能优化和企业级应用等核心内容。这一次&…...
