PG主从切换

文章目录

  • 一、 不再需要配置recovery.conf文件
  • 二、 备库执行基础备份时新的命令行选项-R
  • 三、 如何生成standby.signal文件
  • 四、初次主备切换流程
    • 1、主库停止
    • 2、备库提升为新主库,对外提供服务
    • 3、新主库修改pg_hba.conf文件
    • 4、原主库新建$PGDATA/standby.signal文件
    • 5、原主库修改$PGDATA/postgresql.auto.conf文件
    • 6、启动原主库,变为新备库
  • 五、以后主备切换流程
    • 1、主库停止
    • 2、备库提升为新主库,对外提供服务
    • 3、原主库新建$PGDATA/standby.signal文件
    • 4、启动原主库,变为新备库

一、 不再需要配置recovery.conf文件

从PostgreSQL 12开始,在执行通过流复制来配置主备数据库的时候,不再需要配置额外配置recovery.conf文件了。取而代之的是在备库环境的$PGDATA路径下配置一个standby.signal文件,注意该文件是1个普通的文本文件,内容为空。理解起来就是,该文件是一个标识文件。如果备库通过执行pg_ctl promote提升为主库的话,那么该文件将自动消失。

二、 备库执行基础备份时新的命令行选项-R

PostgreSQL 9.4.10版本:

[postgres@psql ~]$ pg_basebackup -V
pg_basebackup (PostgreSQL) 9.4.10
[postgres@psql ~]$ pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.Usage:pg_basebackup [OPTION]...Options controlling the output:-D, --pgdata=DIRECTORY receive base backup into directory-F, --format=p|t       output format (plain (default), tar)-r, --max-rate=RATE    maximum transfer rate to transfer data directory(in kB/s, or use suffix "k" or "M")-R, --write-recovery-confwrite recovery.conf after backup-T, --tablespace-mapping=OLDDIR=NEWDIRrelocate tablespace in OLDDIR to NEWDIR-x, --xlog             include required WAL files in backup (fetch mode)-X, --xlog-method=fetch|streaminclude required WAL files with specified method

12版本是个分界线,12之前的如上所示,12以及之后如下所示
PostgreSQL 14.10版本:

[postgres@psql ~]$ pg_basebackup -V
pg_basebackup (PostgreSQL) 14.10
[postgres@psql ~]$ pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.pg_basebackup takes a base backup of a running PostgreSQL server.Usage:pg_basebackup [OPTION]...Options controlling the output:-D, --pgdata=DIRECTORY receive base backup into directory-F, --format=p|t       output format (plain (default), tar)-r, --max-rate=RATE    maximum transfer rate to transfer data directory(in kB/s, or use suffix "k" or "M")-R, --write-recovery-confwrite configuration for replication-T, --tablespace-mapping=OLDDIR=NEWDIRrelocate tablespace in OLDDIR to NEWDIR--waldir=WALDIR    location for the write-ahead log directory-X, --wal-method=none|fetch|streaminclude required WAL files with specified method-z, --gzip             compress tar output-Z, --compress=0-9     compress tar output with given compression level

从对比中,可以看到在9.4.10版本中,-R选项用于创建recovery.conf文件,而在14.10版本中,-R则是用于创建用于replication的配置文件,其实就是生成$PGDATA/standby.signal文件。

三、 如何生成standby.signal文件

两种方式,一种是在备库执行基础备份的时候,加上-R选项用于自动创建$PGDATA/standby.signal文件:

[postgres@psql pg14.10]$ pwd
/postgres/pg14.10
[postgres@psql pg14.10]$ ll
total 20
drwxrwxr-x  2 postgres postgres 4096 Oct 19 15:01 bin
drwxrwxr-x  6 postgres postgres 4096 Oct 19 15:01 include
drwxrwxr-x  4 postgres postgres 4096 Oct 19 15:01 lib
drwxrwxr-x  8 postgres postgres 4096 Oct 19 15:01 share
[postgres@psql pg14.10]$ pg_basebackup -h XXX -p 5432 -U replica --password -X stream -Fp --progress -D $PGDATA -R
Password: 
24597/24597 kB (100%), 1/1 tablespace
[postgres@psql pg12.8]$ ll data
total 120
-rw------- 1 postgres postgres   224 Oct 20 15:11 backup_label
drwx------ 5 postgres postgres  4096 Oct 20 15:11 base
drwx------ 2 postgres postgres  4096 Oct 20 15:11 global
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_commit_ts
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_dynshmem
-rw------- 1 postgres postgres  4867 Oct 20 15:11 pg_hba.conf
-rw------- 1 postgres postgres  1636 Oct 20 15:11 pg_ident.conf
drwx------ 4 postgres postgres  4096 Oct 20 15:11 pg_logical
drwx------ 4 postgres postgres  4096 Oct 20 15:11 pg_multixact
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_notify
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_replslot
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_serial
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_snapshots
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_stat
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_stat_tmp
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_subtrans
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_tblspc
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_twophase
-rw------- 1 postgres postgres     3 Oct 20 15:11 PG_VERSION
drwx------ 3 postgres postgres  4096 Oct 20 15:11 pg_wal
drwx------ 2 postgres postgres  4096 Oct 20 15:11 pg_xact
-rw------- 1 postgres postgres   337 Oct 20 15:11 postgresql.auto.conf
-rw------- 1 postgres postgres 26718 Oct 20 15:11 postgresql.conf
-rw------- 1 postgres postgres     0 Oct 20 15:11 standby.signal

方式2:如果在备库上执行pg_basebackup对主库进行备份的时候,没有使用-R选项的话,我们可以在备库的$PGDATA路径下,touch standby.signal就好了。

记住:该文件只是一个标识文件,它的存在就是告诉数据库,当我们执行pg_ctl start启动的时候,当前库的角色是standby,不是primary角色。

四、初次主备切换流程

1、主库停止

# 主库停止进程以及服务
pg_ctl stop -m fast
# 查看状态是否停止
pg_ctl status
# 显示:pg_ctl: no server running

通过pg_ctl stop -m fast停止原来的主库之后,数据库后台进程都没有了。

2、备库提升为新主库,对外提供服务

# 备库执行
pg_ctl promote

重要1:启动备库为新主库的命令是pg_ctl promote。

提升备库为主库之后,可以看到,后台进程中不再有startup recovering,以及walreceiver streaming进程了。同时,多了postgres: walwriter 写进程。

重要2:$PGDATA/standby.signal文件自动消失了。这是告诉PostgreSQL,我现在不再是备库了,我的身份是主库了。

3、新主库修改pg_hba.conf文件

修改新主库(原备库XXXIP)的$PGDATA/pg_hba.conf文件,在其中添加允许新备库(原主库XXXIP)可以通过replica用户访问数据库的条目信息。

host    replication     replicaotr             XXXIP/32           md5

如果不做这一步配置的话,将来启动原主库为新备库的时候,可能会遇到下述错误。

CST [11394] FATAL:  could not connect to the primary server: FATAL:  no pg_hba.conf entry for replication connection from host "XXXIP", user "replica", SSL off
CST [11395] FATAL:  could not connect to the primary server: FATAL:  no pg_hba.conf entry for replication connection from host "XXXIP", user "replica", SSL off

注意:如果主从环境的数据库没有配置浮动IP的话,则这里的IP地址,应该直接填原主库的实际IP地址。

4、原主库新建$PGDATA/standby.signal文件

touch standby.signal

注意:这一步骤非常非常重要,如果不配置该文件的话,那么原来的主库一旦重新启动话,就将成为了1个新的独立主库,脱离了主从数据库环境。

5、原主库修改$PGDATA/postgresql.auto.conf文件

vim postgresql.auto.conf
# 添加如下内容
primary_conninfo = 'user=replica password=''youpasswd'' channel_binding=disable host=XXXIP这里是新主库的IP port=5432 sslmode=disable sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=disable krbsrvname=postgres target_session_attrs=any'

6、启动原主库,变为新备库

pg_ctl start

这样,就完成了第一次主从数据库环境的切换操作了。

五、以后主备切换流程

1、主库停止

# 主库停止进程以及服务
pg_ctl stop -m fast
# 查看状态是否停止
pg_ctl status
# 显示:pg_ctl: no server running

2、备库提升为新主库,对外提供服务

# 备库执行
pg_ctl promote

3、原主库新建$PGDATA/standby.signal文件

touch standby.signal

4、启动原主库,变为新备库

pg_ctl start

这样就完成了一次主备切换了。

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

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

相关文章

嵌入式进阶——HID协议

🎬 秋野酱:《个人主页》 🔥 个人专栏:《Java专栏》《Python专栏》 ⛺️心若有所向往,何惧道阻且长 文章目录 USB烧录USB HID协议USB协议组成通讯流程 官方USB HID范例文件说明修改PC端的显示 兼容库函数HID键盘USB调试工具USB 描述符设备描述…

mysql登录报错 Client does not support authentication protocol requested by server

mysql登录报错 Client does not support authentication protocol requested by server 在使用 MySQL 数据库时,你可能会遇到以下错误消息: ERROR 1251 (08004): Client does not support authentication protocol requested by server; consider upgr…

【数据结构与算法 | 栈 + 队列篇】力扣232, 225

1. 力扣232 : 用栈实现队列 (1). 题 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移…

suse xen内核安装启动失败问题

Error 15 /boot/xen.gz not found Filesystem type is ext2fs, partition type 0x83 Error 15 原因: 除了安装以下三个安装包 -rw-r--r-- 1 root root 23362981 Jun 14 2013 kernel-xen-3.0.76-0.11.1.x86_64.rpm -rw-r--r-- 1 root root 14158930 Jun 14 20…

Anaconda -> Anaconda支持什么编程语言的环境配置

Anaconda是一个数据科学和机器学习的开发环境,它支持多种编程语言的环境配置,包括: Python:Anaconda默认安装了Python和必需的Python库,可以方便地进行Python编程和数据分析。 R:Anaconda也可以配置R语言环…

MFC工控项目实例之一主菜单制作

1、本项目用在WIN10下安装的vc6.0兼容版实现。创建项目名为SEAL_PRESSURE的MFC对话框。在项目res文件下添加相关256色ico格式图片。 2、项目名称:密封压力试验机 主菜单名称: 系统参数 SYS_DATA 系统测试 SYS_TEST 选择型号 TYP_CHOICE 开始试验 TES_STA…

【参会通知】第四届电子、信息与计算技术前沿国际会议

尊敬的学者/专家: 您好! 我们诚挚地邀请您参与2024年电子、信息与计算技术前沿国际会议(ICFEICT 2024)。会议将于2024年6月22日-6月25日在北京召开。ICFEICT 2024旨在为来自国内外高等院校、科研院所、企事业单位的专家、教授、…

SAP_SD模块 物料科目分配/成本简介

SAP系统各模块与财务都有个方面的集成。文本主要说明销售模块中的科目分配和成本的一个对应关系。 1、首先是在物料主数据上销售视图中的物料科目分配组,S1主营、S2材料等字段,物料销售的时候会将这个物料产生的记录到对应的科目中。 首先是物料主数据中…

pip更新网络问题:Exception: Traceback (most recent call last): File

报错:rootdebian01:~# pip3.9 install --upgrade pip Collecting pip Downloading pip-24.0-py3-none-any.whl (2.1 MB) |██████████████████▉ | 1.2 MB 5.5 kB/s eta 0:02:39ERROR: Exception: Traceback (most recent call last): File “/usr…

利用cython将.py文件编译为.pyd文件

文章目录 1. 引言2. py文件编译为pyd文件步骤2.1 环境准备2.2 准备setup.py文件2.3 进行编译 3. 测试代码 1. 引言 在实际的Python开发中,为了防止Python脚本源码暴露,常常需要对python源码文件进行加密保护,Python的原始文件格式为.py&…

在outlook的邮件中插入HTML;HTML模板获取;页面组态手动生成HTML

本文介绍如何在outlook发送邮件时,在邮件中插入HTML,此HTML可以从获取模板自行进行修改。 文章目录 一、下载HTML模板(或自己制作好HTML文件)二、outlook新增宏三、新建邮件,插入HTML四、通过图像化页面组态手动生成HT…

做场外个股期权怎么询价

做场外个股期权怎么询价?没有具体的哪家做市商是询价是最低的,个人投资者需要通过机构通道方询价进行对比,各券商的报价由询价机构方提供给到投资者,可以参考不同券商的报价进行比对,再决定是否进行投资。本文来自&…

操作系统复习-操作系统概述

操作系统概述 操作系统的基本功能 操作系统统一管理着计算机资源: 处理器资源IO设备资源存储器资源文件资源 操作系统实现了对计算机资源的抽象: 用户无需向硬件接口编程IO设备管理软件,提供读写接口文件管理软件,提供操作文…

关于验证码的那些漏洞

一、短信轰炸 这类漏洞存在的原因是没有对短信验证码的发送时间、用户及其IP作一些限制。 案例1、正常的短信轰炸 burp一直发包即可 案例2、并发绕过 做了限制咋办?可以试试并发(万物皆可并发) 使用turbo intruder插件进行并发。 并发次数越大是不是轰炸就越多。 …

宝塔安装java环境Jdk1.8

1.打开宝塔——选择“终端”——输入SSH的服务器IP和SSH账号,选择密码验证,输入密码 2。登录成功后,输入:yum list java-1.8*,用于列出所有与 “java-1.8” 相关的软件包 yum list java-1.8* 3.安装Jdk1.8: yum insta…

[leetcode hot150]第二百三十六题,二叉树的最近公共祖先

题目: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个…

【C++】前缀和:一维前缀和

1.题目 2.算法思路 如果暴力求解的话,时间复杂度为O(n*q)。一定会超时。 优化的思路也很简单,就是得到一个求和数组arr,使arr[i]a1a2...ai。 然后每次求l到r之间的数时,直接arr[r]-arr[l-1]就可以得出! 这样&#…

在宝塔centos7中使用pyenv,配置虚拟环境

安装pyenv 首先确认你当前python版本 确保 yum 使用 Python 2 alternatives --set python /usr/bin/python2这个命令将系统默认的Python版本设置为Python 2 安装python3,venv sudo dnf install python3-venv如果没有dnf: yum install python3手动安装必要的软件包 curl …

从GPT-3.5到GPT-4O:探索AI的进化之旅,哪一版更懂你?

如何评价GPT-4o? 最新的GPT-4O,被誉为GPT-4的增强版。它在保持前代产品优秀性能的基础上,大幅降低了使用成本,使得更多的普通用户也能享受到顶尖AI的服务。GPT-4O在非英语语言处理上的强化,更是让其在全球范围内的适用性大大提高…

Linux 编译器gcc/g++使用

gcc/g同理 编译器运行过程 1. 预处理(进行宏替换) gcc -E a.c -o a.i 预处理后还是c语言 -E 只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面 告诉gcc,从现在开始进行程序的翻译,将预处理工作做完停下 2. 编译&#x…