专栏首页AustinDatabasesPostgresql Repmgr 级联复制 及 PostgreSQL 故障转移

Postgresql Repmgr 级联复制 及 PostgreSQL 故障转移

PostgreSQL 使用repmgr 进行主从数据的Clone是可以进行级联复制的,使用过MYSQL的同学可能会觉得,没有什么了不起,MYSQL 多少级的级联复制都可以。但PostgreSQL 的级联数据复制有些不同 1 PostgreSQL 中的复制是stream replication 而不是类似MYSQL 的逻辑复制。2 这里的复制不是指的和 mysql 一样的 从库套从库的复制,而是从PG的从库进行数据的CLONE 制作新的从节点,然后在将从节点连接到主库,这点也和MYSQL不一样。

首先我们已经有两台机器,在repmgr 的管理中,从图中可以看到 110 ,111 两台机器已经在 repmgr 的管理中

我们安装另外一台 postgresql 的机器 112 并且安装 repmgr 软件。

注意不要进行数据的初始化,repmgr 的机器需要复制的机器的指定的数据目录必须为空。

repmgr -h 192.168.198.111 -U repmgr -d repmgr -f /etc/repmgr.conf standby clone --upstream-node-id=2 --verbose

192.168.198.111 是从库,而复制直接是从从库进行复制,而不是主库。

开始将机器的信息加入到集群中这里首先需要的就是编辑好 repmgr.conf

具体如何编译,请参见前几天的 repmgr 的安装的文字内容。这里就不重复了

repmgr -f /etc/repmgr.conf standby register --upstream-node-id=2

命令里面的 --upstream-node-id =2 指的是数据的初始复制是来自于 从节点而从节点的 node_id 是 2 ,之后的数据复制还是来自于从库而不是主库

命令执行完毕后,可以在主机中找到新加入的节点信息。

我们下边可以来验证

select * from pg_stat_replication

通过执行语句在 110 ,111 上

在 110

在 111

相关的级联复制就OK 了。

而一个数据库系统的failover 其实是评判一个数据库是否靠谱的一个重要的指标。

PostgreSQL 数据库本身是可以进行 failover 切换的。在repmgr中我们可以通过见证服务器来做这件事。

1 首先将刚才的112 节点 脱离目前的集群

直接在 112 上执行命令

repmgr standby unregister -f /etc/repmgr.conf

节点会直接在 110 111上的注册信息进行清除,但清除注册信息,不会将复制进行清除,如有必要还需要断掉 111 到 112 之间的复制连接。(如何停止复制,请百度或翻一下之前写过的关于复制的文字)

112 上停止复制后,停机,将原来的 /pgdata/data 下的数据清空

重新初始化数据库

initdb -D /pgdata/data

启动数据库

pg_ctl -D /pgdata/data start

然后需要做以下工作,确认112 与其他111 110 两台服务器 SSH 免密登录 账号以启动 pg数据库的账号为免密对象

配置好 repmgr.conf 文件,并且对pg_hba.conf 文件进行修改,保证见证服务器上的repmgr 账号登录主机和从库都是OK 的

repmgr -f /etc/repmgr.conf witness register -h 192.168.198.110 -d repmgr -U repmgr

执行上面的命令对112 注册witness 见证服务器

然后在112上查看相关的信息是否正确

可以从图中看到 112已经被注册为见证服务器

基本上我们的环境就搭建完毕了,下面需要实现的当主机DOWN 掉后,从库自动升级为主库的功能。

需要repmgr 的两点功能

1 监控功能,postgresql 服务状态

2 通过监控状态,触发脚本,进行从库转为主库的工作

这里我们要借助repmgr 中的监控程序 repmgrd 守护程序来对整体的集群进行一个监控。首先repmgrd守护程序需要对 /etc/repmgr.conf 中关于repmgrd 的设置进行相关配置。

下图是配置的选择项和相关的配置值

failover=automatic

priority=100

connection_check_type=ping

#reconnect_attempts=6

#reconnect_interval=10

promote_command=repmgr standby promote -f /etc/repmgr.conf

follow_command=repmgr standby follow -f /etc/repmgr.conf -W --upstream-node-id=%n

在配置完毕后,就可以在 111 节点运行

repmgrd -f /etc/repmgr.conf --verbose --monitoring-history

在 111 节点运行 监控后,我们关掉 110 节点的 PG 服务,监控马上就开始反应,在尝试6次重新连接到 主节点失败后,开始进行从库 升级的操作

我们在从库和见证服务器可以运行相关查看集群状态的命令,可以看到111已经变为了主库。

repmgr 作为FAILOVER 以及 switch over standby to primary 的软件,其功能是强大的,完全满足企业或互联网企业在高可用中使用,辅助以一些脚本,就可以做到 MHA 一样的效果,或更好。

PG 有了repmgr 第三方软件的支持,如虎添翼。

本文分享自微信公众号 - AustinDatabases(AustinDatabases),作者:carol11

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-08-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 谁说 PostgreSQL 没有靠谱的高可用(1)

    最近问postgresql 那个高可用靠谱的人越来越多,其实我也试过几种postgresql 的高可用方案,而最近听到的声音是 PostgreSQL 没有靠谱的...

    AustinDatabases
  • 谁说postgresql 没有靠谱的高可用(6)

    接上期,(如果看不懂的,请从第一期看,否则可能和看天书没两样),最近在梳理一些问题的时候,发现一个现象,大部分出现问题后,解决就完了,网上很多文字,大多都是这样...

    AustinDatabases
  • PostgreSQL 高可用集群 repmgr 与 头疼的问题

    PostgreSQL 的高可用的方案,基本上不是原生的,大多是依靠第三方的公司来进行开发的,挂名的有那么几种 Patroni, PGPOOL-II, Repmg...

    AustinDatabases
  • PostgreSQL 高可用集群 repmgr 与 头疼的问题

    PostgreSQL 的高可用的方案,基本上不是原生的,大多是依靠第三方的公司来进行开发的,挂名的有那么几种 Patroni, PGPOOL-II, Repmg...

    AustinDatabases
  • 谁说 PostgreSQL 没有靠谱的高可用(1)

    最近问postgresql 那个高可用靠谱的人越来越多,其实我也试过几种postgresql 的高可用方案,而最近听到的声音是 PostgreSQL 没有靠谱的...

    AustinDatabases
  • 谁说postgresql 没有靠谱的高可用(6)

    接上期,(如果看不懂的,请从第一期看,否则可能和看天书没两样),最近在梳理一些问题的时候,发现一个现象,大部分出现问题后,解决就完了,网上很多文字,大多都是这样...

    AustinDatabases
  • 通过Python脚本理解系统进程

    tcpSerSock=socket(AF_INET,SOCK_STREAM)#生成TCP Socket

    py3study
  • 现场报道 | IJCAI 2017四大论文奖项揭晓:牛津大学获最佳杰出论文

    机器之心报道 机器之心编辑部 IJCAI(人工智能国际联合大会)是人工智能领域的顶级综合会议,被中国计算机学会推荐国际学术会议列表认定为 A 类会议。IJCAI...

    机器之心
  • 亿级流量诞生的背后:被“圈养”的百万网民

    楔子:百万圈养 200块钱,意味着什么? 对于打零工的小廖来说,200块钱不多,却意味着他小半个月的饭钱,也意味着他每个月从“挂机”中取得的报酬。 “就挂着帐...

    腾讯防水墙
  • HDR质量评价技术

    本文聚焦HDR质量评价技术,对于编解码、色调映射以及逆色调映射等不同任务,通常会采取不同的评价方法。本部分先从主观评价和客观评价两个角度对常用的HDR视觉质量评...

    用户1324186

扫码关注云+社区

领取腾讯云代金券