PostgreSQL 主从复制故障切换

news/2024/7/9 23:20:14 标签: postgresql, 数据库

文章目录

  • 前言
  • 环境准备
    • 搭建主从节点
    • 配置主从节点
    • 从节点加入主节点
    • 查看主从信息
  • 主从故障切换

前言

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/
      

http://www.niftyadmin.cn/n/5033119.html

相关文章

el-date-picker 封装一个简单的日期组件, 主要是禁用日期

子组件 <template><div><el-date-pickerv-model"dateModel"type"datetimerange":picker-options"pickerOptions"range-separator"至"ref"picker"start-placeholder"开始日期"end-placeholder&quo…

Postman应用——Collection、Folder和Request

文章目录 Collection新建CollectionCollection重命名保存Request到Collection在Collection下创建Request删除Collection Folder新建FolderFolder重命名保存Request到Folder在Folder下创建Request在Folder下创建Folder删除Folder Request创建临时RequestRequest重命名删除Reques…

单片机第三季-第二课:STM32存储器、电源和时钟体系

目录 1&#xff0c;存储器 1.1&#xff0c;位带操作 2&#xff0c;启动模式 3&#xff0c;电源管理系统 4&#xff0c;复位和时钟 4.1&#xff0c;复位 4.2&#xff0c;时钟 1&#xff0c;存储器 ICode总线&#xff1a; 该总线将Cortex™-M3内核的指令总线与闪存指…

【集成学习】对已训练好的模型进行投票

在不同的数据预处理情况下训练得到了三个SVM模型&#xff0c;结果都差不多&#xff0c;对这三个模型的分类结果进行投票 1、三个模型的model_path # 最终model的path self.model_path log_path/model_name_model.gz self.time_log log_path/model_name_time_log.csv# 模型1…

Python封装一个接收UDP组播的模块

Python封装一个可以接收UDP组播的类MulticastDataReceiver&#xff0c;在子线程中接收组播数据 # udp_multicast.py import socket import threading import timeclass MulticastDataReceiver:def __init__(self, multicast_group, multicast_port, dest_addr, dest_port):sel…

Python 列表的常用方法

视频版教程 Python3零基础7天入门实战视频教程 列表list对象提供了很多内置方法供我们操作list。我们要掌握常用的list方法。(具体类和对象&#xff0c;方法我们下一个章节详细讲解) 1&#xff0c;修改指定位置的元素值 语法&#xff1a;列表[下标索引]值 list1 ["jav…

【LEAP模型】能源需求、碳排放建模预测、不确定性分析

采用部门分析法建立的LEAP&#xff08;Long Range Energy Alternatives Planning System/ Low emission analysis platform&#xff0c;长期能源可替代规划模型&#xff09;是一种自下而上的能源-环境核算工具&#xff0c;由斯德哥尔摩环境研究所和美国波士顿大学联合研发。该模…

医疗领域超低温监控,你了解吗?

超低温冰箱在医疗保健领域中扮演着不可或缺的角色。它们被广泛用于存储生物样本、药物和疫苗等温度敏感的医疗物品&#xff0c;以确保这些关键资源的质量和有效性。 然而&#xff0c;温度波动和不稳定性可能会对这些物品造成严重损害&#xff0c;甚至威胁患者的生命。为了应对这…