PostgreSQL高可用集群在360的落地实战

本文介绍了在360公司如何采用Patroni和Etcd构建PostgreSQL高可用集群。通过Etcd作为分布式Key-Value数据库,Patroni监控和控制PostgreSQL实例,实现主节点选举和故障转移。集群采用一主两副本,Etcd为三节点部署,确保高可用性和健壮性。文章详细讲解了部署步骤、配置细节以及日常运维操作,包括Python环境搭建、PostgreSQL安装、Etcd集群配置、Patroni部署和监控设置。
摘要由CSDN通过智能技术生成

本文主要从以下几个方面介绍PostgreSQL高可用集群在360的落地实战

为什么选择Patroni + Etcd + PostgreSQL高可用集群方案

PostgreSQL高可用集群在360的落地实战 Patroni + Etcd 高可用集群架构解析

Patroni + Etcd + PostgreSQL 部署实战

Patroni 日常运维管理

PostgreSQL 监控实现

PostgreSQL 应用连接方式

PostgreSQL 备份恢复方式选择

背景

最近线上重要业务容器云的镜像仓库需要部署一套postgresql 高可用集群,涉及到数据库选型,最终选择了postgresql,为什么不选择mysql呢,postgresql是功能最强大的开源数据库,主要考虑postgresql支持使用函数索引和条件索引,text 没有限制,可以索引,还可以全文检索,不用再接一套es,并且postgresql 开源协议好,开源软件原生支持好,特别对开发来说比较友好,最重要的是kube-bench 只支持postgresql。

为什么选择Patroni + Etcd 方案

PostgreSQL 比较流行的高可用解决方案有很多,常用的主要包含repmgr和patroni等,也是github star前几的高可用组件,并且文档更新比较及时,都可最高支持postgresql 13,repmgr 相对来说功能没有patroni全面以及不能检测备机是否被错误配置为未知或不存在的节点、不能检测远程节点的状态(不具备分布式解决方案)和不能处理单个节点的恢复,本文主要基于patroni 实现。

此方案使用Patroni管理本地库,并结合Etcd作为数据存储和主节点选举,具有以下优势:

  •  健壮性使用分布式key-value数据库作为数据存储,主节点故障时进行主节点重新选举,具有很强的健壮性

  • 支持多种复制方式基于内置流复制,支持同步流复制、异步流复制、级联复制

  • 支持主备延迟设置: 可以设置备库延迟主库WAL的字节数,当备库延迟大于指定值时不做故障切换

  •  自动化程度高:

  1. 支持自动化初始PostgreSQL实例并部署流复制

  2. 当备库实例关闭后,支持自动拉起

  3. 当主库实例关闭后,首先会尝试自动拉起

  4. 支持switchover命令,能自动将老的主库进行角色转换 

     

  • 避免脑裂: 数据库信息记录到ETCD 中,通过优化部署策略(多机房部署、增加实例数)可以避免脑裂

Patroni + Etcd 高可用架构

Patroni 是一个开源工具套件,它是用 Python编写的,可确保 PostgreSQL HA 集群的端到端设置,包括流复制。它的功能通过REST API显示,也通过一个名为 Patronictl 的命令行实用程序显示。它通过使用其运行状况检查API来处理负载平衡来支持与 HAProxy 的集成。在此 HA 解决方案中,etcd 用于分布式配置存储 (DCS),以实现最大的可访问性,下面是官方高可用集群方案的架构图展示,我们基于此完成postgresql 高可用架构集群方案设计,不过并没有使用HAproxy 进行负载均衡,而是使用公司内部的LVS 来实现的,一主两副本,副本部署在不同的idc 实现异地灾备,etcd 也是三节点集群分别部署在三台机器, 如果资源有限,也可以和postgresql/patroni部署在相同机器。

Etcd、Patroni 和PostgreSQL是如何一起工作的

etcd/patroni/postgresql 都是部署的3节点集群


Etcd: 分布式的Key-Value数据库


etcd1、etcd2、 etcd3作为分布式的Key-Value数据库,被partroni1、 patroni2、 patroni3读/写,用于共享/传递信息。每一个 Patroni都能读/写etcd中的数据。

Paroni: 控制/监控本地的PostgreSQL, 把本地PostgreSQL信息/状态写入etcd


每一个 Patroni实例监控/控制本地的PostgreSQL,把本地本地PostgreSQL信息/状态写入etcd , 一个Patroni实例能够通过读取etcd获取外地PostgreSQL的信息/状态。

PostreSQL主节点的选举


Patroni判断本地PostgreSQL是否可以作为Primary库。如果可以,Paroni试图选举本地PostgreSQL作为Primary(Leader) , 选举方式是:把etcd中的某个key更新成为本地PostgreSQL的名字, 如果多个Paroni同时更改同一个key,只有一个能改成功,然后成为Primary(Leader)。

部署篇


系统/软件/版本

· CentOS 7.4

· PostgreSQL 12.6

· etcd: 3.2.18

· python: Python 3.6.5

· Patroni: 2.1.0

主机信息

10.16.75.17  pg12/patroni

10.16.75.15  pg12/patroni

10.16.78.53   pg12/patroni

10.24.13.9   etcd

10.24.13.10  etcd

10.24.13.11  etcd

这里用了6台机器,也可以用3台机器组件全部安装在一起

Python3 安装

# 安装依赖

yum install wget gcc make zlib-devel openssl openssl-devel

wget "https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz"

tar -xvJf Python-3.6.5.tar.xz

# 编译

cd Python-3.6.5 && ./configure prefix=/usr/local/python3

make && make install

ln -fs /usr/local/python3/bin/python3 /usr/bin/python3

ln -fs /usr/local/python3/bin/pip3 /usr/bin/pip3

# virtualenv

pip3 inst

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值