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

本文介绍了Patroni + Etcd实现PostgreSQL高可用方案的优点,如健壮性、支持多种复制方式和自动化程度高等。详细讲述了Patroni和Etcd的基本概念,以及在一个3节点环境中部署Patroni的步骤,包括环境准备、安装和配置等。还讨论了常见的安装和运行时错误及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接: 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值