Windows10--postgres数据库12版本以上 之 故障转换(手动切换篇)

环境

Windows10

postgres数据库12版本以上

########################

续上,主从复制成功

Windows环境 
主库:192.168.10.101
从库:192.168.10.102

数据库主服务器 开机登录用户:Administrator
数据库从服务器 开机登录用户密码:kaijimima

数据库默认用户:postgres
数据库默认用户密码:postgrespassword
  
数据库流复制用户:replica
数据库流复制用户密码:replication

说明
pg12版本流复制搭建主要方式和之前没有太大区别,改变的地方在于pg12将recovery.conf文件合并到了postgresql.conf中,相关的配置需改进。
 

流程:故障主库必须变回主库。(因为现场服务器IP不轻易变动。设备产生的数据默认上传到主库。设备几百台,所以不轻易变动数据库服务器IP)

模拟故障主库  --> 备库变临时主库 -----> 故障主库变临时备库(并复制临时主库的完整数据) -->  临时主库重新变会备库 -->故障主库查看本库是否成为主库,查看从库IP,测试数据插入备库是否复制

注意:故障主库修复的时间段,产生大量数据到临时主库。

 

##############################################################
扩展语句
1、cmd命令行登录数据库
D:\xxx\PostgreSQL\12\bin>psql  -U postgres
用户postgres口令:888
1、#在当前主库,查看从库IP
select client_addr,sync_state from pg_stat_replication;
2、#创建表
create table test();
3、#cmd命令行 。查看当前所有的表
postgres>\dt
3、#查看所有的表(包含系统表)
select tablename from pg_tables;
4、#
CREATE TABLE test1 (
  id SERIAL PRIMARY KEY,
  name VARCHAR(255),
  age INTEGER,
  time TIMESTAMP,
  con VARCHAR(255)
);
INSERT INTO test1 (id,name,age,time,con) VALUES ('1','张1','14','20230101','table1');
5、查看当前数据库是否为主库,显示f 证明是主库
SELECT pg_is_in_recovery();
#激活备库
select pg_promote(true,60);
6、启动pg服务
cmd命令行下启动:
F:\pg\PostgreSQL\12\bin>pg_ctl  start  "D:\xxx\PostgreSQL\12\data"
F:\pg\PostgreSQL\12\bin>pg_ctl  stop  "D:\xxx\PostgreSQL\12\data"
F:\pg\PostgreSQL\12\bin>pg_ctl  restart  "D:\xxx\PostgreSQL\12\data"
windows下启动:pg服务
打开"服务" 下滑找到对应服务名称,右击 启动 即可

########################################

 

#############切换举例################

一、主库操作:关闭主库,模拟主库故障:
1、停止PG数据库 (服务>右击postgres12,点击停止)


二、故障切换
注意:备库不能长期作为 临时主库。因为有的厂商把该主从服务器IP写死
解说:
壹、主库故障后。激活备库 为 临时主库。此时,只需等待故障主库修复。
贰、故障主库修复后,再将故障主库降为备库 用来复制 临时主库的完整数据,
叁、复制 数据后,就将故障主库 重新升级为 新主库

###############
壹、主库故障后。激活备库 成为 临时主库。此时,只需等待故障主库修复。


1、#登录从库pg数据库
D:\xxx\PostgreSQL\12\bin>psql.exe -U postgres
用户 postgres 的口令:
psql (12.16)
##激活备库: pg_promote字段显示为t 状态 ,证明激活备库成功
postgres=# select pg_promote(true,60);
 pg_promote
------------
 t
(1 行记录)

##############
贰、故障主库修复后,再将故障主库降为备库 用来复制 临时主库的完整数据,

########原主库修复后降为备库(其实大部分操作与建立备库时一样,只是修改几个IP地址)

1、新主库(124):
1)# 打开/data/pg_hba.conf
host replication replica 192.168.100.119/16 md5
2)# 重启PG数据库


2、新备库(119)
1)故障主库修复后
2)# 停止PG数据库
3)# 备份data文件夹下的所有内容,并清空data文件夹下的所有内容(快捷方法:移动data目录下内容到“data备份”目录)
4)执行以下 pg_basebackup热备份 命令。  成功后,会在data目录下 产生 standby.signal文件
D:\xxx\PostgreSQL\12\bin>pg_basebackup -h 192.168.10.124  -p 5432 -U replica  -Fp -Xs -Pv -R -D "D:\xxx\PostgreSQL\12\data"
口令:123
pg_basebackup: 开始基础备份,等待检查点完成
pg_basebackup: 已完成检查点
pg_basebackup: 预写日志起始于时间点: 0/4000028, 基于时间轴2
pg_basebackup: 启动后台 WAL 接收进程
pg_basebackup: 已创建临时复制槽"pg_basebackup_2096"
24823/24823 kB (100%), 1/1 表空间
pg_basebackup: 预写日志结束点: 0/4000100
pg_basebackup: 等待后台进程结束流操作...
pg_basebackup: 同步数据到磁盘...
pg_basebackup: 基础备份已完成

解说:PgSQL流复制切换,通过函数pg_promote和standby.signal来实现
注意:现在的pg_basebackup热备份 命令只备份了一个名称为postgres的数据库

5)添加并启动备份模式:# 打开PostgreSQL\12\data\standby.signal  (注意:可手动创建该文件,但是物理备份命令必须成功)
# 添加如下内容:
standby_mode = 'on'

6)在当前从库 填写 连接到主库的信息:路径:/data/postgresql.conf
格式:primary_conninfo = 'host=主库IP port=端口 user=流复制用户账号 password=流复制用户密码'
primary_conninfo = 'host=192.168.100.104 port=5432 user=replica password=123456'

7)重启pg数据库


#测试:临时主库是否有读写权限;临时备库是否有复制临时主库数据
1、新主库(102)
1)新建表test2,验证新从库 是否 有该表test2
2)cmd命令行方式:
D:\xxx\PostgreSQL\12\bin>psql.exe -U postgres
postgres=# create table test2(id int,name varchar(10));

2、验证新从库(101) 是否 有该表test2
1)navicat连接数据库 ,执行以下命令语句
select tablename from pg_tables;
2)cmd命令行方式:
D:\xxx\PostgreSQL\12\bin>psql.exe -U postgres
用户 postgres 的口令:
postgres=# \dt
                关联列表
 架构模式 |  名称   |  类型  |  拥有者
----------+---------+--------+----------
 public   | test2   | 数据表 | postgres
postgres=# select tablename from pg_tables; les;
        tablename
-------------------------
 test2

至此, 首次 主库 从库 故障切换 完成

#########叁、临时从库复制 临时主库的完整数据后,就将临时从库 重新升级为 新主库######################

四、再次将老主库切回主库


1、故障主库:(101)

> 停止pg服务

> 删除“/PostgreSQL/12/data/standby.signal”文件

> 启动pg服务 

2、临时主库:(102)

> 停止pg服务

> 以“postgres”用户创建“/PostgreSQL/12/data/standby.signal”文件,
添加内容:standby_mode = 'on'
>再次将老主库切回主库
格式:pg_basebackup -h 新主库IP  -p 端口 -U 流复制用户账号 -Fp -Xs -Pv -R -D "D:\xxx\PostgreSQL\12\data"

D:\xxx\PostgreSQL\12\bin>pg_basebackup -h 192.168.10.101  -p 5432 -U replica -Fp -Xs -Pv -R -D "D:\xxx\PostgreSQL\12\data"
口令:123
pg_basebackup: 开始基础备份,等待检查点完成
... ... .. ..
pg_basebackup: 同步数据到磁盘...
pg_basebackup: 基础备份已完成

> 启动pg服务

验证后,
1、#在当前主库,查看从库IP
D:\xxx\PostgreSQL\12\bin>psql -U postgres
postgres# select client_addr,sync_state from pg_stat_replication;
2、查看当前数据库是否为主库,显示f 证明是主库,t证明是从库
postgres# SELECT pg_is_in_recovery();


至此 ,故障切换 完毕

#测试:临时主库是否有读写权限;临时备库是否有复制临时主库数据
1、新主库(101)
1)新建表test1,验证新从库 是否 有该表test1
2)cmd命令行方式:
D:\xxx\PostgreSQL\12\bin>psql.exe -U postgres
postgres=# create table test1(id int,name varchar(10));

2、验证新从库(102) 是否 有该表test1
1)navicat连接数据库 ,执行以下命令语句
select tablename from pg_tables;
2)cmd命令行方式:
D:\xxx\PostgreSQL\12\bin>psql.exe -U postgres
用户 postgres 的口令:
postgres=# \dt
                关联列表
 架构模式 |  名称   |  类型  |  拥有者
----------+---------+--------+----------
 public   | test1   | 数据表 | postgres
postgres=# select tablename from pg_tables; les;
        tablename
-------------------------
 test1

自此故障主库 升级为 新主库完毕!!!

 

##############################################################################
注意:多次主从切换后。主从服务器的pg_hba.conf文件信息都是允许从库IP访问的

一、主库和从库的pg_hba.conf 文件 以下模块  :
主库(101):PostgreSQL\12\data\pg_hba.conf
# IPv4 local connections:
host    all        replica         192.168.10.102/16    md5
host    all      postgres    192.168.10.102/16    md5
.. . .. .
# Allow replication connections from localhost, by a user with the
# replication privilege.

host    replication      replica     192.168.10.102/16     md5
host    all          postgres     192.168.10.102/16     md5

从库(102):PostgreSQL\12\data\pg_hba.conf
# IPv4 local connections:
host    all        replica         192.168.10.102/16    md5
host    all      postgres    192.168.10.102/16    md5
.. . .. .
# Allow replication connections from localhost, by a user with the
#允许所有IP连接  host    all          all         0.0.0.0/0         md5
host    replication      replica     192.168.10.102/16     md5
host    all          postgres     192.168.10.102/16     md5

如果导致 出现 主库数据库 不能访问 
就允许从库连接主库
解决方法:在主库12\data\pg_hba.conf 添加对方IP信息  即可

#################################
注意:多次主从切换后。主从服务器的postgresql.conf文件信息都是认主库IP为主的。如下所示

primary_conninfo = 'host=192.168.10.101 port=5432 user=replica password=123'
修改postgresql.conf文件
# 新增或修改下列属性设置
# 监听所有IP
listen_addresses = '*'  
# 开启归档
archive_mode = on 
# 9.6版本开始  就没有hot_standby(热备模式)
wal_level = replica
#最多有2个流复制连接
max_wal_senders = 2   
wal_keep_segments = 16  
#流复制超时时间
wal_sender_timeout = 60s
# 最大连接数,据说从机需要大于或等于该值
max_connections = 100 
#说明恢复到最新状态
recovery_target_timeline = latest 
#大于主节点,正式环境应当重新考虑此值的大小
max_connections = 120 
#说明这台机器不仅用于数据归档,还可以用于数据查询
hot_standby = on
#流备份的最大延迟时间
max_standby_streaming_delay = 30s 
#向主机汇报本机状态的间隔时间
wal_receiver_status_interval = 10s 
#r出现错误复制,向主机反馈
hot_standby_feedback = on
#####################################################

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值