admin管理员组

文章数量:1666875

一、概述

PostgreSql 数据库主库意外宕机,手动切换主备数据库流程。

环境:PostgreSql v12 + Centos 7
主库:192.168.100.170
备库:192.168.100.171

二、示例

2.1 备库提升为主库

此时主库已意外宕机。(170)

--提升备库为主库(171)
pg_ctl promote -D $PGDATA

--检查数据库状态,为 in production,说明备库已提升为主库(171)
pg_controldata | grep cluster

此时应用可以连接备库地址进行业务办理。

2.2 原主库恢复

排查原主库宕机原因,进行恢复。(170)

2.3 原主库调整为备库

将恢复完成后的原主库调整为备库,有如下两种方式可选。

1)方式一:重新拉取主库数据进行同步

优势:不用提前修改数据库参数,步骤较简单。
劣势:只能全量重新同步,无法增量,数据库数据量大时不适用。

--停原主库(170)
pg_ctl stop

--备份原主库数据文件(170)
mv /data/pgdata /data/pgdata20220503

--拉取新主库数据(170)
pg_basebackup -h 192.168.100.171  -p 5432 -U postgres -D $PGDATA -Fp -P -Xs -R -v -l postgresbak

--启动数据库(170)
pg_ctl start
--新主库查询同步状态(171)
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

--进行简单的同步测试
新主库(171create database test;
新备库(170)
\l
可查询到主库创建的 test 数据库,说明主从同步正常。
新主库(171drop database test;

2)方式二:使用 pg_rewind 工具进行同步

优势:可以增量同步数据。
劣势:需要提前修改数据库参数,步骤多了几步。

使用前提:需要数据库 wal_log_hints(默认 off,未开启),full_page_writes(默认 on,开启),这两个参数开启。

--原主库检查参数开启状态,若未开启,进行开启(170)
show wal_log_hints;
show full_page_writes;

alter system set wal_log_hints = 'on';
pg_ctl restart

--停原主库,pg_rewind 拉取新主库增量数据(170)
pg_ctl stop
pg_rewind --target-pgdata /data/pgdata --source-server='host=192.168.100.171 port=5432 user=postgres dbname=postgres password=Syd@171345'

--原主库配置文件追加同步信息参数(170)
vi $PGDATA/postgresql.auto.conf

primary_conninfo = 'user=postgres password=Syd@171345 host=192.168.100.171 port=5432'
recovery_target_timeline = 'latest'

--原主库创建恢复标识文件(170)
此文件为 PG v12 版本后引入的,之前版本使用上一步骤中 postgresql.auto.conf 文件中追加 standby_mode = 'on' 实现

touch $PGDATA/standby.signal

--启动数据库(170)
pg_ctl start
--新主库查询同步状态(171)
select pid,state,client_addr,sync_priority,sync_state from pg_stat_replication;

--进行简单的同步测试
新主库(171create database test;
新备库(170)
\l
可查询到主库创建的 test 数据库,说明主从同步正常。
新主库(171drop database test;

本文标签: 主从postgresql