踩了一堆坑,终于掌握了postgreSQL主从流的精髓

📢📢📢📣📣📣
哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验
一位上进心十足的【大数据领域博主】!😜😜😜
中国DBA联盟(ACDU)成员,目前服务于工业互联网
擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。
✨ 如果有对【数据库】感兴趣的【小可爱】,欢迎关注【IT邦德】💞💞💞
❤️❤️❤️感谢各位大可爱小可爱!❤️❤️❤️

文章目录

  • 前言
    • 📣 1.主从流复制
    • 📣 2.sync_state
    • 📣 3.主从Switchover切换
      • ✨ 3.1 主库操作
      • ✨ 3.2 前备库操作
    • 📣 4.主从Failover切换
    • 📣 5.节点扩容
    • 📣 6.异步改同步
    • 📣 7.总结


同步流复制在9.1版中实现。它是一种单主多从复制类型

文章目录

  • 前言
    • 📣 1.主从流复制
    • 📣 2.sync_state
    • 📣 3.主从Switchover切换
      • ✨ 3.1 主库操作
      • ✨ 3.2 前备库操作
    • 📣 4.主从Failover切换
    • 📣 5.节点扩容
    • 📣 6.异步改同步
    • 📣 7.总结

前言

同步流复制在9.1版中实现。它是一种单主多从复制类型

📣 1.主从流复制

此本机复制功能基于日志传送,这是一种通用的复制技术,其中主服务器不断向备用服务器发送WAL(预写日志)数据,然后备用服务器立即重放接收到的数据。流复制同步方式有同步、异步两种

📣 2.sync_state

sync_state是备用服务器的状态。
sync_state属性指示备用服务器的状态。
它可以是以下值之一:

1.sync:备用服务器处于同步模式,
是当前正在工作的优先级最高的备用服务器。

2.potential:备用服务器处于同步模式,
是当前正在工作的优先级较低的备用服务器。
如果当前同步备用服务器失败,
则此备用服务器将升级为同步状态。

3.async:备用服务器处于异步模式。
(它永远不会处于“同步”或“潜在”模式。)
通过发出以下查询,可以显示备用服务器的优先级和状态:

📣 3.主从Switchover切换

在保证主从数据一致的情况下,做如下操作

✨ 3.1 主库操作

1、停止PG服务
[root@primary ~]# su - postgres
[postgres@primary ~]$pg_ctl stop
2、以“postgres”用户创建创建standby.signal文件
touch /pgccc/pgdata/standby.signal
3、配置参数文件
cat >> KaTeX parse error: Expected 'EOF', got '#' at position 140: …root@primary ~]#̲ su - postgres … pg_ctl start

✨ 3.2 前备库操作

1、停止PG服务
[root@standby01 ~]# su - postgres
[postgres@standby01 ~]$ pg_ctl stop

2、删除“standby.signal”文件
rm -rf /pgccc/pgdata/standby.signal

3、修改参数文件,注释primary_conninfo
sed -i ‘s/primary_conninfo/#primary_conninfo/g’ /pgccc/pgdata/postgresql.conf

4、启动PG服务
[root@primary ~]# su - postgres
[postgres@primary ~]$ pg_ctl start

📣 4.主从Failover切换

主数据库是读写的,备数据库是只读的。当主库出现故障时,我们需要将备库提升为主库进行读写操作。

1)主库操作:关闭主库,模拟主库故障
[postgres@standby01 ~]$pg_ctl stop
waiting for server to shut down… done
server stopped
2)备库操作:激活备库为主库:
不关闭主库,也可以执行该命令强制切换为主库角色,切换完成后,主从关系断开
3)原主库修复后降为备库
过程类似于重建备库,操作主从搭建

rm -rf /backup
mkdir -p /backup
chown postgres:postgres /backup

su - postgres
pg_basebackup -h 192.168.6.20 -p 5432 -U repladm -l bk20240411 -F p -P -R -D /backup

-- 关闭从库,并且将备份文件覆盖从库的数据文件
[postgres@standby01 ~]$echo $PGDATA
/pgccc/pgdata
[postgres@standby01 ~]$ rm -rf /pgccc/pgdata/*
[postgres@standby01 ~]$ cp -r /backup/* /pgccc/pgdata/

4)修改配置参数
vi /pgccc/pgdata/postgresql.conf
primary_conninfo = ‘host=192.168.6.20 port=5432 user=repladm password=replica’

5)启动PG服务
[root@standby01 ~]# su - postgres
[postgres@standby01 ~]$ pg_ctl start

📣 5.节点扩容

–在从库对主库进行备份
mkdir -p /backup
chown postgres:postgres /backup

su - postgres
pg_basebackup -h 192.168.6.20 -p 5432 -U
repladm -l bk20240411 -F p -P -R -D /backup

关闭从库,删除从库的数据文件,并且将备份文件覆盖从库的数据文件
[postgres@standby02 ~]$echo $PGDATA
/pgccc/pgdata
[postgres@standby02 ~]$ rm -rf /pgccc/pgdata/*
[postgres@standby02 ~]$ cp -r /backup/* /pgccc/pgdata/

修改从库primary_conninfo参数
cat >> $PGDATA/postgresql.conf <<“EOF”
primary_conninfo = ‘host=192.168.6.20 port=5432 user=repladm password=replica’
EOF

重启备库
[postgres@standby02 ~]$ pg_ctl start

📣 6.异步改同步

–在3个节点都修改如下参数
cat >> /pgccc/pgdata/postgresql.conf <<“EOF”
synchronous_commit=‘on’
synchronous_standby_names=‘*’
EOF

synchronous_commit说明:
1.on或local当数据库提交事务时,wal先写入到wal buffer在写入到wal日志文件,当写入到wal日志文件后才向客户端返回成功。
优点:非常安全
缺点:数据库性能有损耗
2.off表示不等待本地wal buffer写入到wal日志就向客户端返回成功,设置此参数可以提升数据库性能。
优点:提升数据库性能
缺点:数据库宕机是最新提交的少量事务可能丢失

📣 7.总结

本文详细介绍了物理复制(流复制)的日常管理及避坑要要点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/815878.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++:运算符与表达式 (信奥赛练习)

运算符与表达式 1. 运算符基本算术运算符赋值运算符比较运算符逻辑运算符 2. 表达式算术表达式逻辑表达式赋值表达式总结 1. 运算符 运算符是用于执行特定操作的符号。在编程和数学中&#xff0c;运算符是表达式的重要组成部分。它们可以用于执行加减乘除等基本算术运算&#…

vue3中覆盖组件样式的方法

在 Vue 3 中&#xff0c;覆盖组件样式的方法与 Vue 2 相似&#xff0c;但由于 Vue 3 更多地依赖于 CSS 的模块化&#xff0c;一些最佳实践可能会有所不同。以下是一些常用的方法来覆盖 Vue 3 中组件的样式&#xff1a; 1. 内联样式 你可以直接在组件的模板中使用 style 属性来…

三年运维开发你还不会编写k8s的资源清单yaml???速度进来学!

三年运维开发你还不会编写k8s的资源清单yaml&#xff1f;&#xff1f;&#xff1f;速度进来学&#xff01; 在Kubernetes&#xff08;K8s&#xff09;中&#xff0c;YAML文件是用于描述集群资源&#xff08;如Pod、Service、Deployment等&#xff09;的常用方式。通过编写和操…

gerrit 拉取失败

在浏览器gerrit的设置界面设置的邮箱地址和在命令行使用git config --gloable user.email设置的邮箱地址必须保持一致吗 在浏览器gerrit的设置界面设置的邮箱地址和在命令行使用git config --global user.email设置的邮箱地址并不一定需要保持一致。这两个邮箱地址是独立的&am…

【数据结构】4.List的介绍

目录 1.什么是List 2.常见接口介绍 3.List的使用 1.什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下&#xff1a; Iterable也是一个接口…

syscall的检测与绕过(下)

syscall的检测与绕过 ntdll中syscall被执行的格式大致 我们可以通过检测mov r10, rcx类似的代码来确定程序是否直接进行系统调用。 但是很容易被bypass 而且还可以写出很多不一样的写法&#xff0c;显然这个方式是不行的。很轻易就会被bypass。 当然也可以检测syscall指令&a…

UDTF函数 explode

场景&#xff1a; 原hive数据形式 split 处理到一个Array 形式 使用explode炸开后的效果是 explode结合侧面视图达到targeType 目标形式&#xff1a; 一进多出 explode 将hive 中复杂的 array 炸成多行 因为炸开后&#xff0c; movie 列值少于categoryname 列所以这里为了达到…

朴素模式匹配算法

什么是字符串的模式匹配&#xff1f; 字符串模式匹配:在主串中找到与模式串相同的字串&#xff0c;并返回其所在位置 算法思想&#xff1a; 算法思想为:从主串S的第一个字符起&#xff0c;与模式串T的第一个字符比较,若相等&#xff0c;则继续逐个比较后续字符;否则从主串的下一…

Windows环境下删除MySQL

文章目录 一、关闭MySQL服务1、winR打开运行&#xff0c;输入services.msc回车2、服务里找到MySQL并停止 二、卸载MySQL软件1、打开控制模板--卸载程序--卸载MySQL相关的所有组件 三、删除MySQL在物理硬盘上的所有文件1、删除MySQL的安装目录&#xff08;默认在C盘下的Program …

多线程代码案例之阻塞队列

目录 1.生产者消费者模型 2.使用标准库中的阻塞队列 3.模拟实现阻塞队列 在介绍阻塞队列之前&#xff0c;会先介绍一些前置知识&#xff0c;像队列&#xff1a;有普通队列、优先级队列、阻塞队列、和消息队列。前面两个是线程不安全的&#xff0c;而后面两个是线程安全的。本…

前端如何单独做虚拟奖金池?

公司业务需求要做一个虚拟奖金池&#xff0c;具体是需求是&#xff0c;不需要后端数据支持&#xff0c;但是又需要不同用户看到的奖金池数据每次变动都是一致的&#xff0c;并且要在给定的最小最大值中变动。 一开始看需求&#xff0c;因为需要所有登录/未登录&#xff0c;不同…

全栈的自我修养 ———— react实现滑动验证

实现滑动验证 展示依赖实现不借助create-puzzle借助create-puzzle 展示 依赖 npm install rc-slider-captcha npm install create-puzzleapi地址 实现 不借助create-puzzle 需要准备两张图片一个是核验图形&#xff0c;一个是原图------> 这个方法小编试了后感觉比较麻烦…

【七 (1)FineBI FCP模拟试卷-股票收盘价分析】

目录 文章导航一、字段解释二、需求三、操作步骤1、添加计算字段&#xff08;每月最后一天的收盘价&#xff09;2、绘制折线图 文章导航 【一 简明数据分析进阶路径介绍&#xff08;文章导航&#xff09;】 一、字段解释 Company Name&#xff1a;公司名称 Date&#xff1a;…

【vue】绑定事件 v-on

v-on 简写&#xff1a; clickkeyupkeydownkeyup.wkeyup.ctrl.a <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><…

今天掏心窝子!聊聊35岁了程序员何去何从?

今天的内容不聊技术&#xff0c;聊聊轻松的话题&#xff0c;脑子高速转了好几周&#xff0c;停下来思考一下人生…… 不对&#xff0c;关于35岁的问题好像也不轻松&#xff0c;些许有点沉重&#xff0c;反正不是技术&#xff0c;不用高速转动脑细胞了&#xff0c;哈哈。 兄弟…

策略模式【行为模式C++】

1.概述 策略模式是一种行为设计模式&#xff0c; 它能让你定义一系列算法&#xff0c; 并将每种算法分别放入独立的类中&#xff0c; 以使算法的对象能够相互替换。 策略模式通常应用于需要多种算法进行操作的场景&#xff0c;如排序、搜索、数据压缩等。在这些情况下&#x…

厨房安全监控系统设计方案

厨房安全监控系统设计方案 一、系统架构 厨房安全监控系统的架构主要分为感知层、网络层、平台层和应用层四个层次。 感知层&#xff1a;通过各种传感器实时采集厨房环境数据。网络层&#xff1a;负责数据的传输&#xff0c;将感知层采集的数据传输到平台层。平台层&#xf…

Pandas相比Excel的优势是哪些?

熟悉Pandas的同学会知道&#xff0c;Pandas相当于Python中的Excel&#xff0c;都是基于二维表的进行数据处理分析&#xff0c;不同的是&#xff0c;Pandas基于代码操作数据&#xff0c;Excel是图形化的分析工具。 不少人会问Excel比Pandas更简单&#xff0c;为什么还要学习Pan…

wangEditor 测试环境对,但是生产环境无法显示

package.json 文件版本 "wangeditor": "4.3.0"开发环境 new Editor(#${this.id});出来的数据 正式环境 new Editor(#${this.id});出来的数据 原因&#xff1a; vue.config 文件 打包策略的时候 const assetsCDN {css: [https://lf6-cdn-tos.bytecd…

三 maven的依赖管理

一 maven依赖管理 Maven 依赖管理是 Maven 软件中最重要的功能之一。Maven 的依赖管理能够帮助开发人员自动解决软件包依赖问题&#xff0c;使得开发人员能够轻松地将其他开发人员开发的模块或第三方框架集成到自己的应用程序或模块中&#xff0c;避免出现版本冲突和依赖缺失等…