Docker PG流复制搭建实操

目录标题

      • 制作镜像
        • 1. 删除旧的容器
        • 2. 创建并配置容器
        • 3. 初始化数据库并启动
      • 主库配置参数
        • 4. 配置主库
        • 5. 修改 `postgresql.conf` 配置
      • 备库配置参数
        • 6. 创建并配置备库容器
        • 7. 初始化备库
      • 流复制
        • 8. 配置&检查主库复制状态
        • 9. 检查备库配置
      • 优化建议
      • 问题1:FATAL: using recovery command file "recovery.conf" is not supported

制作镜像

1. 删除旧的容器
docker rm -f pg15.7
2. 创建并配置容器
docker run -it --name=pg15.7 --restart=always --entrypoint=/bin/bash --user=root \
  -e PGDATA=/pgdata/ \
  -v /opt/qfusion/master/data:/pgdata \
  k8smaster.qfusion.irds/irds/postgres-15:v1.4.1-202409251139

# sed -e 's|^mirrorlist=|#mirrorlist=|g' \
#     -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' \
#     -i.bak \
#     /etc/yum.repos.d/Rocky*.repo
# -- 设置yum源缓存
# dnf makecache -y
# yum repolist

mv /etc/yum.repos.d/pgdg-redhat-all.repo /root
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
dnf install -y --enablerepo=powertools postgresql14-devel unzip redhat-rpm-config openssl-devel
dnf install iproute

echo 'export PATH=$PATH:/usr/pgsql-15/bin' >> ~/.bashrc
source ~/.bashrc


3. 初始化数据库并启动
chown -R postgres:postgres /pgdata
su - postgres 
/usr/pgsql-15/bin/initdb -D /pgdata/ 
/usr/pgsql-15/bin/pg_ctl -D /pgdata/ -l logfile start
docker commit pg15.7 pg15.7-build

主库配置参数

172.18.12.100 主
172.18.12.101 备

创建网络

docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.12.1 mynet

docker network

4. 配置主库
mkdir -p /opt/qfusion/master/data

docker rm -f pg15.7-master
docker run -it --name=pg15.7-master --restart=always  --entrypoint=/bin/bash --user=root \
  --network=mynet --ip 172.18.12.100 \
  -e POSTGRES_PASSWORD=master \
  -p 5432:5432 \
  -v /opt/qfusion/master/data:/pgdata \
  pg15.7-build 


echo "host replication replica 172.18.12.101/32 trust" >> /pgdata/pg_hba.conf
tail /pgdata/pg_hba.conf

psql
CREATE ROLE replica login replication encrypted password 'replicationpassword';

pg_hba.conf

5. 修改 postgresql.conf 配置
grep -E 'listen_addresses|wal_level|max_wal_senders|wal_keep_segments|hot_standby|synchronous_commit|synchronous_standby_names|archive_mode|archive_command' postgresql.conf
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
#wal_level = replica                    # minimal, replica, or logical
#synchronous_commit = on                # synchronization level;
#archive_mode = off             # enables archiving; off, on, or always
                                # (empty string indicates archive_command should
#archive_command = ''           # command to use to archive a logfile segment
#max_wal_senders = 10           # max number of walsender processes
#synchronous_standby_names = '' # standby servers that provide sync rep
#hot_standby = on                       # "off" disallows queries during recovery
#hot_standby_feedback = off             # send info from standby to prevent

sed -i 's/^#listen_addresses = .*/listen_addresses = \'*\'/' postgresql.conf

sed -i 's/^#archive_mode = .*/archive_mode = on/' postgresql.conf

grep -E 'listen_addresses|archive_mode' /pgdata/postgresql.conf

备库配置参数

6. 创建并配置备库容器
docker rm -f pg15.7-slave1

mkdir -p /opt/qfusion/slave1/data

docker run -it --name=pg15.7-slave1 --restart=always --entrypoint=/bin/bash --user=root \
  --network=mynet --ip 172.18.12.101 \
  -e POSTGRES_PASSWORD=master \
  -p 5433:5432 \
  -v /opt/qfusion/slave1/data:/pgdata \
  pg15.7-build
7. 初始化备库

su - postgres
chown -R postgres:postgres /pgdata

pg_basebackup -Fp --progress -R -h 172.18.12.100 -U replica -D /pgdata -X stream

# rm -rf /pgdata/*

默认生成的文件
cat postgresql.auto.conf
ls -l standby.signal

docker restart pg15.7-slave1

nohup /usr/pgsql-15/bin/pg_ctl -D /pgdata/ -l logfile start

流复制

8. 配置&检查主库复制状态
# 替换synchronous_standby_names 为standby1
sed -i 's/^#synchronous_standby_names = .*/synchronous_standby_names = standby1/' postgresql.conf
grep synchronous_standby_names /pgdata/postgresql.conf

SELECT pg_reload_conf();

SELECT pg_reload_conf();

SELECT * FROM pg_stat_replication;
9. 检查备库配置
# 增加 application_name=standby1 到 postgresql.auto.conf,默认是 walreceiver
vi /pgdata/postgresql.auto.conf
primary_conninfo = 'user=replica passfile=''/home/postgres/.pgpass'' channel_binding=prefer host=172.18.12.100 port=5432 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any application_name=standby1'


# 检查synchronous_commit是否为on,如果不是需要修改
show synchronous_commit;

# 在主库查看视图
SELECT application_name, state, sync_state FROM pg_stat_replication;

参数级别

优化建议

  1. 确保网络连接:确保主备库之间的网络连接稳定,避免因网络问题导致复制失败。
  2. 监控和报警:使用监控工具(如 Prometheus、Grafana)监控主备库的复制状态,设置报警规则,及时发现并处理问题。
  3. 备份和恢复:定期备份主备库的数据,确保在出现故障时能够快速恢复。
  4. 性能调优:根据实际负载调整 postgresql.conf 中的参数,如 max_wal_senderswal_keep_segments 等,以优化复制性能。

希望这些步骤和优化建议能帮助您更好地配置和管理 PostgreSQL 的主备复制。如果有任何问题或需要进一步的帮助,请随时联系。

在这里插入图片描述

问题1:FATAL: using recovery command file “recovery.conf” is not supported

tail postgresql-Mon.log
2025-01-13 09:41:22.194 UTC [122] LOG:  starting PostgreSQL 15.7 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-22), 64-bit
2025-01-13 09:41:22.194 UTC [122] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2025-01-13 09:41:22.194 UTC [122] LOG:  listening on IPv6 address "::", port 5432
2025-01-13 09:41:22.195 UTC [122] LOG:  listening on Unix socket "/run/postgresql/.s.PGSQL.5432"
2025-01-13 09:41:22.196 UTC [122] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2025-01-13 09:41:22.199 UTC [126] LOG:  database system was interrupted; last known up at 2025-01-13 09:29:27 UTC
2025-01-13 09:41:22.208 UTC [126] FATAL:  using recovery command file "recovery.conf" is not supported
2025-01-13 09:41:22.209 UTC [122] LOG:  startup process (PID 126) exited with exit code 1
2025-01-13 09:41:22.209 UTC [122] LOG:  aborting startup due to startup process failure
2025-01-13 09:41:22.209 UTC [122] LOG:  database system is shut down

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Flink】Flink内存管理

Flink内存整体结构图: JobManager内存管理 JVM 进程总内存(Total Process Memory)Flink总内存(Total Flink Memory):JVM进程总内存减去JVM Metaspace(元空间)和JVM Overhead(运行时开销)上图解释: JVM进程总内存为2G;JVM运行时开销(JVM Overh…

Flink系统知识讲解之:Flink内存管理详解

Flink系统知识讲解之:Flink内存管理详解 在现阶段,大部分开源的大数据计算引擎都是用Java或者是基于JVM的编程语言实现的,如Apache Hadoop、Apache Spark、Apache Drill、Apache Flink等。Java语言的好处是不用考虑底层,降低了程…

VM(虚拟机)和Linux的安装

文章目录 1.虚拟机1.1 VM的安装和删除1.1.1 安装前提1.1.2 安装步骤 1.2 虚拟机快照1.3 虚拟机的克隆 2.Linux的安装2.1 CentOS2.2 Ubuntu 1.虚拟机 (1)Linux系统的安装方式 ①物理机安装:直接将操作系统安装到服务器硬件上 ②虚拟机安装&am…

Unity中实现倒计时结束后干一些事情

问题描述:如果我们想实现在一个倒计时结束后可以执行某个方法,比如挑战成功或者挑战失败,或者其他什么的比如生成boss之类的功能,而且你又不想每次都把代码复制一遍,那么就可以用下面这种方法。 结构 实现步骤 创建一…

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中,Rewrite Actions 用于对负载均衡响应进行修改,包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成,帮助你根据需求调整请求内容。以下是三种常见的操作: 1. Replace (替换响应头)…

新垂直电商的社交传播策略与AI智能名片2+1链动模式S2B2C商城小程序的应用探索

摘要:随着互联网技术的不断进步和电商行业的快速发展,传统电商模式已难以满足消费者日益增长的个性化和多元化需求。新垂直电商在此背景下应运而生,通过精准定位、用户细分以及深度社交传播策略,实现了用户群体的快速裂变与高效营…

TP4056锂电池充放电芯片教程文章详解·内置驱动电路资源!!!

目录 TP4056工作原理 TP4056引脚详解 TP4056驱动电路图 锂电池充放电板子绘制 编写不易,仅供学习,感谢理解。 TP4056工作原理 TP4056是专门为单节锂电池或锂聚合物电池设计的线性充电器,充电电流可以用外部电阻设定,最大充电…

burpsiute的基础使用(2)

爆破模块(intruder): csrf请求伪造访问(模拟攻击): 方法一: 通过burp将修改,删除等行为的数据包压缩成一个可访问链接,通过本地浏览器访问(该浏览器用户处于登陆状态&a…

基于32QAM的载波同步和定时同步性能仿真,包括Costas环的gardner环

目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…

使用PWM生成模式驱动BLDC三相无刷直流电机

引言 在 TI 的无刷直流 (BLDC) DRV8x 产品系列使用的栅极驱动器应用中,通常使用一些控制模式来切换MOSFET 开关的输出栅极。这些控制模式包括:1x、3x、6x 和独立脉宽调制 (PWM) 模式。   不过,DRV8x 产品系列(例如 DRV8311&…

校园跑腿小程序---轮播图,导航栏开发

hello hello~ ,这里是 code袁~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 🦁作者简介:一名喜欢分享和记录学习的在校大学生…

SpringBoot入门实现简单增删改查

本例子的依赖 要实现的内容 通过get、post、put和delete接口,对数据库中的trade.categories表进行增删改查操作。 目录结构 com.test/ │ ├── controller/ │ ├── CateController.java │ ├── pojo/ │ ├── dto/ │ │ └── CategoryDto.java │ ├─…

doc、pdf转markdown

国外的一个网站可以: Convert A File Word, PDF, JPG Online 这个网站免费的,算是非常厚道了,但是大文件上传多了之后会扛不住 国内的一个网站也不错: TextIn-AI智能文档处理-图像处理技术-大模型加速器-在线免费体验 https://…

信号与系统初识---信号的分类

文章目录 0.引言1.介绍2.信号的分类3.关于周期大小的求解4.实信号和复信号5.奇信号和偶信号6.能量信号和功率信号 0.引言 学习这个自动控制原理一段时间了,但是只写了一篇博客,其实主要是因为最近在打这个华数杯,其次是因为在补这个数学知识…

Facebook 在新兴市场的发展策略:机遇与挑战并存

随着全球互联网的普及,新兴市场成为了全球科技公司关注的重点。这些地区的互联网用户数量快速增长,对于 Facebook(现 Meta)来说,这些市场不仅蕴藏着巨大的用户潜力,也带来了不少挑战。Facebook 在新兴市场的…

2006-2020年各省单位人口医疗卫生机构床位数数据

2006-2020年各省单位人口医疗卫生机构床位数数据2006-2020年各省单位人口医疗卫生机构床位数数据 1、时间:2006-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、单位人口医疗卫生机构床位数 4、范围&#x…

【Hive】新增字段(column)后,旧分区无法更新数据问题

TOC 【一】问题描述 Hive修改数据表结构的需求,比如:增加一个新字段。 如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt20190101),则该旧分区中的col1将为…

vue3+elementPlus之后台管理系统(从0到1)(day1)

vue3官方文档:https://cn.vuejs.org/guide/introduction.html 1、项目创建 确保电脑已安装node 查看命令: node -v进入项目目录,创建项目 npm init vuelatest Need to install the following packages: create-vue3.13.0 Ok to procee…

添加计算机到AD域中

添加计算机到AD域中 一、确定计算机的DNS指向域中的DNS二、打开系统设置三、加域成功后 一、确定计算机的DNS指向域中的DNS 二、打开系统设置 输入域管理员的账密 三、加域成功后 这里有显示,就成功了。

hot100_240. 搜索二维矩阵 II

hot100_240. 搜索二维矩阵 II 直接遍历列减行增 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性: 每行的元素从左到右升序排列。 每列的元素从上到下升序排列。 示例 1: 输入:matrix [[1,4,7,1…