pg_rewind

repmgr+pg12集群,挂掉的主机如何手动加入集群

一笑奈何 提交于 2020-05-04 13:44:02
接上回,备机在检测到主机挂掉后,备机通过standby promote成功升级为主机继续提供服务 此时集群状态如下: 接下来需要恢复原主机为备机加入集群继续提供服务 1、主机执行node rejoin,将节点重新加入集群: ./repmgr node rejoin -h192.168.101.7 -Upostgres - dpostgres [postgres@localhost bin]$ ./repmgr node rejoin -h192. 168.101 . 7 -Upostgres - dpostgres ERROR: this node cannot attach to rejoin target node 2 DETAIL: rejoin target server ' s timeline 2 forked off current database system timeline 1 before current recovery point 0/8000028 HINT: use --force-rewind to execute pg_rewind 报错日志可以看出,此时的节点和现在的主节点日志发生了分歧,需要调用--force-rewind重做备机,执行如下命令即可 ./repmgr node rejoin -h192. 168.101 . 7

基于Pgpool搭建PostgreSQL11的集群

南楼画角 提交于 2020-04-21 04:22:19
基于Pgpool-II4.1.0搭建PostgreSQL11集群 Pgpool介绍 环境准备 搭建配置 服务器配置 pgpool安装 PostgreSQL数据库配置 pgpool配置 相关脚本 启动 停止 测试 负载均衡测试 自动故障转移测试 写在最后 关于作者 相关链接 该篇文章主要是介绍基于pgpool4.1以及PostgreSQL的流复制实现PostgreSQL的读写分离以及高可用,配置参考 Pgpool-II官方文档 。使用版本为Pgpool4.1、PostgreSQL11.6。 文章略长。。。。。。。。。。。虽然我也不想 Pgpool介绍 pgpool相关介绍不在该文章中,需要者可以参考我的另一篇文章。传送门: pgpool介绍 环境准备 本次使用三台CentOS7.3的服务器来搭建集群,首先在三台服务器上部署PostgreSQL11.6版本的数据库,部署教程大家可以网上自行查找。具体规划如下: Hostname IP Address Virtual IP 192.168.111.6 server1 192.168.111.1 server2 192.168.111.2 server3 192.168.111.3 架构图参考官网: 搭建配置 服务器配置 故障转移、在线恢复时需要ssh到其它服务器执行命令,故需要配置服务器之间无密码ssh登录

PostgreSQL程序版本号的作用

我与影子孤独终老i 提交于 2019-12-05 09:08:06
​很多人查看过程序的版本号: quanzl-mac:bin quanzl $ ./postgres -V postgres (PostgreSQL) 11beta2 quanzl-mac:bin quanzl $ ./initdb -V initdb (PostgreSQL) 11beta2 quanzl-mac:bin quanzl $ 似乎这些也就是给我们看看,没有其他用处,其实并非如此。 1、把initdb 放到其他版本bin目录下试试看(别忘记备份,尝试完之后别忘记恢复原状): quanzl-mac:bin quanzl$ ./initdb -D ../data The program "postgres" was found by "/Users/quanzl/build/flyingdb-v10bin/bin/initdb" but was not the same version as initdb. Check your installation. quanzl-mac:bin quanzl$ 很清楚的错误提示,initdb和postgres版本不一致。 2、如何根据错误提示定位代码位置 遇到错误信息时,如果对代码不够熟悉,怎么知道哪段代码在报错呢?就像上边的例子,可以在代码中搜索“but was not the same version”,或者 “The

postgres预写式日志的内核实现详解-wal记录读取

◇◆丶佛笑我妖孽 提交于 2019-12-05 03:32:41
导读: postgres预写式日志的内核实现详解-概述 之前已经写了关于 wal记录的结构 、 wal记录的写入 的博客,流复制、PITR、数据库启动、逻辑复制等PG功能都需要借助wal日志,他们是怎样读取wal日志记录的呢?这一篇博客将会讲解。 pg内核代码中读取wal有固定的程式。如下结构: XLogReaderAllocate() XLogFindNextRecord() for (;;) { XLogReadRecord(); … } XLogReaderAllocate(XLogPageReadCB pagereadfunc, void *private_data) 函数用来做读取的预处理,数据初始化、空间分配、page读取函数注册等。 第一个参数pagereadfunc是一个函数指针,指向的函数功能为,读取page的数据、wal日志文件切换。 所有读取wal日志的程序都会都会为自己定制一个pagereadfunc函数,如代码中: XLogDumpReadPage→pg_waldump工具的读取函数。 XLogPageRead→recovery过程读取wal的函数 read_page→逻辑复制使用的函数 SimpleXLogPageRead→pg_rewind使用的函数 XLogFindNextRecord(XLogReaderState *state,