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

打印 上一主题 下一主题

主题 936|帖子 936|积分 2808

一.Switchover

对于Oracle来说,切换主备的过程叫switchover,下令比力复杂,PostgreSQL数据库切换的操纵比力简朴
• 先停主库,再停备库
• 在原主库的数据目录中见文件 “standby.signal”(假如是PostgreSQL12之前的版本是recover.conf),并设置毗连新主库的流复制参数。
• 把源备库数据目录下的文件“standby.signal”重定名或者删除
• 启动原备库,这时酿成了新主库
• 启动原主库,这时酿成了新备库
演示切换过程
主库停库
  1. pg_ctl stop
复制代码
备库停库
  1. pg_ctl stop
复制代码
主库上建文件standby.signal
  1. touch $PGDATA/standby.signal
复制代码
主库在 postgresql.conf中添加如下内容 这里ip写新主库的ip
  1. primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=prefer sslcompression=0'
复制代码
假如是PostgreSQL12之前的版本,需要创建 recovery.conf 文件,内容如下
  1. standby_mode = 'on'
  2. primary_conninfo = 'user=postgres password=postgres host=192.168.1.218 port=5432 sslmode=disable sslcompression=1'
复制代码
把备库的 standby.signal 重定名或删除(这里进行了重定名,方面后续切换归去)
  1. mv standby.signal bak.standby.signal
复制代码
新主库启动数据库
  1. pg_ctl start
复制代码
检察该数据库是否是主库 f是主库 t是备库
  1. select pg_is_in_recovery();
复制代码

重新检察视图,检察新备库过来的毗连
  1. 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上面实行下令
  1. pg_ctl promote
复制代码

如今217已经酿成了主库,然后把原主库开机,在218上面实行pg_rewind下令
  1. pg_rewind -D $PGDATA --source-server='host=192.168.1.217 user=postgres password=postgres'
复制代码

pg_rewind实行完成后,手动建文件 standby.signal
  1. touch $PGDATA/standby.signal
复制代码
在 postgresql.conf中添加以下内容
  1. primary_conninfo = 'user=postgres password=postgres host=192.168.1.217 port=5432 sslmode=prefer sslcompression=0'
复制代码
启动数据库
  1. pg_ctl start
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

写过一篇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表