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 ...
随机推荐
- vue3 modifier
vue3 modifier 是什么? modifier 中文意思为修饰符. 在vue3中主要是体现在v-model上,vue3允许我们添加自定义修饰符. 比如说这样: <template> ...
- HTML – W3Schools 学习笔记
有用链接: HTML Attribute Reference (查看所有 Attributes) HTML Paragraphs Link to W3Schools <p> 里面 doub ...
- 学好QT框架之后可以做什么工作?QT技术框架现代化行业大型复杂应用的经典成功案例
简介 本文粗略的介绍了QT框架的软件开发技术生态体系的全球影响力:QT框架在文字办公领域.CAD三维图形领域.Linux操作系统领域.物联网领域.汽车电子领域以及数字医疗领域等现代化行业的大型复杂应用 ...
- namenode rpc 请求队列调优
当 datanode 上新写完一个块,默认会立即汇报给 namenode.在一个大规模 Hadoop 集群上,每时每刻都在写数据,datanode 上随时都会有写完数据块然后汇报给 namenode ...
- [TK] 盖房子 hzoi-tg#262
同机房大佬也写了这题的 题解. 通解分析 此类问题我通常喜欢归纳成一类,即阻碍联通的坐标DP. 既然是阻碍联通,那么此类问题的通用思路是这样的: 首先将dp数组图形化. 一般用一个特定图形上的特定点来 ...
- USB 同步字段中高速同步字段和低速全速同步字段的区别
USB(Universal Serial Bus)有几种不同的传输模式:低速(Low-Speed).全速(Full-Speed).高速(High-Speed)和超级速度(SuperSpeed).同步字 ...
- vue3读取所有的vue文件
- kotlin类和对象—>属性与字段
1.声明属性,Kotlin 类中的属性既可以用关键字 var 声明为可变的,也可以用关键字 val 声明为只读的 class Address { var name: String = "Ho ...
- 掀起云端革命!ToDesk云电脑与传统PC电脑的差异分析
在科技日新月异的今天,传统PC电脑的市场地位正悄然发生变化.随着云计算技术的不断成熟与普及,云电脑逐渐走进大众视野,不同于传统PC电脑的高昂的成本和易退化的硬件性能,云电脑正以其轻成本高性能的优势吸引 ...
- Go语言基础06 _function
Go语言基础06 _function 函数在Go语言中是一等公民 与其他主要编程语言的差别 可以有多个返回值 所有参数都是值传递:slice,map,channel 会有传引用的 错觉 函数可以作为变 ...