文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

故障切换后,如何将原来的主机作为备机快速添加到集群?

2024-11-29 20:48

关注

wal_log_hints:当此参数处于启用状态时,PostgreSQL 服务器会在检查点后第一次修改每个磁盘页面时,将该页面的全部内容写入WAL,即使对于所谓的提示位的非关键修改也会如此。更改此参数需要重启 PostgreSQL 集群。必须在复制集群中的所有 PostgreSQL 服务器上,执行以下操作:

$ psql -c "ALTER SYSTEM SET wal_log_hints TO 'ON'"
$ pg_ctl -D $PGDATA restart

此外,自故障转移以来的所有 WAL 段都必须存在,才能完成回转。

操作步骤

我们将使用以下步骤来执行此操作:

如果需要,可以在旧主机上手动关闭 PostgreSQL:

$ pg_ctl -D $PGDATA stop

运行 pg_rewind:

$ pg_rewind -D /var/lib/pgsql/12/data --sourceserver="host= port=5432 user=postgres dbname=postgres password=secret"
The servers diverged at WAL POSITION 0/9BC9E268 ON timeline 1.
could NOT OPEN file "/var/lib/pgsql/12/data/pg_wal/00000001000000000000009B": No such file OR directory

could NOT find previous WAL record at 0/9BC9E268
Failure, exiting

此处,主机上只保留了很少的 WAL 段,所以现在需要复制一些回来:

$ ls -l /var/lib/pgsql/12/data/pg_wal/
-rw------- 1 postgres postgres 16777216 Apr  4 13:51 0000000100000000000000B5
-rw------- 1 postgres postgres 16777216 Apr  4 13:51 0000000100000000000000B6
-rw------- 1 postgres postgres       42 Apr  4 13:49 00000002.history
drwx------ 2 postgres postgres     4096 Apr  4 13:51 archive_status/

所以,我们只需要复制从 9B 到 B5 的所有 WAL 段:

$ cp /backup/archive/00000001000000000000009[BCDEF] /var/lib/pgsql/12/data/pg_wal/
$ cp /backup/archive/0000000100000000000000A? /var/lib/pgsql/12/data/pg_wal/
$ cp /backup/archive/0000000100000000000000B[01234] /var/lib/pgsql/12/data/pg_wal/

再次运行 pg_rewind:

$ pg_rewind -D /var/lib/pgsql/12/data --sourceserver="host= port=5432 user=postgres dbname=postgres password=secret"
The servers diverged at WAL position 0/9BC9E268 on timeline 1.
Rewinding from last common checkpoint at 0/9B8B20D0 on timeline 1
Done!

添加primary_conninfo设置,创建 standby.signal 文件:

$ echo "primary_conninfo = 'user=replicator password=secret host= port=5432 sslmode=prefer sslcompression=0 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'" >> $PGDATA/postgresql.auto.conf
$ echo "standby_mode = 'ON'" >> $PGDATA/postgresql.auto.conf
$ touch $PGDATA/standby.signal

启动备用服务器(M1):

$ pg_ctl -D $PGDATA start

怎么做到的

一旦执行过故障转移,新主服务器的时间线会发生变化,并且会与原主服务器不同。此时,我们可以使用 pg_rewind,从新的主服务器重新同步旧的主服务器。这样,我们可以将旧主服务器作为备用服务器添加到集群中,而无需重建它。为了实现这一点,我们需要确保旧主服务器不接受写入,并在故障转移时关闭。或者,我们可以使用步骤 1 中使用的命令,手动关闭在旧主机(M1)上运行的 Postgres。

一旦旧的主服务器被关闭,我们就可以参照步骤 2 使用 pg_rewind,将旧主服务器倒回到应该从新主服务器开始复制的点。在命令中,唯一需要更改的是主机,该主机必须是新主机的 IP 或主机名。此外,您还应该正确修改用户和密码。

执行 pg_rewind 所需的时间各不相同。它可能更快或更慢,具体取决于故障转移时发生的更改。完成第 2 步后,我们应该将适当的参数和文件放在一个位置,表明旧主服务器是备用服务器。我们可以参考第 3 步,该步骤讲述了如何在旧主机(M1)的 postgresql.auto.conf 文件中,设置primary_conninfo和standby_mode这两个参数。添加参数后,我们可以创建一个空文件 standby.signal,如步骤 3 所示。然后,我们可以在服务器 M1 上简单地启动 PostgreSQL 集群。

来源:红石PG内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯