同步流复制过程

同步流复制过程

    • 第一步:主库(primary端)
    • 第二步:备库(standby端)
    • 第三步:主库(primary端)
    • 其他
      • 1.主库IP变更
      • 2.主库上做回归测试时会卡住并出现以下提示

参考链接:

POSTGRES 15 流复制搭建主备

PostgreSQL 14.5复制流(同步复制)

postresql同步流复制-多备库

(同步)可以一主一备,但是如果备库损坏,会导致主库部分数据丢失(异步流复制则不会)

此过程同时也包含了“异步”流复制的设置过程

第一步:主库(primary端)

  1. 设置归档相关参数(如果已经开启了同步流复制和归档模式archive_mode = on,但是没有对归档相关参数进行设置,主库会一直发出警告:WARNING: archive_mode enabled, yet archiving is not configured,也是因为没有设置配置文件的archive_commandarchive_timeout导致的)
# 在主库数据目录$PGDATA下创建目录arch_log
[postgres@localhost data]$ mkdir arch_log# 归档命令(写成bash文件或者直接把这一长串写到下一步的postgresql.conf文件的archive_command都可以)(这里演示的是bash文件)
[postgres@localhost data]$ vim archive.sh
# 文件内容如下,如果环境变量没有配置$PGDATA,就写自己主库数据目录的绝对地址
cp --preserve=timestamps $1 $PGDATA/arch_log/$2 ; find $PGDATA/arch_log -type f -mtime +30 | xargs rm -fr;
#(假设$PGDATA表示/pgdata/15.4/poc/data/)则文件内容为:
# cp --preserve=timestamps $1 /pgdata/15.4/poc/data/arch_log/$2 ; find /pgdata/15.4/poc/data/arch_log -type f -mtime +30 | xargs rm -fr;
  1. 修改配置文件postgresql.confpg_hba.conf
[postgres@localhost ~]$ cd /pgdata/15.4/poc/data/[postgres@localhost data]$ vim pg_hba.conf 
#最后一行加上:
host    replication     all             0.0.0.0/0               md5[postgres@localhost data]$ vim postgresql.conf
listen_addresses = '*'	# 监听(备库们的)地址,这个很重要
max_wal_senders = 10	# 必须设置为非零值,且比备库数量多
wal_level = replica		# 参数设置为“replica”或“logical”。
min_wal_size = 2GB		# 默认值太小,备库容易失效,增大该值,这里相应的max_wal_size记得改成比min大的值
full_page_writes = on	# 必须打开
archive_mode = on
archive_command = '/bin/bash archive.sh %p %f' # 这里刚刚新建了bash文件就写文件,没有的话把文件里的命令直接写上去是一样的
archive_timeout = 1800# restart重启,使以上配置生效
[postgres@localhost data]$ pg_ctl -D /pgdata/15.4/poc/data/ restart
  1. 创建”流复制“用户
[postgres@localhost data]$ psql -p 5432 -d postgres
psql (15.4)
Type "help" for help.postgres=# create user replicator1 replication login connection limit 5 password 'cc';
CREATE ROLE
  1. sudo关闭防火墙响应端口的限制(因为备库通过 端口要访问主库的内容)
[postgres@localhost ~]$ su - root
密码:
上一次登录:三 13 15:12:51 CST 2024pts/0 上
# 注意这个是临时关闭,主库所在主机重启后,防火墙又会自动打开
[root@localhost ~]# systemctl stop firewalld.service
# 永久性措施:到root下,设置防火墙放行端口,这里注意如果主备库在同一台主机,要修改其中一个端口号为非5432,不然会冲突;设置完后重新加载防火墙
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-port=5432/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
  1. 记住primary的ip地址、刚刚创建的”流复制“用户的名字和密码,到备库去继续操作

第二步:备库(standby端)

  1. 新建备库路径、并pg_basebackup备份主库数据
[postgres@localhost ~]$ mkdir /pgdata/15.4/poc/data_standby/# 递归修改路径所有者
[postgres@localhost ~]$ chown -R postgres /pgdata/15.4/poc/data_standby# 备份主库数据:pg_basebackup -h 主库的ip地址 -U 主库上的”流复制“用户的名字
# 然后输入主库上的”流复制“用户的密码
[postgres@localhost ~]$ pg_basebackup -h 192.168.44.129 -U replicator1 -F p -P -X stream -R -D /pgdata/15.4/poc/data_standby/ -l backup20240103
Password: 
31799/31799 kB (100%), 1/1 tablespace
# 同一台虚拟机同时做主备份的备份命令:pg_basebackup -R -X stream -F p -U usera -D /pgdata/15.3/poc/data_standby/ -h 127.0.0.1 -p 5432 -P -v
# pg_basebackup选项的相关含义见第一个参考链接# 必须要chmod递归修改备库下所有文件权限均为0700或者0750,不然启动pg_ctl启动备库时会报如下错:
# 2024-01-03 15:39:41.440 CST [7704] FATAL:  data directory "/pgdata/15.4/poc/data_standby" has invalid permissions
# 2024-01-03 15:39:41.440 CST [7704] DETAIL:  Permissions should be u=rwx (0700) or u=rwx,g=rx (0750).
# stopped waiting
# pg_ctl: could not start server
[postgres@localhost ~]$ chmod -R 0700 /pgdata/15.4/poc/data_standby
  1. 修改配置文件postgresql.conf
[postgres@localhost ~]$ vim /pgdata/15.4/poc/data_standby/postgresql.conf
# 仅仅修改hot_standby = on之后,:wq保存退出vim,执行启动备库pg_ctl -D /pgdata/15.4/poc/data_standby start,回到主库psql执行select * from pg_stat_replication;就可以看到已经搭建好的异步流复制
hot_standby = on# 修改完记得restart重启使其生效
[postgres@localhost data_standby]$ pg_ctl -D /pgdata/15.4/poc/data_standby restart

== 异步流复制到这里就完成了 ==

  1. 修改配置文件postgresql.auto.conf
[postgres@localhost data_standby]$ vim postgresql.auto.conf 
# 修改主库连接的信息,注意:application_name这个名字不要和其他备库重复了
# user和password分别填主库创建的”流复制“用户的名字和密码
# sslcompression是0或者1都行
primary_conninfo = 'application_name=postgresql2 user=replicator1 password=cc host=10.10.100.54 port=5432 sslmode=disable sslcompression=1'# 修改完记得restart重启使其生效

第三步:主库(primary端)

  1. 修改配置文件postgresql.conf
[postgres@localhost ~]$ vim /pgdata/15.4/poc/data/postgresql.conf# ANY 1表示有任意一台备库进行同步之后即可返回,可根据需要修改,目前只有一个备库所以这么写
# 括号里写备库刚刚在postgresql.auto.conf配置的 application_name
synchronous_standby_names = 'ANY 1 (postgresql2)'
# 如果有多个备库,备库的application_name分别叫 postgresql1,postgresql2 …,可以写成FIRST格式:
# synchronous_standby_names = 'postgresql1,postgresql2'
# FIRST语法下,放在第一个的备库是同步主库,其他为同步备库,同步的节点值为sync,异步的节点值为asyn;被匹配为同步的节点,但是被个数限制的值为 potential
# ANY语法下,值为quorum,表现上没有同步和异步一说,一个写事务主节点收到指定数量的standy节点的反馈,接着就会给客户端返回事务执行成功。
wal_level = hot_standby
synchronous_commit = on
hot_standby_feedback = true	
# hot_standby = on # 保持默认on就行# 修改完记得restart重启使其生效
[postgres@localhost ~]$ pg_ctl -D /pgdata/15.4/poc/data/ restart
  1. 回去重启一下备库,主库这边应该就会提示
2024-01-03 16:15:31.677 CST [11550] LOG:  standby "postgresql2" is now a candidate for quorum synchronous standby
  1. 验证“同步”流复制是否开启成功(备库开启成功时才会有相应的记录,关闭备库查询不到)
[postgres@localhost ~]$ psql
psql (15.4)
Type "help" for help.postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid              | 11550
usesysid         | 78253
usename          | replicator1
application_name | postgresql2
client_addr      | 192.168.44.128
client_hostname  | 
client_port      | 50736
backend_start    | 2024-01-03 16:15:31.655289+08
backend_xmin     | 
state            | streaming
sent_lsn         | 0/240004B8
write_lsn        | 0/240004B8
flush_lsn        | 0/240004B8
replay_lsn       | 0/240004B8
write_lag        | 00:00:00.000643
flush_lag        | 00:00:00.001356
replay_lag       | 00:00:00.002426
sync_priority    | 1
sync_state       | quorum
reply_time       | 2024-01-03 16:15:31.69824+08# 关于sync_state,这里的呈现与主库配置文件postgresql.conf中的synchronous_standby_names

其他

1.主库IP变更

  • 修改备库的配置文件postgresql.conf,把配置项primary_conninfo中的host地址修改为主库最新IP地址即可,记得restart重新加载conf文件。

2.主库上做回归测试时会卡住并出现以下提示

2024-01-05 11:21:45.754 CST [3969] WARNING:  canceling wait for synchronous replication due to user request
2024-01-05 11:21:45.754 CST [3969] DETAIL:  The transaction has already committed locally, but might not have been replicated to the standby.
  • 开启任一备库即可

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

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

相关文章

TOPS、MIPS、DMIPS、MFLOPS、吞吐量与推理效率

1.概述 在深度学习对应的神经推理中经常涉及几个重要概念,TOPS、MIPS、DMIPS,MFLOPS,下文对其做对比说明。 2.概念对比 2.1 MIPS Million Instructions Per Second的缩写,每秒处理的百万级的机器语言instructions。这是衡量处…

【单片机】四种烧写方式简介

目录 单片机的四种烧写方式简介 1.使用JTAG接口实现2.SWD接口烧录方式3.ISP烧写方式,用UART实现(常用)4.SWIM单总线下载方式 烧录方式基本介绍烧录方式详述 1、ISP:In System Programming2、IAP:In Applicatin Program…

部分城市公交站点数据,Shp+excel格式数据,2020年,几何类型为点

随着城市的发展和人口的增长,公共交通成为了人们出行的重要方式之一。而公交站点作为公共交通的重要组成部分,其数据信息的获取和分析对于城市规划和管理具有重要意义。 今天来分享一下部分城市公交站点数据: 首先先了解下该数据的基本信息 …

报错解决:RuntimeError: Error building extension ‘bias_act_plugin‘

系统: Ubuntu22.04, nvcc -V:11.8 , torch:2.0.0cu118 一:BUG内容 运行stylegan项目的train.py时遇到报错👇 Setting up PyTorch plugin "bias_act_plugin"... Failed! /home/m…

使用 RaiseExceptionMeta 元类隐式装饰 Validator 类中的所有校验方法

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器,从编码到发布全过程》 2、相关回顾 使用 raise…

How to talk about your work?

Orial Tutorial English Speaking Practice: Talking About Your Job 🗣️ Hi! Tim here with another 925English lesson! In today’s lesson, we are going to learn how to talk about the work you do in your job. Discussing Your Job Role Overview: L…

中国社科院大学与新加坡新跃社科大学工商管理博士2024申请中

中国社科院大学与新加坡新跃社科大学工商管理博士2024申请中 【项目名称】中国社会科学院大学与新加坡新跃社科大学工商管理博士项目 【学制】最短3年,最长不超过7年 【学位证书】新加坡新跃社科大学工商管理博士学位 【招生对象】企业高管、咨询顾问及其他有经…

Qt QLineEdit文本框控件

文章目录 1 属性和方法1.1 占位字符串1.2 对齐方式1.3 回显模式1.4 读写控制1.5 格式控制1.6 信号和槽 2 实例2. 布局2.2 代码实现 QLineEdit 是Qt 中的文本框,准确地说是单行文本框,通常用于接受用户的输入。 比如用户输入用户名、密码等,都…

ChatGPT付费创作系统V2.5.5独立版+前端

ChatGPT付费创作系统V2.5.5版本优化了很多细节,功能增加增加长篇写作功能。该版本为编译版无开源,本版本特别处理了后台弹窗、暗链网址。特别优化了数据库。升级过程中未发现任何BUG,全新安装或者升级安装均未出现400或者500错误,…

【数据结构专题】「延时队列算法」史上手把手带你认识一下数据结构的基本概念与术语

在本节中,我们将对一些概念和术语赋以确定的含义,以便与读者取得“共同的语言”。这些概念和术语将在以后的章节中多次出现。 数据 概念 数据(data) 是对客观事物的符号表示, 在计算机科学中是指所有能输人到计算机中并被计算机程序处理的…

Python 工具 | conda 基本命令

Hi,大家好,我是源于花海。本文主要了解 Python 的工具的 conda 相关的基本命令。Conda 是一个开源的软件包管理系统和环境管理系统,用于安装多个版本的软件包及其依赖关系,并在它们之间轻松切换。在Windows下,需要安装…

Mobile Aloha 【软硬件原理+代码解析】

1. Mobile ALOHA Hardware2. Imitation Learning3. Co-training with Static ALOHA Data4. Task Setting5. Experiments5.1 ACT5.2 对比ACT、Diffusion Policy和VINN 6. Software Code Analyze Mobile ALOHA: 利用低成本全身远程操作系统学习复杂的双手移动操作技能 [译] 硬件代…

#{}和${}的区别?

#{}是占位符,预编译处理;${}是拼接符,字符串替换,没有预编译处理。Mybatis在处理#{}时,#{}传入参数是以字符串传入,会将SQL中的#{}替换为?号,调用PreparedStatement的set方法来赋值。Mybatis在…

NonCopyable

NonCopyable 是 C 用于阻止派生类生成拷贝构造和拷贝赋值函数的一个通用类,在很多地方都有使用,例如 arm、boost等,在 effective c 中也有讲到,以下是一种使用方法: class NonCopyable { private:NonCopyable(const N…

Dart中令人惊艳的用法

Dart是谷歌开发的现代化编程语言,凭借其简洁的语法和强大的功能,在开发者当中赢得了极高的声誉,尤其是在Flutter框架中发挥了巨大的作用。本文将介绍Dart中的8个令人惊艳的用法,这些用法不仅技术深度足够,充满启发性&a…

Elasticsearch基本操作之文档操作

本文来说下Elasticsearch基本操作之文档操作 文章目录 文档概述创建文档示例创建文档(生成随机id)创建文档(自定义唯一性标识) 查看文档示例根据主键查看文档查看所有文档 修改文档示例全局修改文档局部修改文档 删除文档示例根据文档的唯一性标识删除文档条件删除文档 本文小结…

C++之返回值优化

返回值优化(Return value optimization,缩写为RVO)是C的一项编译优化技术。它最大的好处是在于: 可以省略函数返回过程中复制构造函数的多余调用,解决 “C 中长久以来为人们所诟病的临时对象的效率问题”。 我们先谈正…

【leetcode 447. 回旋镖的数量】审慎思考与推倒重来

447. 回旋镖的数量 题目描述 给定平面上 **n **对 互不相同 的点 points ,其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 返回平…

Linux引导过程和服务

一、Linux操作系统引导过程 1.引导过程 bios 加电自检——mbr——grub——加载内核——启动进程 加电后BIOS程序回自检硬件,硬件无故障后,会根据第一次启动项去找内核,一般来说第一启动项是硬盘,找到硬盘后,会根据mb…

2. Mybatis 中SQL 执行原理

这里有两种方式,一种为常用的 Spring 依赖注入 Mapper 的方式。另一种为直接使用 SqlSessionTemplate 执行 Sql 的方式。 Spring 依赖注入 Mapper 的方式 Mapper 接口注入 SpringIOC 容器 Spring 容器在扫描 BeanDefinition 阶段会扫描 Mapper 接口类&#xff0c…