当前位置:首页 > 数据库 > 正文内容

Docker 中 PostgreSql 主从热备,主从切换计划

邻居的猫1个月前 (12-09)数据库913

环境阐明

  1. Docker
  2. Windows 11
  3. PostgreSql 17

树立进程

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. 宿主机找到挂载文件夹:C:\Users\Administrator\docker\Postgresql\replication\pgsmaster 下的 postgresql.conf 文件,修正装备:

    1. listen_addresses ='*'
    2. wal_level = replica
    
  2. 找到 pg_hba.conf 文件,最终一行增加装备:

	host    replication     replicator  172.17.0.0/16       md5
  1. 重启容器:docker restart 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. 进入容器,进行主库仿制:
	# 1. 进入容器
	docker exec -it pgsslave bash
	
	# 2. 切换postgres用户
	su postgres
	
	# 3. 清空data文件夹
	rm -rf /var/lib/postgresql/data/*
	
	# 4. 履行仿制, 需求输入暗码即主数据库创立仿制用户replicator的暗码‘123456’
	pg_basebackup -h 172.17.0.6 -U replicator -R -P -v -C --slot=pgsslave -D /var/lib/postgresql/data

[!NOTE] 指令阐明:
-R 阐明会创立standby.signal文件,以及弥补postgresql.auto.conf的内容
-P 显现备份进展
-v 显现愈加详细信息
-C 一起创立仿制槽
-slot 指定仿制槽的姓名(一个备库一个姓名)
-D 生成备库的途径

[!NOTE] 仿制槽的优点:
主库的业务日志一向处于翻滚耗费的状况,假如备库下线,跟着主库频频的数据变化,或许就会存在当备库从头上线后,现已找不到之前没有拉取的业务日志的状况(被主库收回掉了)。
可是有了仿制槽,主库就会为仿制槽保存它没有消费的日志,等候它上线后进行消费。当然价值是对磁盘的耗费,不过只需备库不是永久丢掉,磁盘耗费关于大部分场景来说不是问题。
可是假如备库永久丢掉了,要记住删去主库中对应的仿制槽。删去仿制槽的句子为 :select pg_drop_replication_slot('pgsslave');

  1. 重启容器
	docker restart pgsslave
  1. 承认是否成功, 主库履行下列查询即可
	select * from pg_replication_slots;\\查询主库中的插槽 
	select * from pg_stat_replication;\\查询已树立衔接的备份库

主从切换

1. 从库切换成主库

运用以下句子将从库切换成主库

select pg_promote();

此刻,从库data中的standby.signal文件已删去;并修正pg_hba.conf 文件,ip改为原主库ip

host    replication     replicator  172.17.0.0/16       md5
2. 删去原主库仿制槽
select pg_drop_replication_slot('pgsslave2');
3. 将原从库的data备份到原主库

这一步是全量备份,所以要注意假如库很大,会很费时间,尽管官方文档说不会影响其他客户端,可是肯定会耗费主库的cpu,内存,磁盘I/O以及带宽;

pg_basebackup -h 172.17.0.7 -U replicator -R -P -v -C --slot=pgsslave -D /var/lib/postgresql/data

此刻,主库就会变成从库,从库中也能查询到对应的备份衔接

测验

1. 监控推迟

PostgreSQL 供给了一些体系视图和函数来检查仿制推迟:

  • pg_stat_replication:该视图显现主数据库的流仿制状况,包含从数据库的仿制推迟。能够运用以下查询来检查当时的推迟:
	SELECT 
    application_name,
    client_addr,
    pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replication_lag
    FROM pg_stat_replication;
    
    -- 其间,replication_lag 表明主数据库当时生成的 WAL 日志比从数据库已使用的日志多出多少个字节。则表明是推迟巨细。
2. 主库宕机
  • 从库中止承受WAL日志,等候主库康复。
  • 从库查询服务不受影响,能够持续承受只读查询。
  • 主库手动康复后,从库会开端从主库接纳 WAL 日志并康复同步,康复进程是主动的。
3. 从库宕机
  • 从库中止承受WAL日志且无法供给查询服务。
  • 主库读写正常,不受影响。
  • 从库手动康复后,从库主动消费积压的WAL日志并与主库同步。

扫描二维码推送至手机访问。

版权声明:本文由51Blog发布,如需转载请注明出处。

本文链接:https://www.51blog.vip/?id=546

标签: PostgreSQL
分享给朋友:

“Docker 中 PostgreSql 主从热备,主从切换计划” 的相关文章

数据库规划准则与办法

数据库规划准则与办法

title: 数据库规划准则与办法 date: 2024/12/8 updated: 2024/12/8 author: cmdragon excerpt: 数据库规划是保证数据库高效、牢靠运转的关键步骤。杰出的数据库规划不仅能进步数据的存取速度,还能保护数据的完好性和共同性。在本节中,咱们将讨...

ORA-01843: 无效的月份

ORA-01843: 无效的月份

上个文章介绍了动态LINQ库。 然后动态造了一个查询,示例如下: //ctx是EF的DbContext,字段Value是字符串类型 await ctx.Tables.Where("As(Value,\"DateTime?\")>@0",datetime).ToListAsync(); 上面的...

校园大数据平台,构建智慧教育新生态

校园大数据平台,构建智慧教育新生态

校园大数据平台是一个综合性的信息服务平台,旨在通过大数据技术提升学校的管理效率和教育质量。以下是关于校园大数据平台的一些主要功能和应用: 主要功能1. 平台管理:提供平台运行状态监控、数据标准管理、数据质量管理等功能。2. 数据治理:包括数据采集、存储、清洗、整合等过程,确保数据的准确性和安全性。3...

mysql替换,MySQL 替换函数简介

mysql替换,MySQL 替换函数简介

MySQL替换操作通常是指在一个字符串中替换指定的子字符串。在MySQL中,可以使用`REPLACE`函数来实现这个功能。`REPLACE`函数的语法如下:```sqlREPLACE``` `str`:要替换的原始字符串。 `search_str`:要被替换的子字符串。 `replace_str`:...

mysql导入excel数据, 准备工作

mysql导入excel数据, 准备工作

要将Excel数据导入MySQL数据库,您需要执行以下步骤:1. 准备Excel数据:确保Excel文件格式正确,并且包含您希望导入到MySQL数据库中的数据。2. 创建MySQL数据库和表:在MySQL中创建一个数据库,并创建一个或多个表,这些表的结构应该与Excel文件中的数据结构相匹配。3....

大数据分析挖掘系统, Spark SQL大数据分析快速上手

大数据分析挖掘系统, Spark SQL大数据分析快速上手

大数据分析挖掘系统是一种用于处理、分析和提取大数据中的有价值信息的软件工具。它可以帮助用户从大量的数据中识别出有意义的模式和趋势,以便做出更明智的决策。这种系统通常包括数据采集、数据存储、数据处理、数据分析和数据可视化等功能模块。在大数据分析挖掘系统中,数据采集模块负责从各种来源收集数据,包括传感器...