postgresql 高可用_Patroni + Etcd 实现高可用之一: 安装部署

原文链接: Patroni + Etcd 实现高可用之一: 安装部署

PostgreSQL 至今都没有特别流行的高可用方案,之前介绍过两种高可用方案,如下:

  • Pgpool-II方案: PostgreSQL 流复制 + Pgpool-II 实现高可用 HA
  • Keepalived方案:Keepalived + PostgreSQL 流复制方式实现高可用 HA

以上两种方案都能实现基本的 PostgreSQL 高可用,当主库宕机时,备库能正常接管,但存在一些不足。

Pgpool-II方案 - 故障切换时并不会判断备库与主库存在的数据差异,这块逻辑需要自定义。 - 性能下降明显,根据之前的只读场景测试,大概降幅有20%,详见Pgpool-II 流复制模式压力测试。 - 自动化程度不高,例如备库实例挂掉后不会自动拉起,主备切换后,需人工介入将老的主库进行角色转换。

Keepalived方案 - 程序移值性不好,不方便部署和安装。 - 自动化程度不高,例如备库实例挂掉后不会自动拉起,主备切换后,需人工介入将老的主库进行角色转换。

Patroni + Etcd 方案优点

最近在在看基于 Patroni + Etcd 的高可用方案,此方案使用Patroni管理本地库,并结合Etcd作为数据存储和主节点选举,具有以下优势:

  • 健壮性: 使用分布式key-value数据库作为数据存储,主节点故障时进行主节点重新选举,具有很强的健壮性。
  • 支持多种复制方式: 基于内置流复制,支持同步流复制、异步流复制、级联复制。
  • 支持主备延迟设置: 可以设置备库延迟主库WAL的字节数,当备库延迟大于指定值时不做故障切换。
  • 自动化程度高: 1)支持自动化初始PostgreSQL实例并部署流复制; 2)当备库实例关闭后,支持自动拉起; 3)当主库实例关闭后,首先会尝试自动拉起; 4)支持switchover命令,能自动将老的主库进行角色转换。
  • 避免脑裂: 数据库信息记录到 ETCD 中,通过优化部署策略(多机房部署、增加实例数)可以避免脑裂。

Patroni 简介

Patroni基于Python开发的模板,结合DCS(例如 ZooKeeper, etcd, Consul )可以定制PostgreSQL高可用方案。

Patroni并不是一套拿来即用的PostgreSQL高可用组件,涉及较多的配置和定制工作。

Patroni接管PostgreSQL数据库的启停,同时监控本地的PostgreSQL数据库,并将本地的PostgreSQL数据库信息写入DCS。

Patroni的主备端是通过是否能获得 leader key 来控制的,获取到了leader key的Patroni为主节点,其它的为备节点。

Etcd 简介

Etcd是一款基于Raft算法和协议开发的分布式 key-value 数据库,基于Go语言编写,Patroni监控本地的PostgreSQL状态,并将相关信息写入Etcd,每个Patroni都能读写Etcd上的key,从而获取外地PostgreSQL数据库信息。

当Etcd的leader节点不可用时,Etcd会一致性的选择一个合适的节点作为主节点,新的Etcd主节点将获取leader key,因此建议Etcd集群为三个以上且为奇数的节点,不建议部署在同一个机房,有条件话尽量部署在三个机房。

一个标准的3节点etcd集群,最大容许1个节点故障。

部署规划

为了演示方便,使用笔记本上的三台虚机作为演示环境,软件版本规划如下:

操作系统: CentOS Linux 7.7 
数据库: PostgreSQL 12.2 
Python: Python 3.8.2 
Etcd: etcd-v3.4.7
Patroni: patroni 1.6.5

部署规划如下:

v2-95f85ad1cdef39deba27a8c00db469d3_b.jpg

环境准备

虽然Patroni支持自动化初始化PostgreSQL数据库并部署流复制,这两块工作个人建议还是手工来做比较好。

部署一主两从PostgreSQL流复制,主机ydtf01部署主库,ydtf02、ydtf03部署从库,流复制的部署可参考 PostgreSQL:使用 pg_basebackup 搭建流复制环境。

为了演示方便,关闭ydtf01、ydtf02、ydtf03主机上的防火墙,如下:

# systemctl stop firewalld.service
# systemctl disable firewalld.service

由于本文的部分工具需要通 epel源安装,安装 epel 源,如下:

rpm -ivh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装python3,如下:

# wget -c https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tar.xz
# ./configure
# make
# make install


创建软链接,如下:
rm -f /usr/bin/python ln -s /usr/local/bin/pytho
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是一个强大的开源数据库管理系统,而repmgr是一个用于实现高可用性的工具,可以帮助用户部署和管理PostgreSQL的复制集群。下面将介绍如何在CentOS 7上安装部署repmgr实现PostgreSQL高可用性。 首先,需要在CentOS 7上安装PostgreSQL和repmgr。可以通过yum安装PostgreSQL,然后再通过源代码安装repmgr。安装完成后,需要在所有节点上创建用于复制的用户和用户组,并配置SSH免密登录。 接下来,在主节点上初始化repmgr并创建repmgr用户,然后再在备用节点上连接到主节点并完成初始化。 然后,在主节点上进行repmgr的配置,包括指定节点ID、设置连接信息等。同时,在备用节点上也需要进行repmgr的配置,指定备用节点的ID并设置连接信息。配置完成后,在主节点上执行repmgr standby clone命令将主节点的数据拷贝到备用节点。 最后,在所有节点上启动repmgr守护进程,并在主节点上执行repmgr cluster show命令检查集群状态。如果所有步骤都完成并且状态正常,那么repmgr的安装部署就顺利完成了。 通过以上步骤,就可以在CentOS 7上安装部署repmgr实现PostgreSQL高可用性。当主节点发生故障时,repmgr可以自动将备用节点提升为主节点,确保系统的持续可用性。同时,repmgr还提供了监控和管理PostgreSQL复制集群的功能,帮助用户更好地管理数据库系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值