跳转到主要内容

Pigsty 2.0 展望

最近PostgreSQL 15发布了,Pigsty也开始了紧锣密鼓地跟进,筹划第二个大版本:v2。

Pigsty 2.0版本将引入一系列重大增强与改进。包括安全性,兼容性,易用性的大幅改进,并添加了开箱即用的PITR时间点恢复支持。此版本后,Pigsty中 PostgreSQL的架构状态将趋于完美,Pigsty的缩写也相应修改为 “PostgreSQL in Great STYle”,即 “全盛状态的PostgreSQL”。

Pigsty v2.0 旨在为用户提供一个开源的,更好的云数据库 RDS for PostgreSQL 上位替代。Pigsty v2.0 目前处于ALPHA状态,预计在 PG 15.1, 以及TimescaleDB 支持PG15后正式发布。

图片

亮点

  • 升级至 PG 15, PostGIS 3.3, Citus 11, TimescaleDB 2.8

  • 支持 EL 7,8,9 及兼容发行版(RHEL,CentOS ,Rocky,Oracle,Alma)

  • 开箱即用的原地时间点恢复支持 (pgbackrest)

  • 自适配的节点与数据库配置模板,根据机型规格自动调优

  • 自签名CA,全局 SSL 加密网络流量,更完善的安全机制

  • 独立管理的 etcd 集群、部署剧本、监控面板

  • 新的 MINIO 对象存储服务,部署、监控支持,允许作为备份中心。

  • 开源协议由 Apache License 2.0 变更为 AGPLv3

  • 配置文件大幅精简,用户只需提供身份参数(ID,IP)即可使用。

META

Pigsty v2现在添加了新的 meta_ip 参数,在配置过程中配置为当前节点的首要IP地址,可以在其他变量中引用。例如,当您想使用 备份 Infra 节点时,可以直接通过修改此参数,一次性修改 DNS,NTP,Grafana,Loki 中的引用。

v2在配置时自动检测环境并配置 region (也可以手工制定),Pigsty会根据区域自动设置一些地理相关的变量,例如上游仓库的镜像地址,NTP服务子区域等。 这一功能主要用于在大陆地区避免 GFW 干扰,加快下载速度。

CA

在v2中会默认创建一个自签名的CA,为 etcd,PostgreSQL,以及其他所有需要 SSL 的服务签发证书。该CA会在所有节点被加入信任 CA 名单,以支持 SSL 流量加密。

REPO

Repo定义现在兼容不同的EL版本,将自动根据 EL 版本选择对应的 Repo。现在您可以通过 region 指定使用特定区域的上游仓库,例如 china, europe,加速下载并绕开GFW。

Repo将使用 TimescaleDB 与 Citus 官方的仓库下载插件。

对于 EL8, EL9,将直接使用 AppStream 仓库中的 Redis,与PGDG仓库中的 HAProxy。

将从 Minio 官方下载 minio 与 mcli 软件包。

DCS

在DCS上, etcd,consul 服务将默认启用SSL,只有管理节点才可以使用命令行访问 DCS。该特性可以确保DCS网络流量不受窃听影响,且将集群状态修改的权限收拢至管理节点上。

ETCD将取代Consul成为 Pigsty 默认使用的DCS 服务。因为它提供了轻量的实现,少了 Agent 这个额外失效点。且因为 Kubernetes 的存在变得更为流行,沉淀有更多运维经验。

V2将提供专用的剧本 etcd.yml 以部署 ETCD 集群。并提供了专门的ETCD监控面板。

Node

新增的 node_id 角色,将统一收集节点信息,并配置节点的身份参数。

所有 nodes 名称 现在统一收敛至 node 单数形式。

Chrony 将成为默认的 NTP 服务,替代 NTPD。

Tuned模板中,将自动以HugePage的形式分配 26% 的内存专供PostgreSQL使用,提高性能。

一个专用的 node_remove 角色现在负责处理从Pigsty移除节点的工作。

主机节点默认使用的模板从 tiny 修改为 oltp

PostgreSQL

在PostgreSQL上,v2将默认启用 SSL 支持,允许使用加密连接访问 PostgreSQL 服务,以加密数据库通信避免窃听。/pg/cert 目录用于盛放服务端证书,用于加密数据库与连接池的流量,访问ETCD服务。

修改用户密码的操作记录现在将从PG日志中移除,以避免意外泄漏。

新的 scram-sha-256 将取代 md5,成为Pigsty中PG默认的密码认证方式,以提高安全性。

新增的 monitor.pgbouncer_auth 函数用于连接池的Auth Query,仅超级用户可本地访问。

默认模板中创建了file_fdw,并添加了一个名为 fsforeign server,基于此提供了几张外部表用于展示 Patroni集群信息与配置,以及Pgbackrest备份信息,仅监控用户可以访问。

现在,/pg/conf 将收拢 Postgres,Patroni,Pgbouncer,pgbackrest, Haproxy,VipManager的配置文件,创建快捷软链,便于集中访问与调整。

现在,/pg/log 将收拢 Postgres,Patroni,Pgbouncer,pgbackrest 的日志,便于集中访问与调整。

PostGIS,TimescaleDB,Citus的软件包从 pg_packages 移动到 pg_extensions,这样当某个操作系统发行版(例如EL9)缺少相关插件时,用户只需要修改 pg_extensions 变量即可。

Patroni

Patroni现在可以通过 pg_rpopg_rto 参数,控制Failover触发的条件,让用户有机会精确权衡可用性与一致性的具体阈值。当然,crit.yml 模板仍然会强制使用 pg_rpo = 0 确保数据0丢失。

Patroni 所有不安全的API (例如重启集群,Failover)现在都限制了访问IP来源,您只能从管理节点执行此操作。但常规的信息查询,健康检查API 仍然不受影响。此外,Patroni现在拥有一组独立的管理用户名与密码参数,您必须使用HTTP BASIC AUTH指明用户名密码才可以调用不安全的API。

Patroni 现在可以对 REST API 启用 SSL,默认不启用,因为健康检查是一个很频繁的操作。

现在,一个专用的 pg_id 角色将用于收集数据库节点的基本信息(CPU,内存,磁盘等),Patroni 标签中添加了机器配置规格的信息,可直观浏览集群规格。

现在 Patroni 的配置模板收敛至 oltp , olap, crit, tiny 四种,每一种根据经验调优规则,自动适配从 1核到几百核几百GB内存的机型。

Pgbouncer

在Pgbouncer连接池上, SSL也得到了支持。

v2允许用户通过 auth_query 的方式,对于Pgbouncer配置中不存在的用户,自动从 PostgreSQL 数据库中查询并进行认证。

提供了新的快捷命令 pgb-route ,用于在故障或迁移时快速切换 Pgbouncer 的目标流量。

Pgbouncer 现在默认使用 session pooling模式,以提高应用兼容性。

Pgbackrest

v2 新增了 PGBACKREST 支持,默认在集群主节点本地创建一个备份仓库,用于存储归档与冷备份。

默认情况下,PGBACKREST将在集群的所有实例上初始化一个仓库,但仅使用主库上的仓库用于WAL归档与基础备份。您可以通过 pgbackrest_repo 参数,使用专用的备份服务器或S3兼容服务作为集中的冷备份存储仓库。

Pigsty添加了一系列开箱即用的配置与快捷命令,能让您自动回复到过去一段时间的任意时间点。

Promtail

现在您可以指定 Postgres, Pgbouncer, Pgbackrest, Patroni 的日志位置,默认值收拢至 /pg/log/<p*>。Promtail 与其他日志相关的命令和快捷方式会自动适配这些日志位置。

Makefile

添加了自动构建相关的快捷方式。

添加了写入心跳记录,健康检查的快捷方式,用于测试 PITR。

添加了 Vagrant 模板管理的快捷方式

Deploy

添加了 AWS 的 Terraform 4节点部署模板。

添加了几种新的 Vagrant 模板,可以测试 EL7,8,9的部署,并自动构建对应平台的离线软件包。

添加了新的 bootstrap 脚本,替代原有的 downloadconfigure 的部分功能。该脚本负责下载软件包,配置本地Repo,并最终确保本机 Ansible 可用。现有 configure 脚本现在只负责监测当前环境,生成对应的 pigsty.yml 配置文件。

Packages

现在Pigsty的源码包与离线软件包将带有版本号,离线软件包还将带有操作系统平台标识(el7.x86_64, el8.x86_64, el9.x86_64)。以便在未来兼容其他架构(arm)与操作系统发型版(ubuntu)。

  • PostgreSQL 14.5 / PostgreSQL 15.0

  • Patroni 2.1.4

  • Pgbouncer 1.17

  • HAProxy 2.6.6

  • PostGIS 3.3

  • Citus 11.1:彻底开源,带有完整的分片调整功能。

  • TimescaleDB 2.8

  • Prometheus 2.39

  • Loki & Promtail 2.6.1

  • Grafana 9.2.3

  • Node Exporter 1.4

  • Consul v13.3

  • ETCD 3.5.5

Misc

现在 Pigsty 将使用带有官方签名的 Echarts Grafana面板,支持最新的 Echarts 5 与 Echarts GL。

如果您有任何想法,需求,功能建议,欢迎在 Github 提 https://github.com/Vonng/pigsty/issues 或加入 Pigsty 交流群讨论。