- 一次性解决PostgreSQL使用中的各类问题
- 全面专业的PostgreSQL监控终极解决方案
- 简单易用的PostgreSQL部署管控置备方案
- 一键拉起的PostgreSQL全能本地沙箱环境
- 基于Apache License 2 的开源免费软件
开箱即用的开源PostgreSQL发行版
最新版本: v1.3.1 | Github项目 | 公开演示
文档地址: 英文文档 | 中文文档 | Github Pages文档
Pigsty是什么?
- Pigsty是开箱即用的PostgreSQL发行版
- Pigsty是全面专业的PostgreSQL监控系统
- Pigsty是高可用的PostgreSQL部署方案
- Pigsty是用途广泛的PostgreSQL沙箱环境
- Pigsty是自由免费的开源软件,基于Apache 2.0协议开源
太长;不看
准备新机器一台:Linux x86_64 CentOS 7.8,配置免密码sudo
与ssh
登陆权限,执行以下命令在本机完成Pigsty安装。
git clone https://github.com/Vonng/pigsty && cd pigsty
./configure
make install
您也可以使用curl
替代git
下载源代码与离线软件包(CentOS 7.8.2003),以执行离线安装。
curl -SL https://github.com/Vonng/pigsty/releases/download/v1.3.1/pkg.tgz -o /tmp/pkg.tgz
curl -SL https://github.com/Vonng/pigsty/releases/download/v1.3.1/pigsty.tgz | gzip -d | tar -xC ~ && cd ~/pigsty
./configure
make install
更多安装Pigsty的细节,请参考安装部署,置备虚拟机的细节可以参考:沙箱环境。
亮点特性
- 开箱即用的发行版,一键拉起生产环境所需的功能套件,开源免费。
- 全面专业的监控系统,基于 Grafana、Prometheus与pg_exporter 等开源组件。
- 简单易用的部署方案,基于Ansible的裸机部署,却提供类似Kubernetes的使用体验。
- 高可用数据库集群架构,基于Patroni实现,具有秒级故障自愈能力,久经生产环境考验。集成负载均衡,成员对外表现等价,提供类似分布式数据库的体验。
- 基于DCS的服务发现与配置管理,维护管理自动化,智能化,无需人工维护元数据。
- 无需互联网访问与代理的离线安装模式,快速、安全、可靠。
- 代码定义的基础设施,可配置,可定制,可扩展。
- 可基于Vagrant与Terraform快速部署本地/云端沙箱环境
- 基于PostgreSQL 14(支持13/12),打包PostGIS,Timescale,Citus等强力扩展。
- 集成Echarts,Jupyterlab等工具,可作为数据分析与可视化的集成开发环境。
- 架构方案经过长时间大规模的生产环境验证(200余节点 x 64C|400GB|3TB x 2年)
- Pigsty提供基于裸机的应用运行时,可用于部署与监控其他数据库与应用,目前提供 Redis支持
发行版
发行版(Distribution) 指的是由内核及其一组软件包组成的整体解决方案。例如Linux是一个操作系统内核,而RedHat,Debian,SUSE则是基于此内核的操作系统发行版。
Pigsty将集群部署,扩容缩容,主从复制,故障切换,流量代理,连接池,服务发现,访问控制,监控系统,告警系统,日志采集等生产级成熟解决方案封装为发行版,一次性解决在生产环境与各类场景下使用 世界上最先进的开源关系型数据库 —— PostgreSQL 时会遇到的问题,真正做到开箱即用。
开箱即用
Pigsty将易用性做到极致:一条命令拉起所有组件,10分钟安装就绪,不依赖容器与Kubernetes,上手⻔槛极低。
它既可用于大规模生产环境数据库管理,又可完整运行于本地单核虚拟机上。不操心,不折腾,一次性解决生产环境与个人使用PG的各类问题。
单节点模式本身功能完备,可自我管理,并带有一个扩展⻬全,全副武装,准备就绪的PG数据库, 可用于软件开发、测试、实验,演示;或者是数据的清洗,分析,可视化,存储,或者直接用于支持上层应用:Gitlab, Jira, Confluence, 用友,金蝶,群晖等等……
更重要的是,Pigsty打包并提供了一套完整的应用运行时,用户可以使用该节点管理任意数量的数据库集群。 您既可以使用它监控已有的数据库实例,也可以直接在其他节点上部署高可用故障自愈的PostgreSQL数据库集群(以及其他种类的应用或数据库,例如Redis)
此外,Pigsty还提供基于云虚拟机/本地虚拟机的沙箱环境,准备虚拟机的工作也可以一键完成了。
监控系统
监控系统提供了对系统状态的度量,是运维管理工作的基石。
Pigsty带有一个针对大规模数据库集群管理而设计的专业级PostgreSQL监控系统。包括约1200类指标,20+监控面板,上千个监控仪表盘,覆盖了从全局大盘到单个对象的详细信息。与同类产品相比在指标的覆盖率与监控面板丰富程度上一骑绝尘,为专业用户提供无可替代的价值。
一个典型的Pigsty部署可以管理几百套数据库集群,采集上千类指标,管理百万级时间序列,并将其精心组织为上千个监控仪表盘,交织于几十个监控面板中实时呈现。从全局大盘概览,到单个对象(表,查询,索引,函数)的细节指标,如同实时的核磁共振/CT机一般,将整个数据库剖析的清清楚楚,明明白白。
Pigsty监控系统由目前由三个紧密联系的应用共同组成:
- 收集并呈现监控 指标(Metrics) 数据的
pgsql
- 直接浏览数据库系统 目录(Catalog) 的
pgcat
- 实时查询搜索分析数据库 日志(log) 的
pglog
Pigsty监控系统基于业内最佳实践,采用Prometheus、Grafana作为监控基础设施。开源开放,定制便利,可复用,可移植,没有厂商锁定。 Pigsty监控系统可独立使用,监控已有PostgreSQL数据库实例,详情参考监控系统部署。 Pigsty提供的监控管理基础设施可亦可用于其他数据库与应用的监控与管理,例如,Pigsty v1.3 引入了对Redis监控的支持。
部署方案
数据库是管理数据的软件,管控系统是管理数据库的软件。
Pigsty内置了一套以Ansible为核心的数据库管控方案,并基于此封装了命令行工具与图形界面。它集成了数据库管理中的核心功能:包括数据库集群的创建,销毁,扩缩容;用户、数据库、服务的创建等。
Pigsty采纳 Infra as Code 的设计哲学,使用类似 Kubernetes 的声明式配置,通过大量可选的配置选项对数据库与运行环境进行描述,并通过幂等的预置剧本自动创建所需的数据库集群,提供私有云般的使用体验。
用户只需要通过配置文件或图形界面描述“自己想要什么样的数据库”,而无需关心Pigsty如何去创建或修改它。Pigsty会根据用户的配置文件清单,在几分钟内从裸机节点上创造出所需的数据库集群。
例如,在三台机器上创建一主两从的数据库集群pg-test
,只需要几行配置与一行命令pgsql.yml -l pg-test
,即可创建出如下一节所介绍的高可用数据库集群。
使用更多参数对数据库集群进行定制
此外,除了PostgreSQL外,从Pigsty v1.3开始,还提供了对Redis部署与监控的支持,更多的数据库类型将在后续逐渐加入。
样例:定制不同类型的Redis集群
高可用集群
Pigsty创建的数据库集群是分布式、高可用的数据库集群。只要集群中有任意实例存活,集群就可以对外提供完整的读写服务与只读服务。
数据库集群中的每个数据库实例在使用上都是幂等的,任意实例都可以通过内建负载均衡组件提供完整的读写服务。数据库集群可以自动进行故障检测与主从切换,普通故障能在几秒到几十秒内自愈,且期间只读流量不受影响。
Pigsty的高可用架构久经生产环境考验,Pigsty使用Patroni + Consul(etcd
为可选)进行故障检测、Fencing、以及自动切换,通过HAProxy、VIP或DNS实现流量的自动切换,以极小的复杂度实现了完整的高可用方案,让主从架构的数据库用出了分布式数据库的体验。
Pigsty允许用户通过配置灵活定义服务,并提供了多种可选的数据库接入模式。 例如Pigsty沙箱默认使用DNS+二层VIP+Haproxy的接入层方案(如上图所示):Haproxy幂等地部署在集群的每个实例上,任何一个或多个Haproxy实例都可以作为集群的负载均衡器,并通过健康检查进行流量分发,对外屏蔽集群成员的区别。 而同样的功能亦可通过四层VIP实现,用户可根据自身基础设施情况灵活选择。
沙箱环境
Pigsty可以利用Vagrant与Virtualbox,在您自己的笔记本电脑上拉起安装所需的虚拟机环境,或通过Terraform,自动向云服务商申请ECS/VPC资源,一键创建,一键销毁。
沙箱环境中的虚拟机具有固定的资源名称与IP地址,非常适于软件开发测试、实验演示。
沙箱配置默认为2核4GB的单节点,IP地址 10.10.10.10,部署有一个名为pg-meta-1
的单机数据库实例。 此外还有四节点版本的完整版沙箱,带有额外三个数据库节点,可用于充分展现Pigsty高可用架构与监控系统的能力。
沙箱所需机器规格
数据分析与可视化
Pigsty带有完善的数据分析工具集,如Jupyterlab,IPython,PostgreSQL,Grafana,Echarts。用户可以将Pigsty单机沙箱用作数据分析与可视化的集成开发环境:使用SQL与Python进行数据处理,并通过Grafana与Echarts快速制作交互式数据应用。
Pigsty自带有两个样例:新冠疫情数据可视化 covid
,全球地表气象站数据查询 isd
。
Demo
Pigsty提供公开的演示环境:http://demo.pigsty.cc 。 您可以在这里浏览Pigsty监控系统提供的功能。
Pigsty部署方案与其他功能则可以通过沙箱环境在本机体验, 教程 【使用Postgres作为Grafana后端数据库】将会以一个具体的例子介绍Pigsty提供的管控功能。
协议
Pigsty基于Apache 2.0协议开源,可以免费用于商业目的。如需额外支持,请联系作者)
改装与衍生需遵守Apache License 2.0的显著声明条款。
系统架构
一套Pigsty部署在架构上分为两个部分:一套基础设施,与多套数据库集群
基础设施与数据库集群都是松耦合关系,移除基础设施不会影响数据库集群的运行(DCS除外)。
DCS用于支持数据库高可用的故障检测与选主,在默认模式停止DCS服务会导致所有数据库集群拒绝写入,因此请务必确保DCS服务的可靠性(增加管理节点数量,或使用外部独立维护的高可用DCS集群)。
同时用于Pigsty部署的节点(物理机,虚拟机,Pod)也分为两种:
管理节点亦可复用为普通数据库节点,在管理节点上默认运行有名为 pg-meta
的PostgreSQL数据库集群。 提供额外的扩展功能:CMDB,巡检报告,扩展应用,日志分析,数据分析与处理等
以Pigsty附带的四节点沙箱环境为例,组件在节点上的分布如下图所示:
沙箱由一个元节点与四个数据库节点组成(元节点也被复用为一个数据库节点),部署有一套基础设施与两套数据库集群。 meta
为元节点,部署有基础设施组件,同时被复用为普通数据库节点,部署有单主数据库集群pg-meta
。 node-1
,node-2
,node-3
为普通数据库节点,部署有数据库集群pg-test
。
基础设施
每一套 Pigsty 部署(Deployment) 中,都需要有一些基础设施,才能使整个系统正常工作。
基础设施通常由专业的运维团队或云厂商负责,但Pigsty作为一个开箱即用的产品解决方案,将基本的基础设施集成至供给方案中。
- 域名基础设施:Dnsmasq(部分请求转发至Consul DNS处理)
- 时间基础设施:NTP
- 监控基础设施:Prometheus
- 报警基础设施:AlterManager
- 可视化基础设施:Grafana
- 本地源基础设施:Yum/Nginx
- 分布式配置存储:etcd/consul
- 元数据库/CMDB:
pg-meta
- 远程节点管控组件:Ansible
- 数据分析可视化套件:Jupyterlab, Echarts等
- 其他:定时任务,巡检脚本,备份脚本,命令行工具,配置GUI,其他扩展应用
基础设施之间的主要关系如下:
- Nginx对外暴露所有Web服务,通过域名进行区分转发。
- Dnsmasq提供环境内的DNS解析服务
- DNS服务为可选,可使用已有DNS服务器
- 部分DNS解析将转交由Consul DNS进行
- Yum Repo是Nginx的默认服务器,为环境中所有节点提供从离线安装软件的能力。
- Grafana是Pigsty监控系统的载体,用于可视化Prometheus与CMDB中的数据。
- Prometheus是监控用时序数据库。
- Prometheus默认通过本地静态文件服务发现获取监控对象,并为其关联身份信息。
- Prometheus可以选择使用Consul服务发现,自动获取监控对象。
- Prometheus从Exporter拉取监控指标数据,进行预计算加工后存入自己的TSDB中。
- Prometheus计算报警规则,将报警事件发往Alertmanager处理。
- Consul Server用于保存DCS的状态,达成共识,提供元数据查询服务。
- NTP服务用于同步环境内所有节点的时间(可选用外部NTP服务)
- Pigsty相关组件:
- 用于支持各种高级功能的MetaDB(亦是一个标准的数据库集群,由Ansible拉起)
- 用于执行剧本,发起控制的Ansible,使用动态Inventory时会访问CMDB
- 定时任务控制器(支持备份,清理,统计,巡检,等特性),会访问CMDB
- 命令行工具 pigsty-cli 会调用Ansible Playbook
基础设施部署于 管理节点 上。一套环境中包含一个或多个管理节点,用于基础设施部署。 除了 分布式配置存储(DCS) 之外,所有基础设施组件都采用副本式部署。
若配置有多个管理节点,管理节点上的DCS(etcd/consul)会共同作为DCS服务器集群。
管理节点
在每套环境中,Pigsty最少需要一个管理节点,该节点将作为整个环境的控制中心。管理节点负责各种管理工作:保存状态,管理配置,发起任务,收集指标,等等。整个环境的基础设施组件,Nginx,Grafana,Prometheus,Alertmanager,NTP,DNS Nameserver,DCS都将部署在管理节点上。
同时,管理节点也将用于部署元数据库 (Consul 或 Etcd),用户也可以使用已有的外部DCS集群。如果将DCS部署至管理节点上,建议在生产环境使用3个管理节点,以充分保证DCS服务的可用性。DCS外的基础设施组件都将以对等副本的方式部署在所有管理节点上。管理节点的数量要求最少1个,推荐3个,建议不超过5个。
管理节点上默认运行的服务如下所示:
组件 | 端口 | 默认域名 | 说明 |
---|---|---|---|
Grafana | 3000 | g.pigsty |
Pigsty监控系统图形界面 |
Prometheus | 9090 | p.pigsty |
监控时序数据库 |
AlertManager | 9093 | a.pigsty |
报警聚合管理组件 |
Consul | 8500 | c.pigsty |
分布式配置管理,服务发现 |
Consul DNS | 8600 | – | Consul提供的DNS服务 |
Nginx | 80 | pigsty |
所有服务的入口代理 |
Yum Repo | 80 | yum.pigsty |
本地Yum源 |
Haproxy Index | 80 | h.pigsty |
所有Haproxy管理界面的访问代理 |
NTP | 123 | n.pigsty |
环境统一使用的NTP时间服务器 |
Dnsmasq | 53 | – | 环境统一使用的DNS域名解析服务器 |
Loki | 3100 | – | 实时日志收集基础设施(选装) |
数据库集群
生产环境的数据库以集群为单位进行组织,集群是一个由主从复制所关联的一组数据库实例所构成的逻辑实体。每个数据库集群是一个自组织的业务服务单元,由至少一个数据库实例组成。
集群是基本的业务服务单元,下图展示了沙箱环境中的复制拓扑。其中pg-meta-1
单独构成一个数据库集群pg-meta
,而pg-test-1
,pg-test-2
,pg-test-3
共同构成另一个逻辑集群pg-test
。
pg-meta-1
(primary)
pg-test-1 -------------> pg-test-2
(primary) | (replica)
|
^-------> pg-test-3
(replica)
下图从数据库集群的视角重新排列pg-test
集群中相关组件的位置。
Pigsty是数据库供给方案,可以按需创建高可用数据库集群。只要集群中有任意实例存活,集群就可以对外提供完整的读写服务与只读服务。Pigsty可以自动进行故障切换,业务方只读流量不受影响;读写流量的影响视具体配置与负载,通常在几秒到几十秒的范围。
在Pigsty中,每个“数据库实例”在使用上是幂等的,采用类似NodePort的方式对外暴露 数据库服务。默认情况下,访问任意实例的5433端口即可访问主库,访问任意实例的5434端口即可访问从库。用户也可以灵活地同时使用不同的方式访问数据库,详情请参考:数据库接入。
数据库节点
数据库节点负责运行数据库实例, 在Pigsty中数据库实例固定采用独占式部署,一个节点上有且仅有一个数据库实例,因此节点与数据库实例可以互用唯一标识(IP地址与实例名)。
一个典型的数据库节点上运行的服务如下所示:
组件 | 端口 | 说明 |
---|---|---|
Postgres | 5432 | Postgres数据库服务 |
Pgbouncer | 6432 | Pgbouncer连接池服务 |
Patroni | 8008 | Patroni高可用组件 |
Consul | 8500 | 分布式配置管理,服务发现组件Consul的本地Agent |
Haproxy Primary | 5433 | 集群读写服务(主库连接池)代理 |
Haproxy Replica | 5434 | 集群只读服务(从库连接池)代理 |
Haproxy Default | 5436 | 集群主库直连服务(用于管理,DDL/DML变更) |
Haproxy Offline | 5438 | 集群离线读取服务(直连离线实例,用于ETL,交互式查询) |
Haproxy service |
543x | 集群提供的额外自定义服务将依次分配端口 |
Haproxy Admin | 9101 | Haproxy监控指标与流量管理页面 |
PG Exporter | 9630 | Postgres监控指标导出器 |
PGBouncer Exporter | 9631 | Pgbouncer监控指标导出器 |
Node Exporter | 9100 | 机器节点监控指标导出器 |
promtail | 9080 | 实时收集Postgres,Pgbouncer,Patroni日志 (选装) |
Consul DNS | 8600 | Consul提供的DNS服务 |
vip-manager | x | 将VIP绑定至集群主库上 |
主要交互关系如下:
- vip-manager通过查询Consul获取集群主库信息,将集群专用L2 VIP绑定至主库节点(默认沙箱接入方案)。
- Haproxy是数据库流量入口,用于对外暴露服务,使用不同端口(543x)区分不同的服务。
- Haproxy的9101端口暴露Haproxy的内部监控指标,同时提供Admin界面控制流量。
- Haproxy 5433端口默认指向集群主库连接池6432端口
- Haproxy 5434端口默认指向集群从库连接池6432端口
- Haproxy 5436端口默认直接指向集群主库5432端口
- Haproxy 5438端口默认直接指向集群离线实例5432端口
- Pgbouncer用于池化数据库连接,缓冲故障冲击,暴露额外指标。
- 生产服务(高频非交互,5433/5434)必须通过Pgbouncer访问。
- 直连服务(管理与ETL,5436/5438)必须绕开Pgbouncer直连。
- Postgres提供实际数据库服务,通过流复制构成主从数据库集群。
- Patroni用于监管Postgres服务,负责主从选举与切换,健康检查,配置管理。
- Patroni使用Consul达成共识,作为集群领导者选举的依据。
- Consul Agent用于下发配置,接受服务注册,服务发现,提供DNS查询。
- 所有使用端口的进程服务都会注册至Consul中
- PGB Exporter,PG Exporter, Node Exporter分别用于暴露数据库,连接池,节点的监控指标
- Promtail是可选的日志收集组件,用于向基础设施Loki发送采集到的PG,PGB,Patroni日志
节点与管理节点交互
以单个 管理节点 和 单个 数据库节点 构成的环境为例,架构如下图所示:
管理节点与数据库节点之间的交互主要包括:
- 数据库集群/节点的域名依赖管理节点的Nameserver进行解析 (可选)。
- 数据库节点软件安装需要用到管理节点上的Yum Repo。
- 数据库集群/节点的监控指标会被管理节点的Prometheus收集。
- 数据库集群中Postgres,Patroni,Pgbouncer的日志会被Promtail收集并发往Loki。
- Pigsty会从管理节点上发起对数据库节点的管理:
- 执行集群创建,扩缩容,实例/集群回收
- 创建业务用户、业务数据库、修改服务、HBA修改;
- 执行日志采集、垃圾清理,备份,巡检等
- 数据库节点的Consul会向管理节点的DCS同步本地注册的服务,并代理状态读写操作。
- 数据库节点会从管理节点(或其他NTP服务器)同步时间
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/232184.html