PostgreSQL 主从复制&故障切换

2023-09-15 10:02:07

前言

PostgreSQL的主从复制是一种非常简单且常用的高可用性和可扩展性解决方案,本质上是将主服务器的数据复制到一个或多个从服务器上,从而提高系统的性能和可靠性,并提供数据备份和故障恢复的能力。

环境准备

搭建主从节点

准备两个节点,一主一从,修改好ip,根据PostgreSQL 入门中的介绍安装好postgresql服务。

角色IP端口
Master192.168.10.105432
Standby192.168.10.115432

配置主从节点

先为主节点准备一些数据

create table t1 (id int);
insert into t1 values (111);
select * from t1;

接下来,主从都按照以下配置进行设置,因为后面会有主从切换的操作。

修改 pg_hba.conf 文件

image.png

修改 postgresql.conf 文件

image.png

提前构建好归档日志和备份目录,并且设置好拥有者

image.png

重启PostgreSQL服务

systemctl restart postgresql-12

从节点加入主节点

关闭从节点服务

systemctl stop postgresql-12

删除从节点数据(删除data目录)

rm -rf ~/12/data/*

基于pbk去主节点备份数据

# 确认好备份的路径,还有主节点的ip
pg_basebackup -D /pgbasebackup -Ft -Pv -Upostgres -h 192.168.10.10 -p 5432 -R

恢复数据操作,解压tar包

cd /pgbasebackuo
tar -xf base.tar -C ~/12/data
tar -xf pg_wal.tar -C /archive

修改postgresql.auto.conf文件

# 确认有这两个配置,一般第一个需要手写,第二个会自动生成
restore_command = 'cp /archive/%f %p'
primary_conninfo = 'user=postgres password=postgres host=192.168.10.10 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'

修改standby.signal文件,开启从节点备份模式

# 开启从节点备份
standby_mode = 'on'

启动从节点服务

systemctl restart postgresql-12

查看主从信息

  • 查看从节点是否有t1表
  • 主节点添加一行数据,从节点再查询,可以看到最新的数据
  • 从节点无法完成写操作,他是只读模式
  • 主节点查看从节点信息
  select * from pg_stat_replication
  • 从节点查看主节点信息
  select * from pg_stat_wal_receiver

主从故障切换

PostgreSQL自身只支持简单的主从,不提供主从自动切换,如果要实现此功能只能通过Nginx这样的负载并采用keepalived的形式,在主节点宕机后,通过脚本的执行完成主从切换,这里做一个手动的故障切换操作。

默认情况下,主从备份是异步的,这样会导致一个问题:如果主节点写入的数据还没有备份到从节点,主节点忽然宕机了,数据可能丢失。

PGSQL在9.5版本后提供了一个pg_rewind的操作,基于归档日志做一个比对,是否有时间差冲突。

操作步骤:

  1. rewind需要开启一项配置才可以使用
    修改postgresql.conf中的 wal_log_hints = ‘on’

  2. 为了可以更方便的使用rewind,需要设置一下 /usr/pgsql-12/bin/ 的环境变量

    vi /etc/profile
      追加信息
    export PATH=/usr/pgsql-12/bin/:$PATH
    source /etc/profile
    
  3. 模拟主库宕机,直接对主库关机。

  4. 从节点切换为主节点

    # 默认会去找$PGDATA,如果没有配置,基于-D指定一下PGSQL的data目录
    pg_ctl promote -D ~/12/data/
    
  5. 将原主节点开机,执行归档日志的同步。

    • 停止PGSQL服务
      pg_ctl stop -D ~/12/data
      
    • 基于pg_rewind加入到集群
      pg_rewind -D ~/12/data/ --source-server='host=192.168.10.10 user=postgres password=postgres'
      
    • 如果上述命令失败,需要再执行以上操作。
  6. 修改原主节点(新从节点)的配置

    • 构建standby.signal
      standby_mode = 'on'
      
    • 修改postgresql.auto.conf文件
      # 注意ip地址
      primary_conninfo = 'user=postgres password=postgres host=192.168.10.10 port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
      restore_command = 'cp /archive/%f %p'
      
    • 启动新的从节点
      pg_ctl start -D ~/12/data/
      
更多推荐

垃圾收集算法

1.如何判断对象是否存活?1.1引用计数算法基本思路:在对象中添加一个引用计数器每当有一个地方引用它的时候,计数器就加+1每当有一个引用失效的时候,计数器就减-1当计数器的值为0的时候,那么该对象就是可被GC回收的垃圾对象存在的问题:对象循环引用a对象引用了b对象,b对象也引用了a对象,a、b对象却没有再被其他对象所引

单片机外设-串口(UART)详情

目录学习UART要先认识一些基础知识一:什么是串行、并行通信?(1)串行通信串行通信概念:串行通信的特点:(2)并行通信并行通信概念:并行通信特点:二:什么是异步通信、同步通信?(1)异步通信​编辑异步通信概念:异步通信特点:(2)同步通信同步通信概念:1、外同步2、自同步同步通信特点:三:什么是单工、半双工、全双工通

Vue知识系列(5)每天10个小知识点

目录系列文章目录Vue知识系列(1)每天10个小知识点Vue知识系列(2)每天10个小知识点Vue知识系列(3)每天10个小知识点Vue知识系列(4)每天10个小知识点知识点41.vue常用基本指令有哪些以及他们的作用和使用场景42.Vue组件中data为什么必须是函数43.v-if和v-show的区别44.vue自定

Git(7)——使用Beyond Compare快速解决冲突

一、简介根据前六章的学习,我们应该很清楚地感知到不同分支合并代码时产生的冲突是最让我们头疼的问题,因为他需要我们手动去解决冲突的文件,有没有一种方法可以快速地解决冲突呢?本篇文章将介绍如何使用ByondCompare去快速解决冲突二、在Git中进行配置使用如下命令对Git进行配置注:这里的--local是指以下这命令配

Nacos内核设计之一致性协议(上)

Nacos一致性协议Nacos技术架构先简单介绍下Nacos的技术架构从而对nacos有一个整体的认识如图Nacos架构分为四层用户层、应用层、核心层、各种插件再深入分析下nacos一致性协议的发展过程及原理实现为什么nacos需要一致性协议Nacos是一个需要存储数据的一个组件为了实现这个目标,就需要在Nacos内部

(2022,DALL·E2,CLIP,Diffusion,AR)使用 CLIP 潜在空间的分层文本条件图像生成

HierarchicalText-ConditionalImageGenerationwithCLIPLatents公众号:EDPJ(添加VX:CV_EDPJ或直接进Q交流群:922230617获取资料)目录0.摘要1.简介2.方法2.1解码器2.2先验3.图像处理3.1变化3.2插值3.3文本差异(TextDiffs

stm32学习笔记:OLED显示屏

一、OLED简介OLED:有机发光二极管,供电∶3~5.5V,通信协议︰I2C/SPI,分辨率∶128+64二、常用的调试方式串口调试∶通过串口通信,将调试信息发送到电脑端,电脑使用串口助手显示调试信息显示屏调试∶直接将显示屏连接到单片机,将调试信息打印在显示屏上Keil调试模式∶借助Keil软件的调试模式,可使用单步

推送服务本地通知频次及分类管控通知

尊敬的华为开发者:为了给用户提供更好的消息通知体验,营造清朗网络空间。从2023年9月15日开始,华为推送服务将基于《华为消息分类标准》对本地通知进行灰度管控,主要包括对应用发送的本地通知进行分类管理,以及对资讯营销消息统一进行频次管控。(注:本地通知指应用客户端直接调用系统接口发送的通知。)详细规则如下:应用在未申请

day2| 977.有序数组的平方、209.长度最小的子数组、 59.螺旋矩阵II

977.有序数组的平方题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%

/etc/sysctl.conf的参数

/proc/sys目录下存放着大多数内核参数,并且可以在系统运行时进行更改,不过重新启动机器就会失效。/etc/sysctl.conf是一个允许改变正在运行中的Linux系统的接口,它包含一些TCP/IP堆栈和虚拟内存系统的高级选项,修改内核参数永久生效。也就是说/proc/sys下内核文件与配置文件sysctl.co

充分利用学习平台,提升个人职业竞争力

在当今竞争激烈的职场环境中,个人职业竞争力的提升变得至关重要。而充分利用学习平台成为了我们提升竞争力的一种有效途径。学习平台不仅可以提供丰富多样的学习资源,还能提升个人技能和知识水平,让我们更具竞争力。学习平台提供了丰富的学习资源,为我们进一步学习和提升提供了便利。无论是在线课程、教学视频、学习资料还是学术期刊,学习平

热文推荐