当前位置: 首页 > news >正文

PostgreSQL数据库主备切换(switchover和failover)

一.Switchover

对于Oracle来说,切换主备的过程叫switchover,命令比较复杂,PostgreSQL数据库切换的操作比较简单
• 先停主库,再停备库
• 在原主库的数据目录中见文件 “standby.signal”(如果是PostgreSQL12之前的版本是recover.conf),并配置连接新主库的流复制参数。
• 把源备库数据目录下的文件“standby.signal”重命名或者删除
• 启动原备库,这时变成了新主库
• 启动原主库,这时变成了新备库

演示切换过程
主库停库

pg_ctl stop

备库停库

pg_ctl stop

主库上建文件standby.signal

touch $PGDATA/standby.signal

主库在 postgresql.conf中添加如下内容 这里ip写新主库的ip

primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=prefer sslcompression=0'

如果是PostgreSQL12之前的版本,需要创建 recovery.conf 文件,内容如下

standby_mode = 'on' primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=disable sslcompression=1'

把备库的 standby.signal 重命名或删除(这里进行了重命名,方面后续切换回去)

mv standby.signal bak.standby.signal

新主库启动数据库

pg_ctl start

查看该数据库是否是主库 f是主库 t是备库

select pg_is_in_recovery();

重新查看视图,查看新备库过来的连接

select client_addr,state,sync_state from pg_stat_replication;

二.Failover

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

原主库出现问题后,通常这些故障并没有导致数据丢失,如宕机、机器重启的故障。当故障解决之后,通常我们会把原主库转换成新主库的Standby备库,该转换一般来说需要重新搭建备库。这是因为原主库的一些数据没有同步过去就把备库激活了,备库相当于丢失了一些数据。而重新搭建备库的话,如果数据库很大,基础备份会执行很长时间,为了解决这个问题,从PostgreSQL9.5版本开始提供pg_rewind命令,不需要复制太多的数据就可以把原主库转换成新主库的备库。该命令相当于把原主库的数据“回滚”到新主库激活时的状态,当然这里所说的“回滚”不是真的“回滚”,只是为了让我们更好地理解pg_rewind的作用。
使用pgrewind命令要求主库必须把参数“wal_log_hints”设置成“on”或主库在建数据库实例时打开了checksum,这样配置的主库在出现故障时才能使用pg_rewind命令。当然这样做之后,数据库会产生更多的WAL日志,所以数据库默认是没有打开checksum参数的,数据库实例打开checksum参数的方法是,在用initdb命令初始化数据库实例时使用“k”“–data-checksums”参数。
如果我们没有把参数“wal log hints”或“checksum”打开,运行pg rewind时会报错

接下来演示pg_rewind的使用方法。
现在是主库是 192.168.1.218 备库是192.168.1.217
模拟主库宕机,直接关机。现在激活备库 在217上面执行命令

pg_ctl promote

现在217已经变成了主库,然后把原主库开机,在218上面执行pg_rewind命令

pg_rewind -D $PGDATA --source-server='host=192.168.1.217 user=postgres password=postgres'

pg_rewind执行完成后,手动建文件 standby.signal

touch $PGDATA/standby.signal

在 postgresql.conf中添加以下内容

primary_conninfo = 'user=postgres password=postgres host=192.168.1.217 port=5432 sslmode=prefer sslcompression=0'

启动数据库

pg_ctl start
http://www.cnnetsun.cn/news/2578435.html

相关文章:

  • 为什么你的Lovable平台DAU卡在1.2万?揭秘头部社交产品未公开的「关系图谱预热算法」与服务端优化方案
  • LlamaParse技术架构解析:企业级文档智能化的核心引擎
  • 中英翻译器之04 Transformer 翻译模型
  • 智能解锁B站缓存:m4s-converter完整恢复指南
  • 避坑指南:用Springer的sn-basic模板投稿时,如何快速搞定参考文献的序号排序问题?
  • 如何3分钟完成iOS应用签名:终极图形化解决方案指南
  • 《学Unity的猫》——第十六章:Unity粒子系统ParticleSystem,打造一场浪漫樱花雨
  • 终极英雄联盟自动化工具指南:5分钟掌握League Akari核心功能
  • CAD与3D打印电子集成:多工艺自动化设计制造实践
  • 基于深度信念网络的软件缺陷预测:从原理到工程实践
  • 模型驱动工程与领域特定建模:提升软件开发效率的核心实践
  • 别再纠结了!给电子新人的EDA软件选择指南:AD、PADS、Allegro到底怎么选?
  • 终极指南:使用ROFL-Player深度解析英雄联盟回放文件
  • PICT:成对组合测试的终极解决方案与架构革命
  • 从LED到数字钟:AVR动态扫描与BASCOM定时器编程实战
  • 数据科学家必备的时序信号处理实战指南
  • 从稀疏到清晰:K-SVD字典学习在医学图像降噪中的实战解析
  • ChanlunX缠论插件:快速掌握通达信自动缠论分析的终极指南
  • CANoe FDX协议实战:手把手教你用Wireshark抓包调试UDP通信(避坑指南)
  • 国产多模态大模型:如何成为元宇宙的“创世引擎”?
  • 3步学会缠论自动化:用ChanlunX插件告别手动画线烦恼
  • 【Lovable保险系统开发实战指南】:20年架构师亲授高可用、高合规、高体验的3大核心设计法则
  • 设备端DNN训练加速器设计:攻克数据流、内存墙与计算能效挑战
  • 从FreeSRP开源项目看AD936x接口设计:如何为你的SDR项目选CMOS还是LVDS?
  • CVCL网络:轻量级跨域语义匹配系统,6%参数量实现96%大模型性能
  • 用户身份链接技术:从特征工程到图神经网络的应用与挑战
  • LGTV Companion终极指南:如何让LG电视智能同步电脑开关机
  • Excel TRIM函数实战指南:清除空格与隐形字符
  • LLM在渗透测试中的应用与PentestGPT创新实践
  • 开源MES系统架构解析:基于ISA88/ISA95标准的制造业数字化转型技术实现