postgresql中故障切换,主从切换,从(备)库升主

引言

        在数据库开发过程中,部署了主从结构,由于开发的某一些问题,导致数据库宕机、故障。此时我们可以通过主从切换的方法,使得主库能继续运行。

        通常故障切换称为“Failover”。异步复制时,如果主库出现了问题,可以激活备库作为主库提供服务。在PostgreSQL9.1版本之前是在recovery.conf中配置一个trigger文件,当备库检测到该文件时,就自动把自己激活成主库,PostgreSQL9.1版本之后提供了命令“pg_ctl promote”来激活备库,所以现在很少有人再以配置trigger文件的方式激活备库了

主从配置

路径ipportuser with replication 
主库/home/postgres/pg/data10.0.0.20015432pgback
从库/home/postgres/pgback10.0.0.19915432

搭建流复制环境

同步流复制

异步流复制

trigger文件激活

 首先在备库参数配置中配置promote_trigger_file= '/home/postgres/pg_trigger'   路径可执行定义,选择具有权限的路劲便可。

trigger_file的方式激活需要在你initdb(初始化数据库的时候)增加--data-checksums参数,本文初始化数据库时候已经增加,若没有添加此参数进行初始化,需要在postgresql.conf配置文件中设置

wal_log_hints=on 。

或者使用pg_checksums 将没有打开checksum功能的数据库转换成具有checksum功能的数据库。

 此时对备库新增一个窗口进行后台监控

 postgres -D pgback/  -p 15432

promote_trigger_file= '/home/postgres/pg_trigger'  对上一步配置的路径文件进行编辑,增加内容。

standby_mode = 'on'
trigger_file = '/home/postgres/pg_trigger'
primary_conninfo = 'user=pgback host=10.0.0.200 port=15432 sslmode=disable sslcompression=1

 使用

touch pg_trigger   --在当前路径的情况下
touch /home/postgres/pg_trigger 
pg_ctl -D pgback restart --重启备库

对文件内容进行加载一遍

 此时可以看到原来从库现在变成了主库,是一个可读写的状态。但是原主库却没有成为从库,主从两个数据库都成了,两个单独的数据库。原主库搭建的其他从库也会脱离。此时还需要重新再搭建从库。所以这个只有在主库发生不可抗拒灾难时使用。

注:此时新主库的$PGDATA/standby.signal的标识文件就已经没有了

pg_rewind

此时可以使用pg_rewind  将原主库转换为备库,往往生产中我们的数据库体量都会比较大,重新再做备份,会耗时比较长。使用pg_rewind,便无需重新再做基础备份,他会将数据同步到和新主库一致的状态。

注:操作前需要将数据库服务停掉

 pg_rewind -D $PGDATA --source-server='host=10.0.0.199 user=postgres port=15432'

 

此时我们需要将就旧主库作为新从库,需要和新主库重新挂接上,在旧主库上创建standby.signal从库标识文件

 并在旧主库编辑主库的链接参数

编辑文件 postgresql.auto.conf  加入一下内容

primary_conninfo = 'user=pgback  host=10.0.0.199 port=15432 sslmode=prefer sslcompression=0'

 此时重启数据库,新主库和新从库就重新挂接上了

 注意:pg_rewind 常常是因为旧的主库发生了运行问题,我们可以选择进行故障切换,当新的主库拉起来后,重新进行基础备份,会耗费非常长的时间(当数据库体量比较大的时候)。此时在我们解决了旧主库的问题后,会和新主库有日志差异,我在做pg_rewind操作时,将旧的主库数据回滚到新主库被激活的时候,然后新主库和新从库会在这一时间线继续进行增量的数据同步从而达到数据一致性。

  promote激活

在postgresql-12之后提供了promote 用于激活从库。以下操作进行主从切换 ,以上面操作后的主从服务器为基础进行。

路径ipportuser with replication 
从库/home/postgres/pg/data10.0.0.20015432pgback
主库/home/postgres/pg01_back10.0.0.19915432pgback

从库上激活从库

pg_ctl -D $PGDATA promote 

 从库激活完成,可以看到已经顺利升级成了主库        

 在10.0.0.199服务器的数据库上使用pg_rewind 对数据进行回滚

 pg_rewind  -D pgback/  --source-server='host=10.0.0.200 user=postgres  dbname=postgres port=15432'

再创建standby.signal从库标识文件

touch standby.signal

 编辑postgresql.conf文件

注:postgresql.auto.conf的参数配置会覆盖前者,在前者编辑参数,注意后者不能再有参数的配置内容,避免被覆盖。

编辑完后拉起数据库

 

 此时主库便成了从库端

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是 Docker PostgreSQL12 流复制主从同步的配置和切换步骤: 1. 首先,在主数据库修改 postgresql.conf 和 pg_hba.conf 文件,分别设置流复制相关参数和允许从服务器连接。 postgresql.conf 文件需要设置以下参数: ``` wal_level = replica max_wal_senders = 5 wal_keep_segments = 32 ``` pg_hba.conf 文件需要添加以下规则: ``` host replication all <从服务器IP地址>/32 md5 ``` 2. 重新启动主服务器,使配置生效。 3. 在从服务器创建一个空的目标数据库,并且在 postgresql.conf 文件设置以下参数: ``` hot_standby = on ``` 4. 使用 pg_basebackup 命令将主服务器上的数据复制到从服务器上: ``` pg_basebackup -h <主服务器IP地址> -U <用户名> -D /var/lib/postgresql/data -P --xlog-method=stream ``` 5. 在从服务器创建一个 recovery.conf 文件,指定流复制配置参数: ``` standby_mode = on primary_conninfo = 'host=<主服务器IP地址> port=<主服务器端口> user=<用户名> password=<密码>' ``` 6. 启动从服务器。 7. 可以使用 pg_ctl 命令来检查主从同步状态: ``` pg_ctl status -D /var/lib/postgresql/data ``` 8. 如果需要切换主从角色,需要在从服务器上执行以下步骤: - 在主服务器上停止 PostgreSQL 服务; - 在从服务器上编辑 recovery.conf 文件,修改 primary_conninfo 参数为从服务器的连接信息; - 在从服务器上启动 PostgreSQL 服务; - 验证从服务器是否已成为新的主服务器。 希望这些步骤能够帮助到你,如果有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值