首页 > 数据库 >PostgreSql Docker 主从热备,异步流复制方案

PostgreSql Docker 主从热备,异步流复制方案

时间:2024-11-28 15:56:08浏览次数:7  
标签:热备 PostgreSql 数据库 replicator replication 文件夹 pgsmaster docker Docker

环境说明

  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,数据库,replicator,replication,文件夹,pgsmaster,docker,Docker
From: https://www.cnblogs.com/tony-god/p/18574418

相关文章

  • docker安装
    1982024-11-1917:33:24su-oracle1992024-11-1917:44:55history2002024-11-1917:45:47dockerps2012024-11-1918:23:18dockerps2022024-11-2811:06:01set+ohistory;2032024-11-2811:06:54dockerimages2042024-11-2811:19:02hist......
  • Docker常用命令
    什么是DockerDocker是一个开源平台,用于开发、交付和运行应用程序。它通过容器技术将应用程序及其依赖项打包在一个标准化的单元中,使得应用程序能够在不同的环境中一致地运行。容器是轻量级、可移植的,因此非常适合云计算、持续集成和微服务架构等场景。Docker的优势它提供......
  • 修改docker desktop镜像下载目录
    选用dockerdesktop版本为4.31.1.0使用Hyper-v安装 点击Browse按钮选择镜像存放的位置,选择位置后会自动在所选的目标目录后拼上DockerDesktop路径,所以在选择完目录后需要手动在目标目录中创建DockerDesktop文件夹。如果没有手动创建DockerDesktop文件夹会有以下报错。所......
  • Docker安装ElasticSearch
    安装步骤:一、具备Docker环境二、创建docker虚拟网络三、拉取镜像四、五、通过docker-compose.yml安装启动容器version:'2.2'services:elasticsearch:image:elasticsearch:7.17.10container_name:es7environment:-node.name=es7-cluster.name=es-cluster-di......
  • AutoDL 离线下载Docker
    AutoDL离线下载Docker正常的docker安装方式需要访问docker官网但是docker官网需要VPN才可以上有些服务器上无法连接外网就无法访问到docker的官网→离线下载Docker出现报错:1.换源(换成清华源)注意比正常的多一步2.lsb_release-a查看系统型号NoLSB......
  • ansible配置docker
    目录[root@db1server]#tree.├──ans-docker│  ├──dockerfile│  └──hosts├──group_vars│  └──all├──hosts├──sys_basic│  ├──~│  ├──files│  │  ├──daemon.json│  │  └──hosts│......
  • Postgresql unnest案例
    在PostgreSQL中,可以使用unnest函数来展开数组,然后进行聚合操作。例如,如果你有一个数组字段,想要将数组展开为单独的行,并进行聚合统计,可以通过以下步骤来完成。场景描述:假设有一个orders表,其中每个订单包含一个product_ids数组,数组里存储了购买的商品的ID。你想要统计每......
  • Docker配置Kibana
    配置Docker中的KibanaDocker镜像提供了几种方法来配置Kibana。传统的方法是给出一个配置Kibana中描述的配置文件kibana.yml,也可以使用环境变量来定义设置项。绑定配置一种配置Docker中Kibana的方法是通过绑定配置文件kibana.yml。使用docker-compose工具,向下......
  • mysql postgresql with 案例
    场景假设假设我们有两张表:sales表:记录了每个产品的销售数量product_id(产品ID)quantity(销售数量)products表:记录了每个产品的详细信息product_id(产品ID)product_name(产品名称)我们的目标是计算每个产品销售数量占总销售量的百分比。 ROUND(expressio......
  • 云技术-docker
    声明!        学习视频来自B站up主**泷羽sec**有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关,切勿触碰法律底线,否则后果自负!!!!有兴趣的小伙伴可以点击下面连......