PostgreSql Docker 主从热备,异步流复制方案
环境说明
- Docker
- Windows 11
- PostgreSql 16
方案步骤
0. 宿主机准备:
- 找个地方创建一个文件夹用来挂载容器中数据库Data文件夹,这里我用的是:
C:\Users\Administrator\docker\Postgresql\replication
1. 主数据库准备:
- 执行docker run 命令,创建主数据库容器:pgsmaster
docker run --name pgsmaster -p 5400:5432 -e POSTGRES_PASSWORD=123456 -v C:\Users\Administrator\docker\Postgresql\replication\pgsmaster:/var/lib/postgresql/data -d postgres
- 添加复制角色用户:
# 1.进入容器
docker exec -it pgsmaster bash
# 2.连接PostgreSQL
psql -U postgres
# 3.创建用户
// replicator: 复制账号; 123456: 认证密码
create role replicator login replication encrypted password '123456';
# 4.验证用户
\du
# 出现如下列表则用户创建成功
List of roles
Role name | Attributes
-----------+-------------------------------------------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS
replicator | Replication
关闭容器:
Docker stop pgsmaster宿主机找到挂载文件夹:
C:\Users\Administrator\docker\Postgresql\replication\pgsmaster下的postgresql.conf文件,修改配置:1. listen_addresses ='*'
2. wal_log_hints = on
3. wal_level = replica
找到
pg_hba.conf文件,最后一行添加配置:
host replication replicator 172.17.0.0/16 md5
- 启动容器:
Docker start pgsmaster
到这里主数据库就准备好了~
2. 从数据库准备:
- 同样执行docker run 命令,创建一个从数据库容器:
docker run --name pgsslave -p 5401:5432 -e POSTGRES_PASSWORD=123456 -v C:\Users\Administrator\docker\Postgresql\replication\pgsslave:/var/lib/postgresql/data -d postgres
到宿主机挂在文件夹
C:\Users\Administrator\docker\Postgresql\replication\pgsslave下创建一个tempdata文件夹进入容器,进行主库复制:
# 1. 进入容器
docker exec -it pgsslave bash
# 2. 切换postgres用户
su postgres
# 3. 执行复制, 注意IP, 需要输入密码即主数据库创建复制用户replicator的密码‘123456’
pg_basebackup -h 172.17.0.6 -U replicator -D /var/lib/postgresql/data/tempdata -X stream -P
关闭从数据库容器:
docker stop pgsslave进入宿主机挂在文件夹下的
tempdata文件夹下,将所文件夹下的所有文件覆盖到上级文件夹,并进入上级文件夹,我这里是:C:\Users\Administrator\docker\Postgresql\replication\pgsslave;修改
postgresql.conf文件参数:
1. primary_conninfo = 'host=172.17.0.6 port=5432 user=replicator password=123456' # 配置连接主数据库,注意IP和端口号
2. hot_standby = on # 说明这台机器不仅仅是用于数据归档,也用于数据查询
3. max_standby_streaming_delay = 30s # 数据流备份的最大延迟时间
4. wal_receiver_status_interval = 10s # 多久向主报告一次从的状态
5. hot_standby_feedback = on # 如果有错误的数据复制,是否向主进行反馈
- 添加
standby.signal文件:
standby_mode = 'on'
- 启动从数据库:
docker start pgsslave
到这里从数据库也配置好了~
3. 验证:
进入主数据库容器:
docker exec -it pgsmaster bash执行命令:
psql -U postgres -x -c "select * from pg_stat_replication;"
- 出现如下信息则表示配置成功~
-[ RECORD 1 ]----+------------------------------
pid | 65
usesysid | 16388
usename | replicator
application_name | walreceiver
client_addr | 172.17.0.7
client_hostname |
client_port | 56664
backend_start | 2024-11-28 05:44:17.805887+00
backend_xmin | 743
state | streaming
sent_lsn | 0/5000148
write_lsn | 0/5000148
flush_lsn | 0/5000148
replay_lsn | 0/5000148
write_lag |
flush_lag |
replay_lag |
sync_priority | 0
sync_state | async
reply_time | 2024-11-28 05:45:57.855411+00
到这里,配置完毕~
PostgreSql Docker 主从热备,异步流复制方案的更多相关文章
- postgresql数据库异步流复制hot standby环境搭建
生命不息,test不止. 最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgre ...
- 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群
一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...
- 《nginx 四》双机主从热备
lvs+keepalived+nginx实现高性能负载均衡集群 LVS作用 LVS是一个开源的软件,可以实现传输层四层负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux ...
- Mysql5.6主从热备配置
数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一. 实验环境 操作系统:windowsserver 2008 R ...
- LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...
- Lvs+keepalived+mysql主从热备
p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...
- 主从热备+负载均衡(LVS + keepalived)
前言 淘宝架构师李智慧大牛的书籍<大型网站技术架构>以及旭龙兄的博客 --->[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡. 从上参考而得来本文,本文旨 ...
- nginx+keepalived简单双机主从热备
双机主从热备概述 可以两台机子互为热备,平时各自负责各自的服务.在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续 ...
- Postgressql高可用(pgpool+异步流复制)
文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...
- 采用pacemaker+corosync实现postgresql双机热备、高可用方案
环境说明 参照上章已完成postgresql流复制配置,并关闭postgres服务. su - postgres pg_ctl -D /data/postgresql/data/ stop -m fa ...
随机推荐
- JavaScript – Generator Function
参考 阮一峰 – Generator 函数的语法 介绍 Generator Function 是一种特别的函数, 它让函数有一种分阶段执行的能力. 一般的函数, 你调用它, 它执行所有函数内的代码, ...
- Azure – WAF (Web Application Firewall)
前言 最近有客户想购买 Azure 的 Web Application Firewall (WAF), 来防 SQL Injection, XSS 攻击. 一开始我是觉得没什么必要, 毕竟什么年代了, ...
- 这些年没来得及学习的一些 HTML5 标签
认识并学习下还没来得及学习的一些 HTML5 标签 <ruby> 标签 HTML <ruby> 元素被用来展示东亚文字注音或字符注释. 比如: <ruby>兄弟&l ...
- bfs与dfs ,全球变暖——蓝桥problems178
问题描述: ....... .##.... .##.... ....##. ..####. ...###. ....... 有一张还以N*N的像素照片,"."表示海洋," ...
- [OI] 莫比乌斯函数与莫比乌斯反演
9. 莫比乌斯函数与莫比乌斯反演 9.1 莫比乌斯函数 9.1.1 定义 设 \(\mu\) 为莫比乌斯函数,则有: \[\mu(x)=\begin{cases}1\qquad (n=1)\\ 0\q ...
- [namespace hdk] Balanced_tree 整合
代码 #include<bits/stdc++.h> using namespace std; namespace hdk{ namespace balanced_tree{ const ...
- WebGL学习笔记
完整 demo 和 lib 文件可以在 https://github.com/tengge1/webgl-guide-code 中找到. 第 2 章 WebGL 入门 第一个 WebGL 程序 fun ...
- TX御加固脱壳
示例APP某小说 其实脱这个有好几个方法,我使用了两个方法都可以脱掉. 首先使用Y佬的APK测试: 上传文件后经过等待提示任务成功,把给的ZIP包下载下来. 解压后得到两个文件,txt文件是脱壳后的a ...
- for循环、break和continue、二重循环
循环语句 循环语句可以反复多次执行同一组语句,for关键字可以用来编写循环:可以在for循环里让一个变量依次代表一组数字,然后使用同一组语句处理这个变量代表的每个数字.这个变量叫做循环变量,按照统一的 ...
- 云原生周刊:Kubernetes 1.30 的一切新功能 | 2024.4.1
开源项目推荐 Kubernetes scheduler simulator 该项目是一个用于模拟 Kubernetes 调度器行为的开源项目,可用于测试和评估调度器的性能和行为.它提供了一个模拟集群和 ...