admin管理员组文章数量:1666604
引言
在数据库开发过程中,部署了主从结构,由于开发的某一些问题,导致数据库宕机、故障。此时我们可以通过主从切换的方法,使得主库能继续运行。
通常故障切换称为“Failover”。异步复制时,如果主库出现了问题,可以激活备库作为主库提供服务。在PostgreSQL9.1版本之前是在recovery.conf中配置一个trigger文件,当备库检测到该文件时,就自动把自己激活成主库,PostgreSQL9.1版本之后提供了命令“pg_ctl promote”来激活备库,所以现在很少有人再以配置trigger文件的方式激活备库了
主从配置
路径 | ip | port | user with replication | |
主库 | /home/postgres/pg/data | 10.0.0.200 | 15432 | pgback |
从库 | /home/postgres/pgback | 10.0.0.199 | 15432 |
搭建流复制环境
同步流复制
异步流复制
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 用于激活从库。以下操作进行主从切换 ,以上面操作后的主从服务器为基础进行。
路径 | ip | port | user with replication | |
从库 | /home/postgres/pg/data | 10.0.0.200 | 15432 | pgback |
主库 | /home/postgres/pg01_back | 10.0.0.199 | 15432 | pgback |
从库上激活从库
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的参数配置会覆盖前者,在前者编辑参数,注意后者不能再有参数的配置内容,避免被覆盖。
编辑完后拉起数据库
此时主库便成了从库端
本文标签: 主从故障postgresql库升主
版权声明:本文标题:postgresql中故障切换,主从切换,从(备)库升主 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1730075144a1221676.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论