环境说明

  1. Docker
  2. Windows 11
  3. PostgreSql 16

方案步骤

0. 宿主机准备:

  1. 找个地方创建一个文件夹用来挂载容器中数据库Data文件夹,这里我用的是:

    C:\Users\Administrator\docker\Postgresql\replication

1. 主数据库准备:

  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. 添加复制角色用户:
# 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
  1. 关闭容器:Docker stop pgsmaster

  2. 宿主机找到挂载文件夹:C:\Users\Administrator\docker\Postgresql\replication\pgsmaster 下的 postgresql.conf 文件,修改配置:

    1. listen_addresses ='*'
    2. wal_log_hints = on
    3. wal_level = replica
  3. 找到 pg_hba.conf 文件,最后一行添加配置:

	host    replication     replicator  172.17.0.0/16       md5
  1. 启动容器:Docker start pgsmaster

到这里主数据库就准备好了~

2. 从数据库准备:

  1. 同样执行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
  1. 到宿主机挂在文件夹C:\Users\Administrator\docker\Postgresql\replication\pgsslave下创建一个tempdata文件夹

  2. 进入容器,进行主库复制:

	# 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
  1. 关闭从数据库容器:

    docker stop pgsslave

  2. 进入宿主机挂在文件夹下的tempdata文件夹下,将所文件夹下的所有文件覆盖到上级文件夹,并进入上级文件夹,我这里是:C:\Users\Administrator\docker\Postgresql\replication\pgsslave

  3. 修改 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 # 如果有错误的数据复制,是否向主进行反馈
  1. 添加 standby.signal 文件:
	standby_mode = 'on'
  1. 启动从数据库:

    docker start pgsslave

到这里从数据库也配置好了~

3. 验证:

  1. 进入主数据库容器:

    docker exec -it pgsmaster bash

  2. 执行命令:

	psql -U postgres -x -c "select * from pg_stat_replication;"
  1. 出现如下信息则表示配置成功~
	-[ 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 主从热备,异步流复制方案的更多相关文章

  1. postgresql数据库异步流复制hot standby环境搭建

    生命不息,test不止. 最近组里面修改了几个postgresql的bug,要进行回归测试,除了前面提到的WAL的RT测试和Mirroring Controller的RT测试,还要测试下postgre ...

  2. 【Nginx】(主从热备)LVS+Keepalived+Nginx实现高性能负载均衡集群

    一.LVS 1.1 概述 1.2 Nginx与LVS区别什么 二.Keepalived 2.1 概述 2.2 keepalived和其工作原理 三.LVS+Keepalived+Nginx 搭建双机主 ...

  3. 《nginx 四》双机主从热备

    lvs+keepalived+nginx实现高性能负载均衡集群 LVS作用 LVS是一个开源的软件,可以实现传输层四层负载均衡.LVS是Linux Virtual Server的缩写,意思是Linux ...

  4. Mysql5.6主从热备配置

    数据库是应用系统的核心,为了保证数据库的安全采用主从热备是很常见的方法,也就是主数据库DDL.DML都将被同步到从数据库. 一.      实验环境 操作系统:windowsserver 2008 R ...

  5. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  6. Lvs+keepalived+mysql主从热备

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; text-align: justify; f ...

  7. 主从热备+负载均衡(LVS + keepalived)

    前言 淘宝架构师李智慧大牛的书籍<大型网站技术架构>以及旭龙兄的博客  --->[大型网站技术实践]初级篇:借助LVS+Keepalived实现负载均衡. 从上参考而得来本文,本文旨 ...

  8. nginx+keepalived简单双机主从热备

    双机主从热备概述 可以两台机子互为热备,平时各自负责各自的服务.在做上线更新的时候,关闭一台服务器的tomcat后,nginx自动把流量切换到另外一台服务的后备机子上,从而实现无痛更新,保持服务的持续 ...

  9. Postgressql高可用(pgpool+异步流复制)

    文档结构: 由于博主之前是Oracle dba,oracle 高可用一般是rac,以及搭建ADG,一个是基于实例的高可用,一个是基于数据的容灾,甚至也有rac+adg的方式.Postgres有同步和异 ...

  10. 采用pacemaker+corosync实现postgresql双机热备、高可用方案

    环境说明 参照上章已完成postgresql流复制配置,并关闭postgres服务. su - postgres pg_ctl -D /data/postgresql/data/ stop -m fa ...

随机推荐

  1. JavaScript – Generator Function

    参考 阮一峰 – Generator 函数的语法 介绍 Generator Function 是一种特别的函数, 它让函数有一种分阶段执行的能力. 一般的函数, 你调用它, 它执行所有函数内的代码, ...

  2. Azure – WAF (Web Application Firewall)

    前言 最近有客户想购买 Azure 的 Web Application Firewall (WAF), 来防 SQL Injection, XSS 攻击. 一开始我是觉得没什么必要, 毕竟什么年代了, ...

  3. 这些年没来得及学习的一些 HTML5 标签

    认识并学习下还没来得及学习的一些 HTML5 标签 <ruby> 标签 HTML <ruby> 元素被用来展示东亚文字注音或字符注释. 比如: <ruby>兄弟&l ...

  4. bfs与dfs ,全球变暖——蓝桥problems178

    问题描述: ....... .##.... .##.... ....##. ..####. ...###. ....... 有一张还以N*N的像素照片,"."表示海洋," ...

  5. [OI] 莫比乌斯函数与莫比乌斯反演

    9. 莫比乌斯函数与莫比乌斯反演 9.1 莫比乌斯函数 9.1.1 定义 设 \(\mu\) 为莫比乌斯函数,则有: \[\mu(x)=\begin{cases}1\qquad (n=1)\\ 0\q ...

  6. [namespace hdk] Balanced_tree 整合

    代码 #include<bits/stdc++.h> using namespace std; namespace hdk{ namespace balanced_tree{ const ...

  7. WebGL学习笔记

    完整 demo 和 lib 文件可以在 https://github.com/tengge1/webgl-guide-code 中找到. 第 2 章 WebGL 入门 第一个 WebGL 程序 fun ...

  8. TX御加固脱壳

    示例APP某小说 其实脱这个有好几个方法,我使用了两个方法都可以脱掉. 首先使用Y佬的APK测试: 上传文件后经过等待提示任务成功,把给的ZIP包下载下来. 解压后得到两个文件,txt文件是脱壳后的a ...

  9. for循环、break和continue、二重循环

    循环语句 循环语句可以反复多次执行同一组语句,for关键字可以用来编写循环:可以在for循环里让一个变量依次代表一组数字,然后使用同一组语句处理这个变量代表的每个数字.这个变量叫做循环变量,按照统一的 ...

  10. 云原生周刊:Kubernetes 1.30 的一切新功能 | 2024.4.1

    开源项目推荐 Kubernetes scheduler simulator 该项目是一个用于模拟 Kubernetes 调度器行为的开源项目,可用于测试和评估调度器的性能和行为.它提供了一个模拟集群和 ...