This is the multi-page printable view of this section. Click here to print.
版本发布
- v3.1:Supabase一键自建,PG17上位,ARM与Ubuntu24支持,MinIO改进
- v3.0:海量扩展,插拔内核,RDS服务
- v2.7:集异璧之大成
- v2.6:PG 踢馆 OLAP
- v2.5:Ubuntu & PG16
- v2.4:监控云数据库
- v2.3:丰富应用生态
- v2.2:监控全面翻新
- v2.1:向量+PG全系支持!
- v2.0:开源RDS PG替代
- v1.5.0 发布注记
- v1.4.0 发布注记
- v1.3.0 发布注记
- v1.2.0 发布注记
- v1.1.0 发布注记
- v1.0.0 发布注记
- v0.9.0 发布注记
- v0.8.0 发布注记
- v0.7.0 发布注记
- v0.6.0 发布注记
- v0.5.0 发布注记
- v0.4.0 发布注记
- v0.3.0 发布注记
v3.1:Supabase一键自建,PG17上位,ARM与Ubuntu24支持,MinIO改进
随着前天 PostgreSQL 17.2 的发布,Pigsty 也立即跟进了 v3.1 版本。 在这个版本中,PostgreSQL 17 被提升成为默认使用的大版本,近 340 个 PG 扩展插件开箱即用。
此外,Pigsty 3.1 还提供了一键 自建 Supabase 的能力,改进了 MinIO 对象存储的使用最佳实践。 与此同时,Pigsty还提供了ARM64 架构的初步支持,并且支持了新发布的 Ubuntu 24.04 大操作系统发行版大版本。 最后,这个版本提供了一系列开箱即用的场景化模板,统一了不同操作系统发行版使用配置文件,极大简化了配置管理工作。
自建Supabase
Supabase 是一个开源的 Firebase 替代,对 PostgreSQL 进行了封装,并提供了认证,开箱即用的 API,边缘函数,实时订阅,对象存储,向量嵌入能力。 Supabase 的口号是:“花个周末写写,随便扩容至百万”。在试用之后,我觉得此言不虚。 这是一个低代码的一站式后端平台,能让你几乎告别大部分后端开发的工作,只需要懂数据库设计与前端即可快速出活了!
小微规模(4c8g)内的 Supabase 云服务极有性价比,堪称赛博菩萨。那 Supabase 云服务这么香,为什么要自建呢?有几个原因:
最直观的原因是是《云计算泥石流》中说过的:云数据库服务只要稍微上一点儿规模,成本就很容易爆炸。而且考虑到当下本地 NVMe 盘的无敌性价比,自建的成本与性能优势是显而易见的。
另一个重要的原因是 Supabase 云服务的功能受限 —— 与RDS逻辑相同,很多强力扩展出于多租户的安全问题考虑是不太可能在云端提供的 —— supabase 云服务中有64个可用扩展,但使用 Pigsty 自建 supabase 时,你可以拥有全部 340 个。 此外,Supabase 官方使用 PostgreSQL 15 作为底层数据库,而在 Pigsty 中,你可以使用 PG 14 - 17 的任意版本,运行在 EL / Debian / Ubuntu 主流 Linux 操作系统裸机 上而无需虚拟化支持,充分地利用现代硬件的性能与成本优势。
我发现身边很多创业出海公司都在使用 Supabase,而其中一些的规模确实已经达到了需要自建的状态,而且有人愿意付费咨询来做这件事了。 所以 Pigsty 早在去年9月发布的 v2.4 就支持自建 Supabase (所需的 PostgreSQL)了。但那毕竟还涉及到一些手工操作,比如配置 PG 集群,拉起 Docker。 而在这个版本中,我们将体验优化到了这种状态 —— 一台新装操作系统的裸机,执行以下几条命令之后,一套新鲜的 Supabase 就出炉了!
这两天我会准备一些关于 自建 Supabase 最佳实践 的教程,敬请期待。
PostgreSQL 17
在《PG12过保,PG17上位》中,我们已经详细介绍了 PostgreSQL 17 的新特性与改进。
其中最令人欣慰的莫过于白给的性能优化了:PostgreSQL 17 据说在写入性能上有了显著提升。我找了一台物理机测试了一下,确实不错。 相比与三年前针对 PostgreSQL 14 的测试结果《PostgreSQL到底有多强》,写入确实有不小的提升。
例如,以前 PG 14 在标准配置下,PG 的 WAL 写入吞吐量在 110 MB/s 附近,这是软件的瓶颈,不是硬件的。 而在 PG 17 下,这个数字能达到 180 MB/s。当然,把安全开关都关掉后性能还能翻几番,但体面评测就不玩那些作弊手段了
Pigsty 3.1 + PostgreSQL 17 的性能回归测试,详细的性能评测报告将会在最近几天发出,敬请期待。
340个扩展插件
Pigsty 3.1 版本的另一个亮点特性是,这个版本中提供了 340 个 PostgreSQL 扩展插件。 这是一个非常恐怖的数字了,而且这是在我进行审慎精选踢出十几个“扩展”后的结果,不然按照本期规划应该能到 360 个了。
为了实现这一目标,我建设了一个 YUM / APT 仓库,针对 EL 8/9, Ubuntu 22.04/24.04, Debian 12 这几个主流操作系统发行版, 以及 PG 12 - 17 这六个大版本提供开箱即用的扩展 RPM/DEB 包。目前提供 x86_64 的包,ARM64 和其他架构还在路上,目前仅对专业用户按需提供。 当然除了仓库之外,更重要的是我还维护了一个 扩展目录,详细记录了每个扩展的元数据, OS/DB 版本可用性,以及一些使用说明,方便用户找到自己需要的扩展。
Pigsty 的扩展仓库基于原生的操作系统包管理器,公开共享,你不一定非要使用 Pigsty 才能按照这些扩展。 你完全可以在现有系统,Dockerfile中添加此仓库并通过 yum/apt install 的方式安装这些扩展。 目前我很欣慰的是有一个比较流行的开源集群部署项目 postgresql-cluster 已经默认用起了这个仓库,作为安装流程的一部分,向用户提供并分发扩展插件。
当然,更多细节,在《PostgreSQL神功大成,最全扩展仓库》中对此已经有过介绍。 目前使用 Rust + pgrx 开发扩展的新项目不少,Pigsty 收录了 23 个 Rust 扩展。 如果你有好的扩展推荐,欢迎告诉我,我会考察测试后,尽快将其加入到仓库中。 如果你是 PostgreSQL 扩展作者,我们也欢迎将你的扩展提交到 Pigsty 仓库中,我们可以帮助您打包分发,解决最后一公里的交付问题。
Ubuntu 24.04 支持
Ubuntu 24.04 noble 已经发布半年了,已经开始有一些用户在生产环境中真实使用它了。 因此,Pigsty v3.1 版本也提供了对 Ubuntu 24.04 的正式支持。
尽管如此,作为一个比较新的系统,Ubuntu 24.04 相比 22.04 还有一些缺陷,例如 citus
和 topn
扩展在整个系统上是缺位的,而 timescaledb_toolkit
目前还没有提供 u24 x86_64 的支持。
但总体来说,除了这些个例外,绝大部分扩展都已经支持 Ubuntu 24.04 了。因此将其纳入 Pigsty 的主要支持范围是没有问题的。
相应地,我们将 Ubuntu 20.04 focal 从 Pigsty 主力支持的操作系统中逐出,虽然 Ubuntu 20.04 在明年五月份才正式 EOL。 但是因为它的一些软件缺漏与依赖版本问题比较严重(PostGIS),我非常乐意能将其提早淘汰,踢出开源版本的支持范畴。 当然,理论上您还是可以继续在 Ubuntu 20.04 上安装并使用,而且在我们的订阅服务中也继续提供对 Ubuntu 20.04 的支持。
因此,目前 Pigsty 支持的主流操作系统发行版为:EL 8/9, Ubuntu 22.04 / Ubuntu 24.04, 以及 Debian 12 这五个。 我们会针对这五个操作系统发行版提供最新的软件包,完整的扩展插件。
Code | OS Distro | x86_64 |
PG17 | PG16 | PG15 | PG14 | PG13 | PG12 | Arm64 |
PG17 | PG16 | PG15 | PG14 | PG13 | PG12 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
EL9 | RHEL 9 / Rocky9 / Alma9 | el9.x86_64 |
el9.arm64 |
||||||||||||
EL8 | RHEL 8 / Rocky8 / Alma8 / Anolis8 | el8.x86_64 |
el8.arm64 |
||||||||||||
U24 | Ubuntu 24.04 (noble ) |
u24.x86_64 |
u24.arm64 |
||||||||||||
U22 | Ubuntu 22.04 (jammy ) |
u22.x86_64 |
u22.arm64 |
||||||||||||
D12 | Debian 12 (bookworm ) |
d12.x86_64 |
d12.arm64 |
||||||||||||
D11 | Debian 11 (bullseye ) |
d12.x86_64 |
d11.arm64 |
||||||||||||
U20 | Ubuntu 20.04 (focal ) |
d12.x86_64 |
u20.arm64 |
||||||||||||
EL7 | RHEL7 / CentOS7 / UOS … | d12.x86_64 |
el7.arm64 |
= 首要版本支持; = 配置可选支持; = 过期版本商业支持
ARM 支持
ARM 架构最近不断攻城略地,尤其是在云计算领域,ARM 服务器的市场份额正在逐渐增加。早在俩年前,就有用户提出对 ARM 架构支持的需求。 其实 Pigsty 在早先做 “国产化系统” 适配的时候,就已经有一个 ARM 支持了。但是在开源版本中提供 ARM64 架构支持,v3.1 版本是第一次。
当然,目前的版本,ARM 还处在一个 Beta 状态:功能是有了,也能跑通,但是到底效果怎么样还是要跑一段时间,有了反馈才知道。
目前 Pigsty 的主体功能已经都完成适配了,比如 Grafana / Prometheus 全家桶这些我也都打好了 ARM 的软件包, 尚未支持的部分主要是 PG 扩展 —— 特指由 Pigsty 维护的 140 个扩展 —— 目前还没有提供 ARM 支持,已经在做了。 不过,如果你用到的扩展都是 PGDG 中已经提供的(比如 postgis, pgvector 这种),那么没有问题。
目前,ARM 版本在 EL9,Debian 12,Ubuntu 22.04 上运行状态良好。 EL8 有一些PGDG官方包缺失,Ubuntu24有个别扩展缺失,所以目前还不建议在这两个系统上使用 ARM 版本。
我准备将 ARM 试点运行一两个小版本,当扩展齐全之后,我会将其标记为 GA。欢迎各位朋友试用 ARM 版本并向我提出反馈意见。
配置简化
另一个在 Pigsty v3.1 中进行的显著改进是配置简化,如何管理不同操作系统发行版,大小版本的软件包差异一直是一个比较让人头疼的问题。
比如,因为很多操作系统发行版上的包名,可用软件集合其实是有一些区别的,所以在此前的版本里,Pigsty 会根据每个操作系统发行版生成一个独立的配置文件。 但是这样很快就会出现排列组合爆炸,比如,Pigsty 默认提供十几种场景下的配置模板,如果每个模板都要针对 5 - 7 个 操作系统版本生成,那么总数就要爆炸了。
但计算机科学中的任何问题都可以通过增加一个间接层来解决,而这个问题呢也也不例外。在 v3.1 版本中,Pigsty 引入了一个新的配置文件 package_map
,用于定义软件包的别名。
然后针对每个操作系统发行版,我们都会生成一个 node_id/vars
配置文件,将固定的包别名翻译为操作系统上具体的软件包列表。
比如,Supabase 自建模板中启用了几十个扩展,用户只需要提供扩展的名字就可以了,至于芯片架构,操作系统版本,PG版本,包名之类的细节差异全都在内部处理好了。
pg_extensions: # extensions to be installed on this cluster
- supabase # essential extensions for supabase
- timescaledb postgis pg_graphql pg_jsonschema wrappers pg_search pg_analytics pg_parquet plv8 duckdb_fdw pg_cron pg_timetable pgqr
- supautils pg_plan_filter passwordcheck plpgsql_check pgaudit pgsodium pg_vault pgjwt pg_ecdsa pg_session_jwt index_advisor
- pgvector pgvectorscale pg_summarize pg_tiktoken pg_tle pg_stat_monitor hypopg pg_hint_plan pg_http pg_net pg_smtp_client pg_idkit
举个例子,如果你想下载安装 PG 16 的内核与扩展,以前你需要把下载列表和安装列表里的包全换成16的版本,现在你只需要简单的修改一个 pg_version
参数就行了。
最后的效果非常好,基本实现了所有操作系统发行版都能使用相同的配置文件进行安装,将不同系统的差异与管理复杂度都隐藏在了内部。
基础设施改进
除了功能上的改进之外,我们还在不断改善基础设施。例如在 v3.0 引入的安装 MSSQL 兼容的 Babelfish 内核,Oracle 兼容的 IvorySQL 内核,以及国产 PolarDB 内核,都要求用户使用一个外部仓库在线安装。
现在,Pigsty 官方仓库直接提供了 Babelfish,IvorySQL,PolarDB 等内核的镜像仓库,安装这些“异国风味”PG替换内核变得更加简单了 —— 现在的效果就是,不需要什么额外的配置,使用预置模板一键安装即可。
此外,我们还维护着 Prometheus 与 Grafana 的 YUM/ATP x AMD/ARM 软件仓库,并实时跟进这些可观测性组件的版本。在这次升级中,Prometheus 升级到了 v3 大版本,而 VictoriaLogs 也正式发布了 v1 版本。 总的来说,如果你需要用到这些监控软件,Pigsty 的仓库也能帮到您。
MinIO 改进
最后我们来聊一下开源对象存储自建,MinIO。 Pigsty 将 MinIO 用作 PostgreSQL 的备份存储,与 Supabase 的底层存储服务, 并致力于将 MinIO 的部署门槛压低到有手就行 —— Deploy in minutes, Scale to millions。
在我们最早内部使用 MinIO 的时候,还是 0.x 的版本,而从那时到现在 MinIO 也有了很大的进步。 当年我们用 MinIO 存 25 PB 数据,因为 MinIO 不支持在线扩容,所以只能拆出了七八个独立集群依次使用。 而现在 MinIO 虽然仍然不能在线修改磁盘/节点数量,但可以通过添加存储池 - 迁移 - 淘汰旧存储池的方式实现平滑扩容了。
在 Pigsty v3.1 中,我重新通读了 MinIO 的文档,并根据新版本的特性调整了 MinIO 的最佳实践配置模板与SOP。 除了之前的 MinIO 单机单盘,单机多盘,多机多盘模式,我们还支持了多存储池部署模式,并提供了 Pigsty 中 MinIO 的管理预案 —— 包括磁盘故障,节点故障的处理,集群上下线,存储扩缩容,使用 VIP 与 HAProxy 对外提供高可用接入的方案,全都有据可查,几行命令就能轻松解决。
对象存储是云上的基石性服务,MinIO 作为开源对象存储的代表,其性能与功能都非常优秀,更重要的是,它是一个云中立的开源软件。
您也可以使用 MinIO 来替代云上的对象存储服务,正如《DHH:下云超预期,能省一个亿》所述, 他们云上有 10PB 的对象存储(列表价每年300万),SavingPlan打折后每年130万美元,合 93万人民币 / PB·年。 而 1.2 PB的专用存储服务器一台十几万人民币上下,三副本冗余, 整几台套上MinIO就是对象存储了。 再加上网电运维,整个五年TCO 也超不过云上一年的折后消费,所以这里蕴含着惊人的降本增效潜力。 如果你的的业务在大量使用对象存储,那么本地 MinIO 自建 + Cloudflare 可能是非常值得考虑的一个更优解。
服务体系
Pigsty v3.1 达到了一个我比较满意的状态,接下来我的工作重心会放在服务体系的构建上。
Pigsty 是个开源免费的软件,它已经解决了 PG 运维中会遇到的绝大多数问题。如果你自己是开源老司机,真遇上疑难杂症自己也可以解决。 但是对于一些大型企业用户,特别是那些没有专职 DBA 的企业来说,还是需要有人来“兜底”的,毕竟,开源软件的核心就是 NO WARRANTY。
正如《PolarDB20块好兄弟:数据库到底应该卖什么价》中所述,体面数据库服务其实是有市场公允价的,一般在 1~2万人民币 / vCPU·年。 不论你是去买 Oracle 的服务支持,还是 EDB,Fujitsu 的开源PG服务,或者是 AWS 的 RDS / Aurora ,其实都是这个价位。
之前我定的服务价格太低,已经引起海内外同行微词 —— 乃这不是破坏市场,低价倾销吗?你作为国内顶级PG专家定这个价还公开,让我们怎么办。
所以这次我也重新调整了一下定价体系,基本锚定业界平均定价水平。反正这也是你情我愿的双向选择,欢迎有兴趣的朋友们选购专业服务,打钱支持!新人新办法,老客老价格。
v3.1.0
亮点特性
- PostgreSQL 17 现已成为默认使用的主要版本 (17.2)
- Ubuntu 24.04 系统支持
- arm 架构支持:EL9, Debian12, Ubuntu 22.04
- Supabase 一键自建,新的剧本
supabase.yml
- MinIO 最佳实践改进,配置模板与 Vagrant 模板
- 提供了一系列开箱即用的配置模板与文档说明。
- 允许在
configure
过程中使用-v|--version
指定使用的 PG 大版本。 - 调整 PG 默认插件策略:默认安装
pg_repack
,wal2json
以及pgvector
三个关键扩展。 - 大幅简化
repo_packages
本地软件源构建逻辑,允许在repo_packages
中使用软件包组别名 - 提供了 WiltonDB,IvorySQL,PolarDB 的软件源镜像,简化三者的安装。
- 默认启用数据库校验和。
- 修复 ETCD 与 MINIO 日志面板
软件升级
- PostgreSQL 17.2, 16.6, 15.10, 14.15, 13.18, 12.22
- PostgreSQL 扩展版本变动请参考:https://ext.pigsty.io
- Patroni 4.0.4
- MinIO 20241107 / MCLI 20241117
- Rclone 1.68.2
- Prometheus: 2.54.0 -> 3.0.0
- VictoriaMetrics 1.102.1 -> 1.106.1
- VictoriaLogs v0.28.0 -> 1.0.0
- vslogcli 1.0.0
- MySQL Exporter 0.15.1 -> 0.16.0
- Redis Exporter 1.62.0 -> 1.66.0
- MongoDB Exporter 0.41.2 -> 0.42.0
- Keepalived Exporter 1.3.3 -> 1.4.0
- DuckDB 1.1.2 -> 1.1.3
- etcd 3.5.16 -> 3.5.17
- tigerbeetle 16.8 -> 0.16.13
API变更
repo_upstream
: 针对每个具体的操作系统发行版生成默认值:roles/node_id/vars
repo_packages
: 允许使用package_map
中定义的别名。repo_extra_packages
: 新增未指定时的默认值,允许使用package_map
中定义的别名。pg_checksum
: 默认值修改为true
,默认打开。pg_packages
: 默认值修改为:postgresql, wal2json pg_repack pgvector, patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
pg_extensions
: 默认值修改为空数组[]
。infra_portal
: 允许为home
服务器指定path
,替代默认的本地仓库路径nginx_home
(/www
)
v3.0:海量扩展,插拔内核,RDS服务
亮点特性
扩展大爆炸:
Pigsty v3 提供了史无前例的 340 个可用扩展插件。 包括 121 个扩展 RPM包 与 133 个 DEB包,数量已经超过了 PGDG 官方仓库提供的扩展数量总和(135 RPM/ 109 DEB)。 而且,Pigsty 还将EL系统与Debian生态的独有PG扩展插件相互移植,实现了两大发行版的插件生态大对齐。
- timescaledb periods temporal_tables emaj table_version pg_cron pg_later pg_background pg_timetable
- postgis pgrouting pointcloud pg_h3 q3c ogr_fdw geoip #pg_geohash #mobilitydb
- pgvector pgvectorscale pg_vectorize pg_similarity pg_tiktoken pgml #smlar
- pg_search pg_bigm zhparser hunspell
- hydra pg_lakehouse pg_duckdb duckdb_fdw pg_fkpart pg_partman plproxy #pg_strom citus
- pg_hint_plan age hll rum pg_graphql pg_jsonschema jsquery index_advisor hypopg imgsmlr pg_ivm pgmq pgq #rdkit
- pg_tle plv8 pllua plprql pldebugger plpgsql_check plprofiler plsh #pljava plr pgtap faker dbt2
- prefix semver pgunit md5hash asn1oid roaringbitmap pgfaceting pgsphere pg_country pg_currency pgmp numeral pg_rational pguint ip4r timestamp9 chkpass #pg_uri #pgemailaddr #acl #debversion #pg_rrule
- topn pg_gzip pg_http pg_net pg_html5_email_address pgsql_tweaks pg_extra_time pg_timeit count_distinct extra_window_functions first_last_agg tdigest aggs_for_arrays pg_arraymath pg_idkit pg_uuidv7 permuteseq pg_hashids
- sequential_uuids pg_math pg_random pg_base36 pg_base62 floatvec pg_financial pgjwt pg_hashlib shacrypt cryptint pg_ecdsa pgpcre icu_ext envvar url_encode #pg_zstd #aggs_for_vecs #quantile #lower_quantile #pgqr #pg_protobuf
- pg_repack pg_squeeze pg_dirtyread pgfincore pgdd ddlx pg_prioritize pg_checksums pg_readonly safeupdate pg_permissions pgautofailover pg_catcheck preprepare pgcozy pg_orphaned pg_crash pg_cheat_funcs pg_savior table_log pg_fio #pgpool pgagent
- pg_profile pg_show_plans pg_stat_kcache pg_stat_monitor pg_qualstats pg_store_plans pg_track_settings pg_wait_sampling system_stats pg_meta pgnodemx pg_sqlog bgw_replstatus pgmeminfo toastinfo pagevis powa pg_top #pg_statviz #pgexporter_ext #pg_mon
- passwordcheck supautils pgsodium pg_vault anonymizer pg_tde pgsmcrypto pgaudit pgauditlogtofile pg_auth_mon credcheck pgcryptokey pg_jobmon logerrors login_hook set_user pg_snakeoil pgextwlist pg_auditor noset #sslutils
- wrappers multicorn mysql_fdw tds_fdw sqlite_fdw pgbouncer_fdw mongo_fdw redis_fdw pg_redis_pubsub kafka_fdw hdfs_fdw firebird_fdw aws_s3 log_fdw #oracle_fdw #db2_fdw
- orafce pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pgmemcache #pg_dbms_job #wiltondb
- pglogical pgl_ddl_deploy pg_failover_slots wal2json wal2mongo decoderbufs decoder_raw mimeo pgcopydb pgloader pg_fact_loader pg_bulkload pg_comparator pgimportdoc pgexportdoc #repmgr #slony
- gis-stack rag-stack fdw-stack fts-stack etl-stack feat-stack olap-stack supa-stack stat-stack json-stack
换内核:
Pigsty v3 允许您更换 PostgreSQL 内核,目前支持了 SQL Server 兼容的 Babelfish (线缆协议级仿真),Oracle 兼容的 IvorySQL,以及 PG 版的 RAC PolarDB;此外,现在自托管 Supabase 也在 Debian 系统中可用。 您可以让 Pigsty 中带有 HA,IaC,PITR,监控的生产级 PostgreSQL 集群仿真 MSSQL (via WiltonDB),Oracle via (IvorySQL),Oracle RAC (via PolarDB), MongoDB(via FerretDB),以及 Firebase (via Supabase)。
企业版:
我们现在提供 Pigsty Pro 专业版,在开源版的功能基础上提供增值服务。专业版提供额外的功能模块:MSSQL,Oracle,Mongo,K8S,Victoria,Kafka,TigerBeetle 等……,并提供更广泛的 PG 大版本、操作系统、芯片架构的支持。 提供针对全系操作系统精准小版本定制的离线安装包,以及 EL7,Debian 11,Ubuntu 20.04 等过保老系统的支持;此外,专业版还提供内核可插拔定制服务,并对PolarDB PG/Oracle 的原生部署、监控管控支持以满足“国产化”需要。
使用以下命令快速安装:
curl -fsSL https://repo.pigsty.cc/get | bash
cd ~/pigsty; ./bootstrap; ./configure; ./install.yml
重大变更
本次 Pigsty 发布调整大版本号,从 2.x 升级到 3.0,带有一些重大变更:
-
首要支持操作系统调整为:EL 8 / EL 9 / Debian 12 / Ubuntu 22.04
- EL7 / Debian 11 / Ubuntu 20.04 等系统进入弃用阶段,不再提供支持
- 有在这些系统上运行需求的用户请考虑我们的 订阅服务
-
默认使用在线安装,不再提供离线软件包,从而解决操作系统小版本兼容性问题。
bootstrap
过程现在不再询问是否下载离线安装包,但如果/tmp/pkg.tgz
存在,仍然会自动使用离线安装包。- 有离线安装需求请自行制作离线软件包或考虑我们的 订阅服务
-
Pigsty 使用的上游软件仓库进行统一调整,地址变更,并对所有软件包进行 GPG 签名与校验
- 标准仓库:
https://repo.pigsty.io/{apt/yum}
- 国内镜像:
https://repo.pigsty.cc/{apt/yum}
- 标准仓库:
-
API 参数变更与配置模板变更
- EL 系与 Debian 系配置模板现在收拢统一,有差异的参数统一放置于
roles/node_id/vars/
目录进行管理。 - 配置目录变更,所有配置文件模板统一放置在
conf
目录下,并分为default
,dbms
,demo
,build
四大类。
- EL 系与 Debian 系配置模板现在收拢统一,有差异的参数统一放置于
其他新特性
- PG OLAP 分析能力史诗级加强:DuckDB 1.0.0,DuckDB FDW,以及 PG Lakehouse,Hydra 移植至 Deb 系统中。
- PG 向量检索与全文检索能力加强:Vectorscale 提供 DiskANN 向量索引,Hunspell 分词字典支持,pg_search 0.9.1。
- 帮助 ParadeDB 解决了软件包构建问题,现在我们在 Debian/Ubuntu 上也能提供这一扩展。
- Supabase 所需的扩展在 Debian/Ubuntu 上全部可用,Supabase 现在可在全OS上自托管。
- 提供了场景化预置扩展堆栈的能力,如果您不知道安装哪些扩展,我们准备了针对特定应用场景的扩展推荐包(Stack)。
- 针对所有 PostgreSQL 生态的扩展,制作了元数据表格、文档、索引、名称映射,针对 EL与Deb 进行对齐,确保扩展可用性。
- 为了解决 DockerHub 被 Ban 的问题,我们加强了
proxy_env
参数的功能并简化其配置方式。 - 建设了一个专用的新软件仓库,提供了 12-17 版本的全部扩展插件,其中,PG16的扩展仓库会在 Pigsty 默认的版本中实装。
- 现有软件仓库升级改造,使用标准的签名与校验机制,确保软件包的完整性与安全性。APT 仓库采用新的标准布局通过
reprepro
构建。 - 提供了 1,2,3,4,43 节点的沙箱环境:
meta
,dual
,trio
,full
,prod
,以及针对 7 大 OS Distro 的快捷配置模板。 - PG Exporter 新增了 PostgreSQL 17 与 pgBouncer 1.23 新监控指标收集器的定义,与使用这些指标的 Grafana Panel
- 监控面板修缮,修复了各种问题,为 PGSQL Pgbouncer 与 PGSQL Patroni 监控面板添加了日志仪表盘。
- 使用全新的
cache.yml
Ansible 剧本,替换了原有制作离线软件包的bin/cache
与bin/release-pkg
脚本。
API变更
- 新参数选项:
pg_mode
现在支持的模式有pgsql
,citus
,gpsql
,mssql
,ivory
,polar
,用于指定 PostgreSQL 集群的模式pgsql
: 标准 PostgreSQL 高可用集群citus
: Citus 水平分布式 PostgreSQL 原生高可用集群gpsql
: 用于 Greenplum 与 GP 兼容数据库的监控(专业版)mssql
: 安装 WiltonDB / Babelfish,提供 Microsoft SQL Server 兼容性模式的标准 PostgreSQL 高可用集群,线缆协议级支持,扩展不可用ivory
: 安装 IvorySQL 提供的 Oracle 兼容性 PostgreSQL 高可用集群,Oracle语法/数据类型/函数/存储过程兼容,扩展不可用 (专业版)polar
: 安装 PolarDB for PostgreSQL (PG RAC)开源版本,提供国产化数据库能力支持,扩展不可用。(专业版)
- 新参数:
pg_parameters
,用于在实例级别指定postgresql.auto.conf
中的参数,覆盖集群配置,实现不同实例成员的个性化配置。 - 新参数:
pg_files
,用于将额外的文件拷贝到PGDATA数据目录,针对需要License文件的商业版PostgreSQL分叉内核设计。 - 新参数:
repo_extra_packages
,用于额外指定需要下载的软件包,与repo_packages
共同使用,便于指定OS版本独有的扩展列表。 - 参数重命名:
patroni_citus_db
重命名为pg_primary_db
,用于指定集群中的主要数据库(在 Citus 模式中使用) - 参数强化:
proxy_env
中的代理服务器配置会写入 Docker Daemon,解决科学上网问题,configure -x
选项会自动在配置中写入当前环境中的代理服务器配置。 - 参数强化:
repo_url_packages
中的repo.pigsty.io
会在区域为中国时自动替换为repo.pigsty.cc
,解决科学上网问题,此外,现在可以指定下载后的文件名称。 - 参数强化:
pg_databases.extensions
中的extension
字段现在可以支持字典与扩展名字符串两种模式,字典模式提供version
支持,允许安装特定版本的扩展。 - 参数强化:
repo_upstream
参数如果没有显式覆盖定义,将从rpm.yml
或deb.yml
中定义的repo_upstream_default
提取对应系统的默认值。 - 参数强化:
repo_packages
参数如果没有显式覆盖定义,将从rpm.yml
或deb.yml
中定义的repo_packages_default
提取对应系统的默认值。 - 参数强化:
infra_packages
参数如果没有显式覆盖定义,将从rpm.yml
或deb.yml
中定义的infra_packages_default
提取对应系统的默认值。 - 参数强化:
node_default_packages
参数如果没有显式覆盖定义,将从rpm.yml
或deb.yml
中定义的node_packages_default
提取对应系统的默认值。 - 参数强化:
pg_packages
与pg_extensions
中的扩展现在都会从rpm.yml
或deb.yml
中定义的pg_package_map
执行一次查找与翻译。 - 参数强化:
node_packages
与pg_extensions
参数中指定的软件包在安装时会升级至最新版本,node_packages
中现在默认值变为[openssh-server
],帮助修复 OpenSSH CVE - 参数强化:
pg_dbsu_uid
会自动根据操作系统类型调整为26
(EL)或543
(Debian),避免了手工调整。 - Boostrap 逻辑变化,不再下载离线软件包,添加
-k|--keep
参数,用于指定在本地安装 ansible 时是否保留现有的软件源。 - Configure 移除了
-m|--mode
参数,使用-m|--conf
参数指定配置文件,使用-x|--proxy
参数指定代理服务器配置,不再尝试修复 ssh 本机问题。 - 设置了 pgbouncer 默认参数,
max_prepared_statements = 128
启用了事物池化模式下的准备语句支持,并设置server_lifetime
为 600, - 修改了 patroni 模板默认参数,统一增大
max_worker_processes
+8 可用后端进程,提高max_wal_senders
与max_replication_slots
至 50,并增大 OLAP 模板临时文件的大小限制为主磁盘的 1/5
版本升级
截止至发布时刻,Pigsty 主要组件的版本升级如下:
- PostgreSQL 16.4, 15.8, 14.13, 13.16, 12.20
- pg_exporter : 0.7.0
- Patroni: 3.3.2
- pgBouncer: 1.23.1
- pgBackRest: 2.53.1
- duckdb : 1.0.0
- etcd : 3.5.15
- pg_timetable: 5.9.0
- ferretdb: 1.23.1
- vip-manager: 2.6.0
- minio: 20240817012454
- mcli: 20240817113350
- grafana : 11.1.4
- loki : 3.1.1
- promtail : 3.0.0
- prometheus : 2.54.0
- pushgateway : 1.9.0
- alertmanager : 0.27.0
- blackbox_exporter : 0.25.0
- nginx_exporter : 1.3.0
- node_exporter : 1.8.2
- keepalived_exporter : 0.7.0
- pgbackrest_exporter 0.18.0
- mysqld_exporter : 0.15.1
- redis_exporter : v1.62.0
- kafka_exporter : 1.8.0
- mongodb_exporter : 0.40.0
- VictoriaMetrics : 1.102.1
- VictoriaLogs : v0.28.0
- sealos: 5.0.0
- vector : 0.40.0
Pigsty 重新编译了所有 PostgreSQL 扩展插件,PostgreSQL 扩展插件的最新版本,请参考 扩展列表
新应用
Pigsty 现在提供开箱即用的 Dify 与 Odoo Docker Compose 模板:
Pigsty 专业版现在提供试点的 Kubernetes 部署支持与 Kafka KRaft 集群部署与监控支持
KUBE
: 使用 cri-dockerd 或 containerd 部署由 Pigsty 托管的 Kubernetes 集群KAFKA
:部署由 Kraft 协议支持的高可用 Kafka 集群
问题修复
- 通过
node_packages
中的默认值[openssh-server
],CVE-2024-6387 可以在 Pigsty 安装过程中被自动修复。 - 修复了 Loki 解析 Nginx 日志标签基数过大导致的内存消耗问题。
- 修复了 EL8 系统中上游 Ansible 依赖变化导致的 bootstrap 失效问题(python3.11-jmespath 升级至 python3.12-jmespath)
v2.7:集异璧之大成
2024-05-20,Pigsty v2.7 发布了。在这个版本中收录的可用扩展插件数量,达到了惊人的 255 个,成功让 PostgreSQL 的全能性又达到了一个全新高度!
同时,我们提供了一些新的 Docker 应用模板,例如开源的企业 ERP 软件全家桶 —— Odoo,Jupyter Notebook,并率先提供了 Supabase GA 版本的支持。 同时,我们还为后续容器版本的推出扫清了障碍;提供了帮助用户应付国产信创检查的方案 —— PolarDB 支持;并正式进行了专业版与开源版的产品功能区分。
扩展尽入吾彀中
在《PostgreSQL正在吞噬数据库世界》一文中,我抛出了一个观点:PostgreSQL 并不是一个简单的关系型数据库,而是一个数据管理的抽象框架,具有囊括一切,吞噬整个数据库世界的力量。
而 PG 之所以能做到这一点,除了开源、先进这两点外,真正的秘诀在于 扩展 —— 极致可扩展性,与繁荣的扩展生态 是 PostgreSQL 独一无二的特点,也是它从无数数据库中脱颖而出的法宝与秘诀。
因此,在 Pigsty v2.7 版本中,我们重新审视了整个 PostgreSQL 生态的所有扩展插件,将其中一些佼佼者收录其中,我们新收录的扩展如下:
扩展 | 版本 | 说明 |
---|---|---|
pg_jsonschema | 0.3.1 | 提供JSON Schema校验能力 |
wrappers | 0.3.1 | Supabase提供的外部数据源包装器捆绑包 |
duckdb_fdw | 1.1 | DuckDB 外部数据源包装器 (libduck 0.10.2) |
pg_search | 0.7.0 | ParadeDB BM25算法全文检索插件,ES全文检索 |
pg_lakehouse | 0.7.0 | ParadeDB 湖仓分析引擎 |
pg_analytics | 0.6.1 | 加速 PostgreSQL 内部的分析查询处理 |
pgmq | 1.5.2 | 轻量级消息队列,类似于 AWS SQS 和 RSMQ. |
pg_tier | 0.0.3 | 支将将冷数据分级存储到 AWS S3 |
pg_vectorize | 0.15.0 | 在 PG 中实现 RAG 向量检索的封装 |
pg_later | 0.1.0 | 现在执行 SQL,并在稍后获取结果 |
pg_idkit | 0.2.3 | 生成各式各样的唯一标识符:UUIDv6, ULID, KSUID |
plprql | 0.1.0 | 在PostgreSQL使用PRQL——管线式关系查询语言 |
pgsmcrypto | 0.1.0 | 为PostgreSQL提供商密算法支持:SM2,SM3,SM4 |
pg_tiktoken | 0.0.1 | 计算 OpenAI 使用的 Token 数量 |
pgdd | 0.5.2 | 提供通过标准SQL查询数据库目录集簇的能力 |
parquet_s3_fdw | 1.1.0 | 针对S3/MinIO上的Parquet文件的外部数据源包装器 |
plv8 | 3.2.2 | PL/JavaScript (v8) 可信过程程序语言 |
md5hash | 1.0.1 | 提供128位MD5的原生数据类型 |
pg_tde | 1.0-alpha | PostgreSQL 的实验性加密存储引擎。 |
pg_dirtyread | 2.6 | 从 PostgreSQL 表中读取未清理的死元组,用于脏读 |
这里面有许多使用 Rust 和 pgrx 开发的扩展插件,许多扩展都提供了非常强大的能力 —— 比如说:
Supabase 出品的 wrappers 看上去是一个扩展,但它其实提供了一个用 Rust 编写 FDW 的插件,提供了对十种外部数据源的包装访问!
FDW | Description | Read | Modify |
---|---|---|---|
HelloWorld | A demo FDW to show how to develop a basic FDW. | ||
BigQuery | A FDW for Google BigQuery | ✅ | ✅ |
Clickhouse | A FDW for ClickHouse | ✅ | ✅ |
Stripe | A FDW for Stripe API | ✅ | ✅ |
Firebase | A FDW for Google Firebase | ✅ | ❌ |
Airtable | A FDW for Airtable API | ✅ | ❌ |
S3 | A FDW for AWS S3 | ✅ | ❌ |
Logflare | A FDW for Logflare | ✅ | ❌ |
Auth0 | A FDW for Auth0 | ✅ | ❌ |
SQL Server | A FDW for Microsoft SQL Server | ✅ | ❌ |
Redis | A FDW for Redis | ✅ | ❌ |
AWS Cognito | A FDW for AWS Cognito | ✅ | ❌ |
这意味着,你现在可以用 PostgreSQL 读写 BigQuery, ClickHouse, 以及支付服务 Stripe 数据了。Firebase,Airtable,S3,Logflare,Auth0,SQL Server,Redis,Cognito 也提供了通过 PostgreSQL ,使用 SQL 读取的能力。
再比如 plprql
扩展,提供了一种类似于 SQL 的全新数据库查询语言 PRQL:
from invoices
filter invoice_date >= @1970-01-16
derive {
transaction_fees = 0.8,
income = total - transaction_fees
}
filter income > 1
group customer_id (
aggregate {
average total,
sum_income = sum income,
ct = count total,
}
)
sort {-sum_income}
take 10
join c=customers (==customer_id)
derive name = f"{c.last_name}, {c.first_name}"
select {
c.customer_id, name, sum_income
}
derive db_version = s"version()"
同时,新加入 Pigsty 的 plv8 扩展,允许你使用 Javascript 在 PostgreSQL 中编写存储过程,PostgreSQL 的存储过程语言支持之丰富,实在是让人惊叹!
再比如说 parquet_s3_fdw ,看上去只是让你访问 S3 上存储的 Parquet 文件,但它的意义是 —— PG 可以成为真正的湖仓了 —— 等效于新增了一个没有存储容量限制的分析引擎!
构建在它基础上的 pg_tier
,更是提供了便利的分级冷存储功能 —— 你可以将 PG 中很少访问的海量冷存储,用 SQL 轻松归档到 S3 / MinIO 上去!
如果您觉得仅仅是 Parquet 太不过瘾,那么由 ParadeDB 提供的 pg_lakehouse
,则把这件事拔高到了一个新高度 —— 你现在可以直接将PG作为湖仓使用,读取 S3 / MinIO / 本地文件系统上的 Parquet,CSV,JSON,Avro,DeltaLake,以及 后续的 ORC 格式文件,用于湖仓数据分析!
CREATE EXTENSION pg_lakehouse;
CREATE FOREIGN DATA WRAPPER s3_wrapper HANDLER s3_fdw_handler VALIDATOR s3_fdw_validator;
-- Provide S3 credentials
CREATE SERVER s3_server FOREIGN DATA WRAPPER s3_wrapper
OPTIONS (region 'us-east-1', allow_anonymous 'true');
-- Create foreign table
CREATE FOREIGN TABLE trips (
"VendorID" INT,
"tpep_pickup_datetime" TIMESTAMP,
"tpep_dropoff_datetime" TIMESTAMP,
"passenger_count" BIGINT,
"trip_distance" DOUBLE PRECISION,
"RatecodeID" DOUBLE PRECISION,
"store_and_fwd_flag" TEXT,
"PULocationID" REAL,
"DOLocationID" REAL,
"payment_type" DOUBLE PRECISION,
"fare_amount" DOUBLE PRECISION,
"extra" DOUBLE PRECISION,
"mta_tax" DOUBLE PRECISION,
"tip_amount" DOUBLE PRECISION,
"tolls_amount" DOUBLE PRECISION,
"improvement_surcharge" DOUBLE PRECISION,
"total_amount" DOUBLE PRECISION
)
SERVER s3_server
OPTIONS (path 's3://paradedb-benchmarks/yellow_tripdata_2024-01.parquet', extension 'parquet');
-- Success! Now you can query the remote Parquet file like a regular Postgres table
SELECT COUNT(*) FROM trips;
count
---------
2964624
(1 row)
当然,同样由 ParadeDB 出品的 pg_analytics 与 pg_search 扩展也非常值得一提,前者提供了第一梯队的分析性能,而后者提供了 ElasticSearch BM25 全文检索能力的的 PG 替代品。
此外,Tembo 也提供了四个使用 Rust 编写的实用 PG 扩展,例如,他们出品的 pgmq 就可以在 PG 上提供一个轻量的消息队列 API,类似于 AWS 的 SQS 与 RSMQ,作为 pgq 的替代与补充。
在 AI 人工智能方向上,pgvector 0.7 引入了重大的升级,现在支持稀疏向量(让 pg_sparse 原地退役了!),支持 half float 量化,向量最大维度翻倍到了 4000 维,添加了 binary 量化模式(维度可达 64K ),添加了两种新的距离度量与相应的索引。最重要的是,现在还支持用 SIMD 指令了,性能相比一年前有了翻天覆地的改善!
- Added halfvec type
- Added sparsevec type
- Added support for indexing bit type
- Added support for indexing L1 distance with HNSW
- Added binary_quantize function
- Added hamming_distance function
- Added jaccard_distance function
- Added l2_normalize function
- Added subvector function
- Added concatenate operator for vectors
- Added CPU dispatching for distance functions on Linux x86-64
- Updated comparison operators to support vectors with different dimensions
当然,还有其他一些 AI 相关的扩展插件,例如 pg_vectorize 可以帮助你封装实现一个 RAG 服务,新的 pg_tiktoken 可以帮助你在 PG 中,计算调用 OpenAI 模型时所需的 Token 数量。此外,pg_similarity 可以提供17种额外的距离度量函数,imgsmlr 可以提供图片相似度处理函数, bigm 可以提供基于二元组的全文检索支持, zhparser 可以提供中文分词能力。
在新的数据类型支持上,md5hash 允许你直接高效存储 128 位的 MD5 摘要,而不是一长串字符文本。 pg_idkit 允许你在数据库中直接生成十多种不同类型的 ID 方案(UUIDv6, UUIDv7, nanoid, ksuid, ulid, Timeflake, PushID, xid, cuid, cuid 等),rrule 扩展更是允许你在数据库中存储、解析、处理“日历重复事件”这一神奇的数据类型。
此外,还有一些扩展,能在数据库管理上提供帮助。pgdd 允许你直接使用 SQL ,管理与访问 PG 的数据库目录,pg_later 允许你异步执行 SQL 命令并取回结果。pg_dirtyread 允许你进行脏读,读取尚未被垃圾回收的数据,进行数据抢救,pg_show_plans 可以显示出当前正在运行查询的执行计划!
在加密能力上,pg_tde 扩展提供了一个实验性的PG透明加密的存储引擎,用于确保即使你的硬盘被人拔了,数据也不会泄漏。 pgsmcrypto 则为 PostgreSQL 提供了 “国产数据库” 的商密算法(SM2,3,4)支持。
PG集异璧之大成
加上 以前的扩展,在 Pigsty v2.7 中,在所有操作系统上可用的 PG 扩展数量达到了 255 个之多。 我们可以自豪地说,在整个 PostgreSQL 生态中,没有一个发行版或者服务提供商,能达到我们的收录的这个扩展数量:
在EL系操作系统上,总共有 230 个可用的 RPM 扩展插件,其中包括 73 个 PG 自带的扩展和 157 个第三方扩展,其中由 Pigsty 维护的占 34 个。 在 Debian 与 Ubuntu 系操作系统上,总共有 189 个可用的 DEB 扩展插件,其中包括 73 个 PG 自带的扩展和 116 个第三方扩展,其中由 Pigsty 维护的占 10 个。
完整的扩展列表,请参考 扩展列表
所有的扩展,被我们按照功能与用途分为了 11 个大类,方便用户根据主题选用:
类目 | 扩展 |
---|---|
TYPE | pg_uuidv7, pgmp, semver, timestamp9, uint, roaringbitmap, unit, prefix, md5hash, ip4r, asn1oid, pg_rrule, pg_rational, debversion, numeral, pgfaceting |
GIS | pointcloud, pgrouting, h3, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster, postgis_sfcgal, address_standardizer, postgis, h3_postgis, pointcloud_postgis, geoip, mobilitydb |
SHARD | pg_fkpart, pg_partman, plproxy, citus |
TEST | pgtap, faker, dbt2 |
SEARCH | pg_bigm, pg_search, zhparser |
ETL | pg_bulkload, wal2json, pg_fact_loader, decoderbufs |
REPL | pglogical_origin, pglogical, repmgr, londiste, mimeo, pglogical_ticker |
SEC | pgaudit, pgsodium, anon, passwordcracklib, supabase_vault, pgauditlogtofile, set_user, login_hook, pgcryptokey, pg_jobmon, logerrors, pg_auth_mon, pgsmcrypto, pg_tde, credcheck, table_log, pg_snakeoil |
OLAP | pg_lakehouse, duckdb_fdw, citus_columnar, parquet_s3_fdw, columnar, pg_analytics, timescaledb, pg_tier |
FUNC | count_distinct, pgsql_tweaks, tdigest, topn, pgjwt, pg_net, extra_window_functions, http, gzip, pg_later, pg_idkit, pg_background, pgpcre, first_last_agg, icu_ext, q3c, pg_sphere |
FDW | hdfs_fdw, mysql_fdw, pgbouncer_fdw, mongo_fdw, sqlite_fdw, tds_fdw, ogr_fdw, oracle_fdw, multicorn, db2_fdw, wrappers |
LANG | plpgsql_check, plsh, pllua, plr, plluau, pldbgapi, plv8, plprql, pg_tle, pljava, hstore_plluau, hstore_pllua, omnidb_plpgsql_debugger |
SIM | orafce, pg_extra_time, pgmemcache, pg_dbms_job, mysqlcompat, pg_dbms_metadata, pg_dbms_lock |
ADMIN | pg_readonly, pg_squeeze, pgfincore, pgl_ddl_deploy, prioritize, ddlx, pgagent, pg_repack, pg_cron, pgpool_recovery, pgpool_regclass, pgpool_adm, pg_dirtyread, pgdd, pgautofailover, safeupdate, toastinfo |
STAT | pg_permissions, pg_qualstats, pg_stat_kcache, pg_stat_monitor, pg_track_settings, pg_wait_sampling, plprofiler, powa, pgexporter_ext, system_stats, pg_store_plans, pgmeminfo, pg_profile, pg_show_plans, pg_statviz |
AI | pg_tiktoken, imgsmlr, svector, pg_similarity, pgml, vectorize, vector |
FEAT | periods, pg_ivm, jsquery, hll, pgtt, rum, pg_hint_plan, age, temporal_tables, table_version, pg_graphql, pgq, pgmq, pg_strom, pg_jsonschema, hypopg, emaj, pgq_node, pre_prepare, rdkit |
这些扩展之间,许多都可以相互组合使用,产生协同效应,产生 1+1 » 2 的神奇效果。
正如 TimescaleDB CEO Ajay 在 《为什么PostgreSQL是未来数据的基石?》 一文中所述,PostgreSQL 正在成为事实上的数据库标准。
通过极致可扩展性的魔法,PostgreSQL 集异璧之大成,做到了守正出奇,实现了主干极致稳定性与功能敏捷性的统一**。**扎实的基本盘配上惊人的演进速度,让它成为了数据库世界中的一个异数,彻底改变了数据库世界的游戏规则。
时至当下,PostgreSQL 已是不可挡。而 Pigsty 让 PostgreSQL 如虎添翼,插上一对起飞的翅膀。
国产信创数据库?
在中国做数据库赛道,绕不开的一个问题就是“国产化”与“信创”。关于这个主题,我已经写过很多文章深入探讨过了:
我的观点是:整个国产信创数据库行业完全基于一个事实上根本不成立的假设 —— 所谓 “数据库卡脖子” 的风险。在开源的 PostgreSQL 面前,所谓卡脖子是个伪命题 —— 如果被欧美严厉制裁的俄国企业们数据库没有崩溃,中国也完全可以同样拿 PG 做同样的事,而不是弄出一堆换皮魔改或土法炼钢的劣质轮子出来。
许多国产数据库都是这样的:企业花点钱买一套“国产xxx”放在那里,上面来检查了,就拿出来糊弄一下,实际上该用啥还是继续用啥(我要给这种务实的态度点个赞!👍) 但是很多时候,即使客户想要用的就是原生 PG,但没有一块 “国产” 的牌子,确实是很难走立项采购流程的,我们就有一些客户面临这样让人头大的难题。
不过大部分用户也不愿意当傻狍子和冤大头,许多有国产化要求的企业都是这样的:花点钱买一套“国产xxx”放在那里,上面来检查了,就拿出来糊弄一下,实际上该用啥还是继续用啥(我要给这种务实的态度点个赞!👍) 但是很多时候,即使客户想要用的就是原生 PG,但没有一块 “国产” 的牌子,确实是很难走立项采购流程的,我们就有一些客户面临这样让人头大的难题。
因此,我们想了一个绝妙的折衷办法 —— PolarDB for PostgreSQL。根据 【安全可靠测评结果公告(2023年第1号)】,附表三、集中式数据库: PolarDB 属于自主可控,安全可靠的国产信创数据库。(中国信息安全测评中心-产品测评公告,证书编号:CNITSEC2022I&OE0047)
中国信息安全测评中心-产品测评公告 | |
---|---|
证号: | CNITSEC2022I&OE0047 |
发证日期: | 2022-04-26 |
截至时间: | 2025-04-25 |
产品名称: | 阿里云PolarDB V2.0内核核心模块 |
厂商: | 阿里云计算有限公司 |
认证级别: | 自主原创 |
认证评价: |
最妙的是,PolarDB PG 是开源的。所以 Pigsty 提供了对 PolarDB PG 的完整监控支持,以及使用 Docker 进行部署的能力,可以帮助客户快速拉起一个“国产数据库”稻草人,无论是应付检查,还是作为立项采购的名头,都非常好用! 而且相对于其他那些过时落后,魔改的亲妈都不认识的杂种 PG 国产库,PolarDB 的含 P 量很高,所以如果想用,真的是可以拿来当成一个 PG 11 用起来的。
最后说点实际的,如果你问我,有什么功能是“国产数据库”有,而 PostgreSQL 没有的,我还真知道一个 —— 所谓的 “商密” 算法。最主要的是三个:
用于替代 RSA 的 SM2 算法,用于替代 MD5/SHA 的 SM3 算法,用于替代 DES/AES 的 SM4 算法。但现在,原生的 PostgreSQL 也可以通过 smcrypto
扩展插件也可以提供商密算法支持了!
开箱即用的ERP
与 “国产数据库” 类似,许多国产 ERP 软件也是处在一个很尴尬的位置上,因为已经有一个足够好的开源 ERP 系统了 —— Odoo (原名 OpenERP)。
不少 Pigsty 的用户是拿着 PG 去跑 Odoo 的,这引起了我的好奇,于是我也混入了 Odoo 社区学习,也自己搭了一套试了一把,确实非常牛逼,要是早点试试这么好的东西,就不去折腾什么土法建站了。
Odoo 插件非常多,功能强大远超我想象,堪称企业应用全家桶大王。
作为开源免费的软件,Odoo靠高级扩展插件收钱,这个订阅价格也不算贵。要是一分都不想花,Odoo社区也提供了这些高级扩展插件的免费开源平替版本… —— 高级付费插件(比如财务模块)也有社区开源版!
Odoo 使用,且仅使用了 PostgreSQL 作为数据存储。整套 ERP 软件,只需要一个 PG 数据库,一个 Docker 镜像就可以搞定了!堪称是 PostgreSQL 杀手级应用的典范。
作为一个 PostgreSQL 发行版,我没理由不去支持 Odoo。因此在 Pigsty v2.7 中提供了一个 Docker Compose 模板,可以一键拉起 Odoo。你还可以复用 Pigsty 提供的基础设施,轻松通过 Nginx 对外暴露 Web 服务,提供 HTTPS 接入。
最后能实现的效果是,在一台裸虚拟机上,你只需要几行命令就可以拉起生产质量的企业级 ERP 系统!关于 Odoo ,后面我会专门出一期教程,介绍如何利用 Pigsty 自建 ERP 系统。
PITR与监控面板
像 Odoo 这样的 ERP 系统,对数据库的要求与传统互联网行业非常不一样。例如:我在 Odoo 社区看到了如下对话:“我的 Odoo 已经用了好几年了,现在 PostgreSQL 里的数据量已经到 2.5GB 了”,下面朋友回复 —— “那真的是非常大了!”
2.5 GB的数据量,对于互联网规模的应用来说简直是微不足道。但是对于一个 ERP 系统来说,这已经是一个非常大的数据库了。比起性能 & 高可用,像 ERP 这样的系统更关注的是数据完整性与机密性,很多时候,也就是拿一台服务器就跑起来了,不要 HA,只要有备份与 时间点恢复 (PITR) 就行。
Pigsty 已经提供了开箱即用的 PITR ,允许用户回滚到任意时间点。但是这个过程所需的信息和反馈却散落在监控系统中的不同角落中,因此在 Pigsty v2.7 中,Pigsty 提供了一个专用的监控面板 PGSQL PITR,用于提供 PITR 时间点回复过程的上下文。
后面,我们会专门出一期教程,介绍如何利用 Pigsty 的 PITR 功能,实现企业级的数据备份与恢复。
开源版与专业版
在 《Pigsty v2.6:PostgreSQL 踢馆 OLAP》 中,我已经提到过我们将区分 Pigsty 开源版与 专业版。
在 Pigsty v2.7 中,我们将开源版支持的操作系统发行版收敛到 Redhat, Debian, Ubuntu 这三个主干上来。我们提供 PostgreSQL 16 在 EL8, Debian12, Ubuntu22.04 的第一类支持,并提供可以无需互联网进行安装的开源版离线软件包。 当然,EL7, EL9, Debian11, Ubuntu20.04 这些系统还是可以继续使用 Pigsty 的,但是不会有离线软件包,只能通过联网安装的模式进行首次部署。
50,000 ¥ / 年
或 5,000 ¥/月
PG支持:15,16
OS支持:五系最新小版本
- EL 7.9 / 8.9 / 9.3
- Ubuntu 20.04 / 22.04
- Debian 11 / 12
功能:所有模块
SLA:工作日时效内响应
提供基础咨询服务:
- 软件缺陷修复
- 疑难杂症分析
- 升级路径支持
150,000 ¥ / 年
或 15,000 ¥/月
PG支持:12 - 16
OS支持:五系全部小版本
- EL 7.x / 8.x / 9.x
- Ubuntu 20.x / 22.x
- Debian 11.x / 12.x
功能:所有模块
SLA:5 x 8 (<4h)
提供专业咨询服务:
- 软件缺陷修复
- 疑难杂症分析
- 升级路径支持
- 备份合规建议
- DBA答疑解惑
400,000 ¥ / 年
或 40,000 ¥/月
PG支持:9.0 - 16
OS支持:按需定制
- EL, Debian, Ubuntu
- 云上 Linux 操作系统
- 国产操作系统与ARM
功能:所有模块
SLA:7 x 24 (紧急on-call)
提供企业级咨询服务:
- 软件缺陷修复
- 疑难杂症分析
- 升级路径支持
- 备份合规建议
- DBA答疑解惑
- 故障根因定位
- 年度架构评估
Pigsty 专业版与开源的区别主要在于兼容性与功能模块,例如 PostgreSQL 大版本支持范围,操作系统大版本支持范围,芯片架构支持范围。
在原本的功能设计中,开源版将只包括 INFRA, NODE, PGSQL, ETCD 四个与 PostgreSQL 服务紧密关联的核心模块,我纠结了很久是否要将 MinIO, Redis, FerretDB (Mongo), 以及 Docker 四个 扩展模块 划到专业版中,但最终还是决定将其保留在开源版里 —— 因为它们已经开源了,没道理再阉割掉。 但是与 PostgreSQL 相关性不大的其他模块以及后续的新功能模块,例如 Greenplum,MySQL,DuckDB,Kafka,Mongo, SealOS (Cloud) 都一定会划归专业版中。
在兼容性上,Pigsty 专业版将提供 PG完整生命周期 12 - 16 五个大版本,在七个主力大版本与其兼容系统上的支持,专业版采用按需定制的方式,交付专业版源码包,以及用户所需操作系统精准小版本的全功能离线软件安装包,包含所有生命周期内 PG 大版本的所有可用扩展插件。 另外,在这个版本中,我们自己维护了完整的 ARM64 Prometheus & Grafana 软件源,也可以在专业版中提供 Arm64 的芯片架构支持了,如果有需要跑在 arm 服务器,或者 “国产芯片” 上,这是一个不错的特性。
总的来说,Pigsty v2.7 的开源/专业版区分,在不影响开源用户使用体验的前提下,又给了企业用户一个充分的付费理由 ;)。
展望未来
总的来说, Pigsty 已经达到我心目中比较理想的状态了。在功能上,它已经做的足够好了!在某些方面已经远超 RDS 了(比如扩展支持与监控系统)。
但正所谓,酒香也怕巷子深 —— 所以接下来的工作重点会更多地转移到运营、营销、销售上去。开源项目的持续运营离不开用户与客户的支持,如果 Pigsty 帮助到了您,欢迎考虑赞助我们,或采购我们的服务订阅~。
当然,说起运营 —— 就在下周,也就是五月28号,我将去温哥华参加 2024 PostgreSQL 开发者大会,a.k.a 第一届 PGConf.Dev (以前叫 PG Con)。共同探讨 PostgreSQL 的未来,并更进一步地把 Pigsty 推向全球!
v2.7.0 发布注记
亮点特性
新增了大量强力扩展插件,特别是一些使用 rust
与 pgrx
进行开发的强力扩展:
- pg_search v0.7.0:使用 BM25 算法对 SQL 表进行全文搜索
- pg_lakehouse v0.7.0:在对象存储(如 S3)和表格式(如 DeltaLake)上进行查询的引擎
- pg_analytics v0.6.1:加速 PostgreSQL 内部的分析查询处理
- pg_graphql v1.5.4:为 PostgreSQL 数据库提供 GraphQL 支持
- pg_jsonschema v0.3.1:提供 JSON Schema 校验的 PostgreSQL 扩展
- wrappers v0.3.1:由 Supabase 提供的 PostgreSQL 外部数据封装器集合
- pgmq v1.5.2:轻量级消息队列,类似于 AWS SQS 和 RSMQ
- pg_tier v0.0.3:支将将冷数据分级存储到 AWS S3
- pg_vectorize v0.15.0: 在 PG 中实现 RAG 向量检索的封装
- pg_later v0.1.0:现在执行 SQL,并在稍后获取结果
- pg_idkit v0.2.3:生成多种流行类型的标识符(UUID)
- plprql v0.1.0:在 PostgreSQL 中使用 PRQL 查询语言
- pgsmcrypto v0.1.0:PostgreSQL 的国密 SM 算法扩展
- pg_tiktoken v0.0.1:计算 OpenAI 使用的 Token 数量
- pgdd v0.5.2:通过纯 SQL 接口,访问数据目录的元数据
当然,也有一些使用原生 C 和 C++ 开发的强力扩展:
- parquet_s3_fdw 1.1.0:从 S3 存取 Parquet 格式文件,作为湖仓之用
- plv8 3.2.2:使用 V8 引擎,允许在 PostgreSQL 中使用 Javascript 语言编写存储过程
- md5hash 1.0.1:用于存储原生MD5哈希数据类型,而非文本。
- pg_tde 1.0 alpha:PostgreSQL 的实验性加密存储引擎。
- pg_dirtyread 2.6:从 PostgreSQL 表中读取未清理的死元组,用于脏读
- 新的 deb PGDG 扩展:
pg_roaringbitmap
,pgfaceting
,mobilitydb
,pgsql-http
,pg_hint_plan
,pg_statviz
,pg_rrule
- 新的 rpm PGDG 扩展:
pg_profile
,pg_show_plans
, 使用 PGDG 的pgsql_http
,pgsql_gzip
,pg_net
,pg_bigm
替代 Pigsty 维护的 RPM。
新特性
- 允许 Pigsty 在特定 Docker 虚拟机镜像中运行。
- 针对 Ubuntu 与 EL 系操作系统发行版准备了 INFRA & PGSQL 模块的 arm64 软件包
- 新安装脚本,可从 cloudflare 下载软件,可以指定版本,提供更完善的提示信息。
- 新增的 PGSQL PITR 监控面板,用于在 PITR 过程中提供更好的可观测性
- 针对在 Docker 虚拟机镜像中运行 Pigsty 进行了一系列铺垫与准备。
- 新增了 防呆设计,避免在非 Pigsty 纳管的节点上运行 pgsql.yml 剧本 (AdamYLK)
- 针对每个支持的发行版大版本配置了独立的配置文件:el7, el8, el9, debian11, debian12, ubuntu20, ubuntu22
Docker应用模板
- Odoo:开源 ERP 软件与插件
- Jupyter:使用容器运行 Jupyter Notebook
- PolarDB:运行“国产数据库” PolarDB,应付信创检查!
- supabase:更新至最近的 GA 版本
- bytebase:使用
latest
标签替代特定版本号。 - pg_exporter:更新了 Docker 镜像的例子。
软件版本升级
- PostgreSQL 16.3
- Patroni 3.3.0
- pgBackRest 2.51
- VIP-Manager v2.5.0
- Haproxy 2.9.7
- Grafana 10.4.2
- Prometheus 2.51
- Loki & Promtail: 3.0.0 (警告:大版本非兼容性变更!)
- Alertmanager 0.27.0
- BlackBox Exporter 0.25.0
- Node Exporter 1.8.0
- pgBackrest Exporter 0.17.0
- duckdb 0.10.2
- etcd 3.5.13
- minio-20240510014138 / mcli-20240509170424
- pev2 v1.8.0 -> v1.11.0
- pgvector 0.6.1 -> 0.7.0
- pg_tle: v1.3.4 -> v1.4.0
- hydra: v1.1.1 -> v1.1.2
- duckdb_fdw: v1.1.0 重新针对 libduckdb 0.10.2 进行编译
- pg_bm25 0.5.6 -> pg_search 0.7.0
- pg_analytics: 0.5.6 -> 0.6.1
- pg_graphql: 1.5.0 -> 1.5.4
- pg_net 0.8.0 -> 0.9.1
- pg_sparse (deprecated)
缺陷修复
- 修复了 pg_exporters 角色中的变量空白问题。
- 修复了
minio_cluster
变量没有在全局配置中注释掉的问题 - 修复了 EL7 模板中的
postgis34
插件名称问题,应该使用postgis33
- 修复了 EL8
python3.11-cryptography
依赖名的问题,上游现在变更为python3-cryptography
。 - 修复了
/pg/bin/pg-role
无法在非交互式 Shell 模式下获取操作系统用户名的问题 - 修复了
/pg/bin/pg-pitr
无法正确提示-X
-P
选项的问题
API变更
- 新参数
node_write_etc_hosts
,用于控制是否向目标节点的/etc/hosts
文件写入静态 DNS 解析记录 - 新增了
prometheus_sd_dir
参数,用于指定 Prometheus 静态服务发现的目标文件目录 - configure 脚本新增了
-x|--proxy
参数,用于将当前环境的代理信息写入配置文件 by @waitingsong in https://github.com/Vonng/pigsty/pull/405 - 不再使用 Promtail & Loki 解析 Infra 节点上的 Nginx 日志细节标签,因为这样会导致标签基数爆炸。
- 在 Prometheus 配置中使用 alertmanager API v2 替代 v1
- 在 PGSQL 模块中,使用
/pg/cert/ca.crt
代替/etc/pki/ca.crt
,降低对节点根证书的依赖。
新的贡献者
- @NeroSong made their first contribution in https://github.com/Vonng/pigsty/pull/373
- @waitingsong made their first contribution in https://github.com/Vonng/pigsty/pull/405
完整的变更日志: https://github.com/Vonng/pigsty/compar
离线软件包校验和
ec271a1d34b2b1360f78bfa635986c3a pigsty-pkg-v2.7.0.el8.x86_64.tgz
f3304bfd896b7e3234d81d8ff4b83577 pigsty-pkg-v2.7.0.debian12.x86_64.tgz
5b071c2a651e8d1e68fc02e7e922f2b3 pigsty-pkg-v2.7.0.ubuntu22.x86_64.tgz
v2.6:PG 踢馆 OLAP
二月的最后一天里,Pigsty v2.6 正式发布了 🎉。这个版本正式使用 PostgreSQL 16 作为默认的大版本,并引入了一系列全新的扩展,包括 ParadeDB 与 DuckDB ,让 PostgreSQL 的 OLAP 分析能力提高到一个全新的水准,喊一声 HTAP 标杆,数据库全能王当之无愧。
此外,我们还全面翻新了 Pigsty 官方网站、文档与博客,提出了更为凝练的六条核心价值主张。在全球范围内,我们使用了由 Cloudflare 支持的全新域名 pigsty.io 。作为默认的官方站地址与仓库地址。原有的 pigsty.cc 域名、网站、仓库继续在国内作为镜像提供服务。
最后,我们还正式推出了明码标价的 Pigsty 专业版与服务订阅,为那些需要更强支持力度的用户提供进阶功能与兜底选项。
分析性能史诗级加强
TPC-H 和 Clickbench 是分析领域的权威评测,Clickbench 上有许多 OLAP 数据库性能的横向对比,可以作为量化参考依据。例如在这个最有代表性的例子中,我们可以看到许多知名的数据库组件的相对性能表现(耗时越短越好):
c6a.4xlarge, 500gb gp2 / 10亿条记录
在这张图表上我们标注出了 PostgreSQL 与生态扩展插件的性能表现。原生未经过调优的 PostgreSQL 耗时(x1000),调优后可以达到(x47),同时,PG生态还有三个与分析有关系的扩展:列存 Hydra(x42),时序扩展 TimescaleDB(x103),以及分布式扩展 Citus(x262)。但与专注于 OLAP 的第一梯队组件:Umbra,ClickHouse,Databend,SelectDB(x3~x4)相比仍然有十几倍的性能差距。然而最近出现的 ParadeDB 和 DuckDB 的出现改变了这一点!
ParadeDB 提供的 PG 原生扩展 pg_analytics 实现了第二梯队(x10)的性能表现,与第一梯队的 OLAP 数据库只有 3~4 倍的性能差距。比起额外的好处来说:ACID,数据新鲜性,无需 ETL,额外学习成本,维护独立的新服务,(更别提它还提供了 ElasticSearch 质量的全文检索能力),这种性能差距通常是可以接受的。
而 DuckDB (x3.2)则把 OLAP 拔高到了一个全新高度 —— 抛开 Umbra 这种学术类研究数据库的用例,DuckDB 也许是 OLAP 实战性能最快的分析数据库。虽然说它并不是 PG 的扩展插件,但它是一个嵌入式组件,而 DuckDB FDW 以及 pg_quack 这样的项目能让 PostgreSQL 充分利用到 DuckDB 带来的完整分析性能红利!
来自 ParadeDB 创始人与 DuckdbFDW 作者的感谢致意
全新的价值主张
价值主张是数据库发行版的灵魂,在这个版本中,我们提出了六条核心价值,如下图所示:
这张图列出了 PostgreSQL 要解决的六个核心问题:Postgres 的可扩展性,基础设施的可靠性,图形化的可观测性,服务的可用性,工具的可维护性,以及扩展模块和三方组件可组合性。
Pigsty 的六条缩写正好构成 PIGSTY 首字母缩写 —— 除了 PostgreSQL in Great STYle 之外,这六点价值主张提供了另外一种缩写解释:
Postgres, Infras, Graphics, Service, Toolbox, Yours.
你的图形化 Postgres 基础设施服务工具箱。
同时我们还重新设计了 Logo,从戴墨镜的装象猪头变成了六边形组合,配色正好是这些关键组件的颜色(PG蓝,ETCD青,Grafana橙,Ansible黑,Redis/MinIO 红,Nginx绿),是上图大六边形的一个浓缩精简版本。原来的墨镜小猪将作为 Pigsty 项目的吉祥物继续存在。
全新的网站
在这个版本中,我们重新翻修了老网站。使用了最新版本的 Docsy 作为文档框架,并更新调整了大量内容。我们放弃了花哨繁而不实的设计,直接把将 Pigsty 的价值主张与核心特性放在 Landing Page 上。
而真正的内容,都在文档目录里,我们重新梳理设计了文档的目录结构
当然,抛下了纯 Markdown 的执念后,我们也可以在文档内容中使用一些好看的样式与花活。
除了文档外,我们也整理了一下最近的文章纳入 Pigsty 博客。重新划分为六个专栏:云计算泥石流,数据库老司机,以及 PostgreSQL 的生态、开发、管理、内核四个板块。
与此同时, Pigsty 提供的软件源也有了全球的镜像仓库,由 Cloudflare R2 强力驱动。并托管在 Cloudflare 上,为全球用户都带来丝滑的访问体验(当然国内可以继续使用 pigsty.cc )。
PostgreSQL 16 成为默认版本
最后一个值得一提的特性是,在 Pigsty v2.6 中,PostgreSQL 16 (16.2) 正式取代先前的 PostgreSQL 15,成为默认的数据库大版本。
在三个月前的 《Pigsty v2.5.1发布:PG16能打了吗?》 中,我们已经指出 PostgreSQL 的主要扩展插件已经就位,加上第二个小版本发布,可以上生产环境了。
而 Pigsty v2.6 正值 PostgreSQL 16.2 第三个小版本发布,Hydra,PGML,AGE 这几个重要扩展也跟进了 PG 16,所以我们决定,正式将默认的 PG 大版本升级为 16 ,而且将成为开源版唯一支持的 PG 大版本(EL7除外)。
因此,在这个版本中,我们做出的另一个重要的技术决策是:在开源版中移除了默认囊括的 PG 12 - 15 软件包与扩展。Pigsty 并非不支持 PG 12 - 15,只需要稍微调整配置文件,就可以轻松使用老版本的 PostgreSQL 扩展插件,只是我们不会再针对这些版本启用集成测试了(虽然在老版本的 Pigsty 里已经测试的很充分了)。
同理,我们也将开源版本的支持范围进一步收窄,缩小到 EL 8 / EL 9 与 Ubuntu 22.04 这三个使用范围最广的操作系统发行版上来。因为在 Pigsty 2.5 的时候,我们支持的是 PG 12 - 16 五个大版本乘以七个操作系统发行版,共 34 种排列组合,加上后续的 ARM 适配支持,给测试带来了很大压力。
让开源版聚焦于一个核心PG大版本与三个主流操作系统大版本,可以更好的利用研发带宽,满足最广大开源用户的使用需求。同理,这并不意味着 Pigsty 不能在老系统上用了,你依然可以在 EL7,Ubuntu 20.04,Debian 11/12 上丝滑运行,但我们不会为这些操作系统提供离线软件包,冒烟测试与支持了。
对于小众冷门操作系统系统与过时大版本的支持,并不是占总体绝大多数用户所需要的,却需要耗费许多额外的精力与成本,因此纳入了我们的付费商业支持中。
开源版与专业版划分
有一些开源用户反馈 —— 我并不需要那些和 PostgreSQL 关系不大的东西来拖慢下载安装速度并增加管理复杂度 —— 什么 Redis, MinIO, Docker, K8S,Supabase 之类的,虽然你觉得这些东西能给 PG 打辅助,但花里胡哨的东西只会拖慢我出刀的速度。
具体的功能切割方式还没有确定与落地,因此 2.6 也许是最后一个全功能的 Pigsty 开源版本。但基本原则是,开源版将保留所有的核心功能模块与PG扩展插件(PGSQL, INFRA, NODE, ETCD),而与 PostgreSQL 关系没有那么紧密的模块,在后续可能会作为专业版的内容提供。
在后面,Pigsty 开源版将专注于做好一件事 —— 提供可靠,高可用,可扩展的本地 PostgreSQL RDS 服务,当然像 Docker 模板这样的实用特性可能还是会留开源版中。
并不是说这些功能在开源版 Pigsty 里就没有了,我相信开源老师傅还是可以很轻松的仅仅通过修改配置文件就把它们重新弄出来,但这些功能不会成为开源版本的默认组成部分了。
商业订阅服务
开源是用爱发电的情怀事业,但要想让这条路走得更长,还需要商业的利益来浇灌。在这个版本中,我们正式推出了商业版本的 Pigsty,为有需要的用户提供更丰富的支持选项。
除了提供额外功能模块支持,Pigsty 专业订阅 还提供了咨询答疑与兜底服务。并且支持更为宽泛的操作系统与数据库版本,如下表所示:
尽管 Pigsty 本身的宗旨便是让用户拥有开箱即用的数据库服务,甚至还带有硬件故障自愈的 HA 和为软件/人为失误兜底的时间点恢复PITR。也许你拉起了它,一年、两年、三年都没有遇到任何问题 —— 从概率上讲这蛮正常的。
但数据库出了问题,通常都是大问题。用不好数据库,也容易发展成大问题。所以我们也会为付费用户提供专家咨询与服务,作为最终的疑难杂症兜底。(例子:我们抢救过一个烤糊的,没有备份的 Gitlab 数据库)。与此同时,我们也可以提供专业 PostgreSQL DBA 的咨询服务。提供备份、安全、合规建议,管理开发最佳实践,性能评估与优化,设计建议与答疑解惑。
许多时候,化腐朽为神奇,能带来几个数量级改善的秘密就是专家的一句话。对于以可扩展性作为灵魂,扩展生态极度繁荣的 PostgreSQL 来说更是如此。我们的服务可以确保您的每一分钱都花得物有所值,并花在真正的刀刃上。
展望未来
Pigsty 的下一个大版本计划升级到 v3 ,将会正式落地开源版与专业版的功能划分。我们会在 Ubuntu / Debian 系操作系统中补完缺失的扩展 Deb 包,并提供一个命令行工具来封装管理操作。也许会将 Pigsty 本身打成一个 RPM / Deb 包提供,我们还计划提供 MYSQL 监控部署的 Beta 支持。
在监控系统上,我们会针对 PG 16 提供的 IO 指标重新调整 PostgreSQL 监控面板的样式。提供对 MySQL 的监控能力,尝试使用 Vector 作为日志收集组件 Promtail 的备选替换。我们已经有了针对阿里云 RDS PG 与 PolarDB 的监控,我们也计划在 v3.0 中提供对 AWS RDS 与 Aurora 的监控支持。
在基础设施建设上,我们会选择放弃“便宜”腾讯云 CDN,全面拥抱更可靠更快速且更便宜的 Cloudflare,为全球用户提供服务。腾讯云 CDN 也许可以作为国内的镜像站点,提供专业版的加速服务。
Pigsty 的产品与接口在 v2.6 和 v3.0 将会固化收敛,因为在产品与技术上,它已经做的足够好了!甚至在某些方面已经远超 RDS 了(比如扩展支持与监控系统!)所以接下来的工作终点会转移到营销与销售上来。开源项目的持续运营离不开用户与客户的支持,如果 Pigsty 帮助到了您,欢迎考虑赞助我们,或采购我们的服务订阅~。
v2.6.0
亮点特性
- 现已将 PostgreSQL 16 作为默认主要版本(16.2)
- 新增 ParadeDB 扩展插件:
pg_analytics
,pg_bm25
, andpg_sparse
- 新增 DuckDB 与
duckdb_fdw
插件支持 - 全球 Cloudflare CDN https://repo.pigsty.io 与中国大陆CDN https://repo.pigsty.cc
软件配置变更
- 使用
node_repo_modules
替换node_repo_method
参数,并移除node_repo_local_urls
参数。 - 暂时关闭 Grafana 统一告警功能,避免 “Database Locked” 错误。
- 新增
node_repo_modules
参数,用于指定在节点上添加的上游仓库源。 - 移除
node_local_repo_urls
,其功能由node_repo_modules
&repo_upstream
替代。 - 移除
node_repo_method
参数,其功能由node_repo_modules
替代。 - 在
repo_upstream
添加新的local
源,并通过node_repo_modules
使用,替代node_local_repo_urls
的功能 - 重排
node_default_packages
,infra_packages
,pg_packages
,pg_extensions
参数默认值。 - 在
repo_upstream
中替换repo_upstream.baseurl
时,如果 EL8/9 PGDG小版本特定的仓库可用,使用major.minor
而不是major
替换 $releasever,提高小版本兼容性。
软件版本升级
- Grafana 10.3
- Prometheus 2.47
- node_exporter 1.7.0
- HAProxy 2.9.5
- Loki / Promtail 2.9.4
- minio-20240216110548 / mcli-20240217011557
- etcd 3.5.11
- Redis 7.2.4
- Bytebase 2.13.2
- DuckDB 0.10.0
- FerretDB 1.19
- Metabase:新Docker应用模板
PostgreSQL扩展插件
- PostgreSQL 小版本升级: 16.2, 15.6, 14.11, 13.14, 12.18
- PostgreSQL 16: 现在被提升为默认主版本
- pg_exporter 0.6.1:安全修复
- Patroni 3.2.2
- pgBadger 12.4
- pgBackRest 2.50
- vip-manager 2.3.0
- PostGIS 3.4.2
- TimescaleDB 2.14.1
- 向量扩展 PGVector 0.6.0:新增并行创建 HNSW 索引功能
- 新增扩展插件 duckdb_fdw v1.1 ,支持读写 DuckDB 数据 v1.1
- 新增扩展插件 pgsql-gzip ,用于支持 Gzip 压缩解压缩 v1.0.0
- 新增扩展插件 pg_sparse,高效处理稀疏向量(ParadeDB) v0.5.6
- 新增扩展插件 pg_bm25,用于支持高质量全文检索 BM25 算法的插件(ParadeDB) v0.5.6
- 新增扩展插件 pg_analytics,支持 SIMD 与列式存储的PG分析插件(ParadeDB) v0.5.6
- 升级AIML插件 pgml 至 v2.8.1,新增 PG 16 支持。
- 升级列式存储插件 hydra 版本至 v1.1.1,新增 PG 16 支持。
- 升级图扩展插件 age 至 v1.5.0,新增 PG 16 支持。
- 升级GraphQL插件 pg_graphql 版本至 v1.5.0 ,支持 Supabase。
330e9bc16a2f65d57264965bf98174ff pigsty-v2.6.0.tgz
81abcd0ced798e1198740ab13317c29a pigsty-pkg-v2.6.0.debian11.x86_64.tgz
7304f4458c9abd3a14245eaf72f4eeb4 pigsty-pkg-v2.6.0.debian12.x86_64.tgz
f914fbb12f90dffc4e29f183753736bb pigsty-pkg-v2.6.0.el7.x86_64.tgz
fc23d122d0743d1c1cb871ca686449c0 pigsty-pkg-v2.6.0.el8.x86_64.tgz
9d258dbcecefd232f3a18bcce512b75e pigsty-pkg-v2.6.0.el9.x86_64.tgz
901ee668621682f99799de8932fb716c pigsty-pkg-v2.6.0.ubuntu20.x86_64.tgz
39872cf774c1fe22697c428be2fc2c22 pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz
v2.5:Ubuntu & PG16
时值 1024 程序员节,Pigsty v2.5.0 发布了 🎉,这个版本添加了对 Ubuntu 与 Debian 系操作系统的支持,加上原有的 EL7/8/9 支持,可谓实现了主流 Linux 操作系统大满贯。
此外,Pigsty 正式支持了自托管的 Supabase 与 PostgresML,以及列式存储插件 hydra
,激光雷达点云支持插件 pointcloud
,图像相似度计算插件 imgsmlr
,扩展距离函数包 pg_similarity
以及多语言模糊检索插件 pg_bigm
。
在监控上,Pigsty 优化了 PostgreSQL 监控面板体验,新增了 Patroni & Exporter 监控面板,根据查询宏观优化方法论重新设计了 PGSQL Query 监控面板。
关于Pigsty
Pigsty 是一个开箱即用的 PostgreSQL 发行版 、提供本地优先的 RDS PG 开源替代。让用户用云数据库 RDS 几分之一的纯硬件成本,自助运行更好的企业级 PostgreSQL 数据库服务。更多介绍,请访问 https://pigsty.cc 。
Ubuntu/Debian支持
在《临水照花看Ubuntu与Debian:Pigsty v2.5》中,我们已经预告了对 Ubuntu / Debian 系操作系统的支持(以下简称 Deb 支持)。从两年前 0.x 版本的时代,就有用户提出想要 Ubuntu 和 Debian 操作系统支持了,所以我觉得这是一件非常正确且重要的事情。
作为一个选择构建于裸操作系统上的数据库发行版,支持一种新操作系统并不像容器化数据库打个镜像那么简单。有许多的适配工作需要去做。首当其冲的就是包不齐的问题,好比 Prometheus 就没有官方提供的 DEB 源,不得不自己维护打包并提供一个软件仓库。
Pigsty 维护的 APT/YUM 源
包管理的巨大差别,要求你针对DEB系重写整个 bootstrap / 构建本地软件源的逻辑。发行版的 FHS ,习惯规约差异需要你一个一个去适配处理。你要解决的不仅是 PostgreSQL 内核和一百多个扩展的完整性兼容性问题,还有 etcd / minio / redis / grafana / prometheus / haproxy 等各种组件的问题。好在 Pigsty 克服了这些问题,让 Ubuntu / Debian 也有了和 EL 7-9 一样完整的丝滑体验。
一键安装 Pigsty
在使用体验上,Deb系 支持的功能集与EL系几乎完全相同,唯一的例外是 supabase 及其使用的几个专用扩展还没有完成移植。除此之外, Deb 系还有一些独有的扩展插件,例如化学分子式扩展 RDKit
,激光雷达点云数据扩展 pointcloud
/ 扩展距离函数包 pg_similarity
(这两个给力扩展反向移植到 EL 了)。想要完整发挥 PostgresML + CUDA 的实力,更是非 Ubuntu 不可。
Pigsty 在自动配置过程中添加了 Debian / Ubuntu 系统的识别,单机安装时会自动使用对应的配置模板。Deb系的模板相比 EL系只有 8 个参数的默认值有区别 —— 因为两种发行版的包名是不一样的,所以像 xx_packages
的参数肯定是需要调整的。除此之外需要就只有 上游源 repo_upstream
,本地源 node_repo_local_urls
,以及默认的 pg_dbsu_uid
了(DEB包没有分配固定UID)。
Ubuntu 系统的声明式配置文件
这些参数通常都不需要用户来调整,所以在 Pigsty 使用流程上,Deb系可以说几乎没有任何区别了:实际上 Pigsty 的离线软件包构建模版就是这么工作的:一次性在七种不同的操作系统上完成完整的 Pigsty 安装,无需任何特殊处理。
新的扩展插件
Pigsty v2.5 收纳了几款用户呼声比较高的扩展插件。首当其冲的便是 PostgresML。尽管在上一个版本中,Pigsty 已经提供了在 EL8 / EL9 上使用 PostgresML 的能力,但搞 AI 的操作系统基本上都是清一色的 Ubuntu,最起码 CUDA 驱动装起来方便啊。
所以 Pigsty v2.5 中,您可以在 Ubuntu 上运行原生的 PostgresML 集群了。你不需要折腾什么 NVIDIA Docker 之类的东西,pip 安装好 python 依赖,直接起飞就可以。使用 SQL 训练模型,调用模型,让你的整个 AI 工作流都在数据库中完成!
第二个值得一提的扩展插件是 pointcloud
[1]。因为地理空间扩展 PostGIS 的存在,PostgreSQL 一直是自动驾驶/电车公司的心头好。而 PointCloud 则将 PostgreSQL 与 PostGIS 的力量推广到一个新的边界。激光雷达会不断扫描周围并生成所谓 “点云” 数据。pointcloud
插件提供了 PcPoint & PcPatch 两种数据类型与四十个功能函数,允许您对超高维度的点集进行高效存储、检索与运算。这个插件在 PGDG APT 源中原生提供,而 Pigsty 将其移植到了 EL 系统上,让所有系统的用户都可以用上。
imgsmlr
[2] 则是一个以图搜图的插件。尽管现在已经有许多 AI 模型可以将图片编码成高维向量,使用 pgvector
进行语义搜索以图搜图。但 imgsmlr
最有趣的地方在于,它不需要任何外部依赖,可以直接在数据库内完成所有功能。用作者的说法是:我做这个插件的目的不是提供最先进的图像搜索方法,而是告诉你们如何编写一个 PostgreSQL 扩展,来干甚至是图像处理这种非典型的数据库任务。
首先将 PNG/JPG 图片使用 Haar小波变换的方式处理为 16K 大小的模式与64字节的摘要签名,然后利用 GiST 索引检索摘要的方式来高效实现以图搜图。使用 imgsmlr
从4亿随机图片中召回最相似的10张大约耗时 600ms 。”
另一个有趣的扩展 pg_similarity
[3] 默认在 Ubuntu/Debian 的 APT 源中提供,Pigsty 将其移植到了 EL 上。它提供了 17 种文本距离度量函数的高效 C 语言实现,极大丰富了检索排序的能力。另一个相关的插件是 pg_bigm
,它类似 PG 自带的 pg_trgm
,唯一的区别是用二字组替代三字组实现模糊检索,对中日韩语言的全文检索支持效果更好。
除此之外,我们还将 Supabase 的支持更新到最新版本:20231013070755
。您可以在 EL8/EL9 系统上使用 Pigsty 提供的 PostgreSQL 数据库来自托管 Supabase。
算上 PostgreSQL 自带的扩展,Pigsty 2.5 支持的扩展插件已经达到了 150+。尽管有这么多的插件,但请注意,它们全都是选装项。Pigsty 为所有 PostgreSQL 大版本都提供了 pg_repack
,wal2json
,passwordcheck_cracklib
(EL)这几个重要的扩展,默认安装的三方扩展只有在线治理膨胀的 pg_repack
。其他的扩展如果不安装,对现有系统不会产生任何额外的影响和负担。
监控系统调整
Pigsty v2.5 在监控系统上也进行了调整,将两年没升级的 pg_exporter
更新至了 v0.6.0
,新增了TLS支持,修复了两个依赖组件的安全问题,打好了 ARM64 软件包并使用最新的指标定义文件。同时,在 pg_query
指标收集器中添加了与共享缓冲区 I/O 有关的四个指标,进一步丰富了 PGSQL Query 中提供的信息。
首先是新增的监控面板:PGSQL Patroni ,提供了一个集群高可用状态的完整视图。对于分析历史服务健康状态,主从切换原因都大有帮助。
然后是 PGSQL Exporter,提供了 PG Exporter 和 Pgbouncer Exporter 自我监控的详细指标与日志。可以用于优化调整监控系统本身的性能。
在各种监控大盘的组件导航面板中,都可以点击 Patroni Exporter 的指示块直接跳转到这些组件的详情页中:
PGSQL Query 监控面板现在分为五栏:Overview 概览, 核心指标 QPS/RT,对时间微分指标,对调用次数的微分指标,百分比指标。遵循了宏观查询优化的方法论进行优化。
减少资源消耗:降低资源饱和的风险,优化CPU/内存/IO,通常以查询总耗时/总IO作为优化目标。使用 dM/dt
:指标 M
基于时间的微分,即每秒的增量。
改善用户体验:最常见的优化目标,在OLTP系统中,通常以降低查询平均响应时间作为优化目标。使用dM/dc
:指标 M
基于调用次数的微分,即每次调用的增量。
平衡工作负载:确保不同查询组之间的资源使用/性能表现的比例关系得当。使用 M%
,即某一类查询指标占总数的比例。
PGSQL 首屏是最核心的查询性能指标:QPS 与 RT —— 以及它们的 1分钟,5分钟,15分钟均值,抖动情况与分布范围。
接下来,便是用于优化用户体验的 dM/dc
类指标,这里的M指标包括:
- 每次查询平均返回的行数
- 每次查询的平均执行时长
- 每次查询平均产生的WAL大小
- 每次查询平均耗费的 I/O 时间
- 每次查询平均读写的缓冲区块大小
- 每次平均访问/写脏的缓冲区块大小
随后是用于减少资源消耗的 dM/dt
类指标,这里的M指标基本同上,不同之处在于它是针对时间的微分而不是针对调用次数的微分:
最后一栏中,我们展示了用于平衡工作负载的 %M 类指标。用于揭示这个特定查询组在整个工作负载中的比例与相对位置,标黑加粗显示,点击特定查询可以原地跳转查看另一组查询的性能表现,非常方便。
除了上面三个 Dashboard 之外,Pigsty 也对许多其他面板进行了优化改进与问题修复。许多面板的信息栏现在会提供更详细的信息:这个面板展现了什么指标,用于解决什么问题,等等等。我们也引入了三个新的 Grafana 插件用于支持 CSV/JSON 数据源,以及变量面板。
下个版本做点啥?
Pigsty 的下一个版本是 v2.6.0 ,除了进一步巩固 Ubuntu/Debian 的支持成熟度,这个版本的关注焦点将会关注两件事:MySQL 支持与命令行工具。
Pigsty 将提供基本的(主从,但没有HA) MySQL 安装部署支持,并提供基于 Grafana / Prometheus / MysqldExporter 的监控。因为 MySQL 5.7 将于本月 EOL,相信这样的能力会让更多的 MySQL 用户接触 PostgreSQL 并方便地迁移上来。
此外,我们还会进一步探索 Infra 组件容器化,调研使用 VictoriaMetrics 默认替换 Prometheus,或者使用 Vector 与 VictoriaLogs 替代 Loki与Promtail 的可行性。并设计一个更加好用的管控命令行工具 pigsty-cli,对 Greenplum 7.0 的部署提供正式支持,当这些任务都完成后,Pigsty 就将迎来第三个大版本 v3 了。
发布注记
如何用Pigsty监控现有PostgreSQL (RDS/PolarDB/自建)?
临水照花看Ubuntu与Debian:Pigsty v2.5
Pigsty v2.3.1:HNSW版PGVECTOR来了!
Pigsty v2.1 发布:向量扩展 / PG12-16 支持
Pigsty v2.0.2 更好的开源RDS替代:Pigsty
Pigsty v1正式发布:开箱即用的PostgreSQL开源发行版
References
[1]
pointcloud
: https://github.com/pgpointcloud/pointcloud
[2]
imgsmlr
: https://github.com/postgrespro/imgsmlr
[3]
pg_similarity
: https://github.com/eulerto/pg_similarity
[4]
Ubuntu: https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml
[5]
Debian: https://github.com/Vonng/pigsty/blob/master/files/pigsty/debian.yml
[6]
ubuntu.yml
: https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml
v2.5.0
curl https://get.pigsty.cc/latest | bash
亮点特性
-
使用CDN
repo.pigsty.cc
软件源,提供 rpm/deb 软件包下载。 -
Anolis 操作系统支持( 兼容 EL 8.8 )。
-
使用 PostgreSQL 16 替代 PostgreSQL 14 作为备选主要支持版本
-
新增了 PGSQL Exporter / PGSQL Patroni 监控面板,重做 PGSQL Query 面板
-
扩展更新:
- PostGIS 版本至 3.4( EL8/EL9 ),EL7 仍使用 PostGIS 3.3
- 移除
pg_embedding
,因为开发者不再对其进行维护,建议使用pgvector
替换。 - 新扩展(EL):点云插件
pointcloud
支持,Ubuntu原生带有此扩展。 - 新扩展(EL):
imgsmlr
,pg_similarity
,pg_bigm
用于搜索。 - 重新编译
pg_filedump
为 PG 大版本无关的软件包。。 - 新收纳
hydra
列存储扩展,不再默认安装citus
扩展。
-
软件更新:
- Grafana 更新至 v10.1.5
- Prometheus 更新至 v2.47
- Promtail/Loki 更新至 v2.9.1
- Node Exporter 更新至 v1.6.1
- Bytebase 更新至 v2.10.0
- patroni 更新至 v3.1.2
- pgbouncer 更新至 v1.21.0
- pg_exporter 更新至 v0.6.0
- pgbackrest 更新至 v2.48.0
- pgbadger 更新至 v12.2
- pg_graphql 更新至 v1.4.0
- pg_net 更新至 v0.7.3
- ferretdb 更新至 v0.12.1
- sealos 更新至 4.3.5
- Supabase 支持更新至
20231013070755
Ubuntu 支持说明
Pigsty 支持了 Ubuntu 22.04 (jammy) 与 20.04 (focal) 两个 LTS 版本,并提供相应的离线软件安装包。
相比 EL 系操作系统,一些参数的默认值需要显式指定调整,详情请参考 ubuntu.yml
repo_upstream
:按照 Ubuntu/Debian 的包名进行了调整repo_packages
:按照 Ubuntu/Debian 的包名进行了调整node_repo_local_urls
:默认值为['deb [trusted=yes] http://${admin_ip}/pigsty ./']
node_default_packages
:zlib
->zlib1g
,readline
->libreadline-dev
vim-minimal
->vim-tiny
,bind-utils
->dnsutils
,perf
->linux-tools-generic
,- 新增软件包
acl
,确保 Ansible 权限设置正常工作
infra_packages
:所有含_
的包要替换为-
版本,此外postgresql-client-16
用于替换postgresql16
pg_packages
:Ubuntu 下惯用-
替代_
,不需要手工安装patroni-etcd
包。pg_extensions
:扩展名称与EL系不太一样,Ubuntu下缺少passwordcheck_cracklib
扩展。pg_dbsu_uid
: Ubuntu 下 Deb 包不显式指定uid,需要手动指定,Pigsty 默认分配为543
API变更
默认值变化:
-
repo_modules
现在的默认值为infra,node,pgsql,redis,minio
,启用所有上游源 -
repo_upstream
发生变化,现在添加了 Pigsty Infra/MinIO/Redis/PGSQL 模块化软件源 -
repo_packages
发生变化,移除未使用的karma,mtail,dellhw_exporter
,移除了 PG14 主要扩展,新增了 PG16 主要扩展,添加了 virtualenv 包。 -
node_default_packages
发生变化,默认安装python3-pip
组件。 -
pg_libs
:timescaledb
从 shared_preload_libraries 中移除,现在默认不自动启用。 -
pg_extensions
发生变化,不再默认安装 Citus 扩展,默认安装passwordcheck_cracklib
扩展,EL8,9 PostGIS 默认版本升级至 3.4- pg_repack_${pg_version}* wal2json_${pg_version}* passwordcheck_cracklib_${pg_version}* - postgis34_${pg_version}* timescaledb-2-postgresql-${pg_version}* pgvector_${pg_version}*
-
Patroni 所有模板默认移除
wal_keep_size
参数,避免触发 Patroni 3.1.1 的错误,其功能由min_wal_size
覆盖。
87e0be2edc35b18709d7722976e305b0 pigsty-pkg-v2.5.0.el7.x86_64.tgz
e71304d6f53ea6c0f8e2231f238e8204 pigsty-pkg-v2.5.0.el8.x86_64.tgz
39728496c134e4352436d69b02226ee8 pigsty-pkg-v2.5.0.el9.x86_64.tgz
e3f548a6c7961af6107ffeee3eabc9a7 pigsty-pkg-v2.5.0.debian11.x86_64.tgz
1e469cc86a19702e48d7c1a37e2f14f9 pigsty-pkg-v2.5.0.debian12.x86_64.tgz
cc3af3b7c12f98969d3c6962f7c4bd8f pigsty-pkg-v2.5.0.ubuntu20.x86_64.tgz
c5b2b1a4867eee624e57aed58ac65a80 pigsty-pkg-v2.5.0.ubuntu22.x86_64.tgz
v2.5.1
跟进 PostgreSQL v16.1, v15.5, 14.10, 13.13, 12.17, 11.22 小版本例行更新。
现在 PostgreSQL 16 的所有重要扩展已经就位(新增 pg_repack
与 timescaledb
支持)
- 软件更新:
- PostgreSQL to v16.1, v15.5, 14.10, 13.13, 12.17, 11.22
- Patroni v3.2.0
- PgBackrest v2.49
- Citus 12.1
- TimescaleDB 2.13
- Grafana v10.2.0
- FerretDB 1.15
- SealOS 4.3.7
- Bytebase 2.11.1
- 移除 PGCAT 监控面板中查询对
monitor
模式前缀(允许用户将pg_stat_statements
扩展装到别的地方) - 新的配置模板
wool.yml
,为阿里云免费99 ECS 单机针对设计。 - 为 EL9 新增
python3-jmespath
软件包,解决 Ansible 依赖更新后 bootstrap 缺少 jmespath 的问题
31ee48df1007151009c060e0edbd74de pigsty-pkg-v2.5.1.el7.x86_64.tgz
a40f1b864ae8a19d9431bcd8e74fa116 pigsty-pkg-v2.5.1.el8.x86_64.tgz
c976cd4431fc70367124fda4e2eac0a7 pigsty-pkg-v2.5.1.el9.x86_64.tgz
7fc1b5bdd3afa267a5fc1d7cb1f3c9a7 pigsty-pkg-v2.5.1.debian11.x86_64.tgz
add0731dc7ed37f134d3cb5b6646624e pigsty-pkg-v2.5.1.debian12.x86_64.tgz
99048d09fa75ccb8db8e22e2a3b41f28 pigsty-pkg-v2.5.1.ubuntu20.x86_64.tgz
431668425f8ce19388d38e5bfa3a948c pigsty-pkg-v2.5.1.ubuntu22.x86_64.tgz
v2.4:监控云数据库
PostgreSQL 今天发布了新的大版本 16,带来了一系列改进。Pigsty在发布后的1小时内便立即跟进了全新版本 Pigsty v2.4 ,提供了对 PostgreSQL 16 正式版的完整支持。此外在 v2.4 中,还对监控已有PG实例,特别是 RDS for PostgreSQL 与 PolarDB 提供了额外的支持。Redis 监控基于 7.x 进行了改进,提供了自动化的基于 Sentinel 的高可用配置。
Pigsty v2.4 目前仍为 Beta 状态,可以使用以下命令快速上手。文档修缮完成后,将正式发布。
bash -c "$(curl -fsSL https://get.pigsty.cc/beta)"
亮点特性
•PostgreSQL 16 正式发布,Pigsty在发布后1小时内提供支持。•可以监控云数据库,RDS for PostgreSQL,以及 PolarDB,提供全新的 PGRDS 监控面板•正式提供商业支持与咨询服务。并发布首个 LTS 版本,为订阅客户提供最长5年的支持。•新扩展插件: Apache AGE ,在 PostgreSQL 上提供图数据库查询能力•新扩展插件: zhparser,中文分词,用于支持中文全文检索功能•新扩展插件: pg_roaringbitmap,高效实现 RoaringBitmap 位图功能•新扩展插件: pg_embedding,另一种基于 HNSW 索引的向量数据库插件hnsw alternative to pgvector•新扩展插件: pg_tle,由 AWS 出品的可信语言存储过程管理/发布/打包扩展•新扩展插件: pgsql-http,在数据库中使用 SQL 接口直接发送HTTP请求处理响应。•其他新增插件:pg_auth_mon,pg_checksums,pg_failover_slots,pg_readonly,postgresql-unit pg_store_plans,pg_uuidv7,set_user•Redis改进:支持 Redis 哨兵监控,配置主从集群的自动高可用。
API变化
•新增参数,REDIS
.redis_sentinel_monitor
,用于指定 Sentinel 集群监控的主库列表
PG16支持
Pigsty 也许是最早提供 PostgreSQL 16 支持的发行版,从 16 beta1 就开始,因此当 PostgreSQL 16 发布后一个小时,Pigsty 即完成了对正式版本的支持。你已经可以拉起 PostgreSQL 16 的高可用集群,尽管有个别重要扩展还没有在官方的 PGDG 仓库提供,例如 Citus 与 TimescaleDB。但其他一些扩展已经可用:包括 postgis34,pgvector, pg_squeeze,wal2json,pg_cron,以及由 Pigsty 所维护打包的扩展插件:zhparser,roaringbitmap,pg_embedding, pgsql-http 等。
PostgreSQL 16 有一些比较实用的新功能:从库逻辑解码与逻辑复制,针对I/O的新统计视图,全连接的并行执行,更好的冻结性能,符合 SQL/JSON 标准的新函数集,以及在HBA认证中使用正则表达式等等。
不过要注意的是,PGDG 官方仓库目前决定在 PostgreSQL 16 中放弃对 EL7 的支持,所以 PG16 仅在 EL8 与 EL9 及其兼容操作系统发行版中可用。
监控RDS与PolarDB
Pigsty v2.4 提供了对 RDS 监控的支持。特别是还添加了对 PolarDB 云数据库的监控支持。当您只有一个远程 PostgreSQL 连接串时,可以使用这种方式将其纳入 Pigsty 监控。
样例:监控一个一主一从的 PolarDB RDS 集群
Pigsty v2.4 提供了对 RDS 监控的支持。特别是还添加了对 PolarDB 云数据库的监控支持。当您只有一个远程 PostgreSQL 连接串时,可以使用这种方式将其纳入 Pigsty 监控中。Pigsty 提供了两个全新 Dashboard:PGRDS Cluster 与 PGINS Cluster,用于呈现 RDS PG 的完整指标。
商业支持
Pigsty v2.4 是第一个 LTS 版本,将为企业订阅用户提供3年的长时间支持。同时,我们将正式开始对外提供订阅与支持服务,欢迎有需求的用户联系我们采购。
https://pigsty.cc/zh/docs/support/
REDIS高可用
Pigsty v2.4 中,我们提供了一个新的参数 redis_sentinel_monitor ,用于自动配置经典主从 Redis 集群的高可用。该参数只能在 Sentinel 集群上定义,定义中的主库将会自动被哨兵集群所纳管
与此同时,我们也在 Redis 监控中添加了 Sentinel 相关指标与面板,并针对 Redis 7.x 的新特性进行了适配。
新扩展
Pigsty v2.4 提供了一系列的新扩展插件,包括尚未收录在 PGDG 官方仓库中的重要扩展。例如,图数据库插件 Apache AGE,中文分词全文检索插件 zhparser,HTTP插件pgsql-http,可信扩展打包插件 pg_tle ,位图插件 pg_roaringbitmap,以及向量数据库插件 PGVector 的另一种替代实现 pg_embedding ,等等等等。
所有插件都在 EL7 - EL9 上针对 PostgreSQL 12 至 PostgreSQL 16 进行编译打包,不过 EL7 因为编译器版本问题,尚未支持 pg_tle 与 pg_embedding 。这些 RPM 包将由 Pigsty 维护,并放置于 Pigsty 自己的 Yum 源中。
例如,您可以使用 AGE 为 PostgreSQL 加装图数据库能力,创建 Graph,并使用 Cypher 查询语言与 SQL 语言一起探索图数据,实现 Neo4j 的效果。
再比如,您可以使用 zhparser 中文分词插件,将中文文本与查询拆分为关键词,使用 PostgreSQL 经典的全文检索能力,实现搜索引擎与 ElasticSearch 的效果。
更有甚者,你还可以使用 pgsql-http 插件,使用 SQL 接口来发送 HTTP 请求,处理 HTTP 响应。这让数据库可以与外部系统深度集成与交互,打开无尽的想象空间:
您还可以使用 roaringbitmap ,使用极少的资源,高效地进行计数统计:
具体细节就不在此展开了,后面我们会专门出一些文章,介绍这些强力扩展的使用方式。
欢迎大家使用 Pigsty 并提出反馈意见,加讨论群请微信搜索 Pigsty 小助手:pigsty-cc 。
v2.4.0
使用 bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"
快速上手。
最新特性
- PostgreSQL 16 正式发布,Pigsty提供支持。
- 可以监控云数据库,RDS for PostgreSQL,以及 PolarDB,提供全新的 PGRDS 监控面板
- 正式提供商业支持与咨询服务。并发布首个 LTS 版本,为订阅客户提供最长5年的支持。
- 新扩展插件: Apache AGE, openCypher graph query engine on PostgreSQL
- 新扩展插件: zhparser, full text search for Chinese language
- 新扩展插件: pg_roaringbitmap, roaring bitmap for PostgreSQL
- 新扩展插件: pg_embedding, hnsw alternative to pgvector
- 新扩展插件: pg_tle, admin / manage stored procedure extensions
- 新扩展插件: pgsql-http, issue http request with SQL interface
- 新增插件: pg_auth_mon pg_checksums pg_failover_slots pg_readonly postgresql-unit pg_store_plans pg_uuidv7 set_user
- Redis改进:支持 Redis 哨兵监控,配置主从集群的自动高可用。
API变化
- 新增参数,
REDIS
.redis_sentinel_monitor
,用于指定 Sentinel 集群监控的主库列表
问题修复
- 修复 Grafana 10.1 注册数据源时缺少
uid
的问题
MD5 (pigsty-pkg-v2.4.0.el7.x86_64.tgz) = 257443e3c171439914cbfad8e9f72b17
MD5 (pigsty-pkg-v2.4.0.el8.x86_64.tgz) = 41ad8007ffbfe7d5e8ba5c4b51ff2adc
MD5 (pigsty-pkg-v2.4.0.el9.x86_64.tgz) = 9a950aed77a6df90b0265a6fa6029250
v2.3:丰富应用生态
Pigsty v2.3 发布了 🎉,在这个版本中进一步完善了监控系统、应用生态、并跟进 PostgreSQL 例行的小版本更新(CVE修复)。
Pigsty v2.3 跟随 PostgreSQL 主干小版本进行更新,包括 15.4, 14.9, 13.12, 12.16 以及 16.beta3,此更新修复了一个 CVE 安全漏洞。此外高可用管控 Patroni 也升级到 3.1 版本,解决了一些 BUG 。
v2.3 提供了对 FerretDB 的支持,它是一个构建在 PostgreSQL 之上,真正开源的 MongoDB 替代。用户可以使用 MongoDB 客户端访问它,但是真正的数据都存储在底层的 PostgreSQL 里。
v2.3 还默认添加了一款名为 NocoDB 的开源应用:这是 AirTable 的开源替代:这是一个数据库-电子表格的混合体,可以用低代码的方式快速打造一个多人在线协作应用。
Pigsty v2.3 新增了为主机节点集群绑定一个 L2 VIP 的功能,使用 VRRP 协议确保全链路上没有单点,并提供了完整的监控:keepalived_exporter 被用于收集监控数据。而且每一个 Node VIP (keepalived)与 PGSQL VIP (vip-manager)都会添加到 blackbox_exporter 的 ICMP / PING 监控列表中。
在监控系统上,Pigsty v2.3 在 v2.2 的基础上进行了打磨优化:新增了 VIP 监控,VIP 与节点 PING 指标被加入到 NODE / PGSQL 监控的醒目位置;PGSQL 监控新增了锁等待树视图;REDIS 监控进行了风格优化;MinIO 监控适配的新的监控指标名称;MySQL / MongoDB 监控新增了实现存根,为后续实现奠定基础。
顺带一提,PGSQL x Pigsty 交流群新开3群了,对 PostgreSQL 与 Pigsty 感兴趣的朋友可以直接扫码加入(仅限前200人),如果加入不了请微信搜索 pigsty-cc 小助手加入。
MongoDB 支持?
MongoDB 是一个很受欢迎的 NoSQL 文档数据库。但由于开源协议问题(SSPL),与软件定位问题(Postgres发型版),Pigsty 决定使用 FerretDB 来提供对 MongoDB 的支持。FerretDB 是一个有趣的开源项目:它让 PostgreSQL 可以提供 MongoDB 的能力。
MongoDB 与 PostgreSQL 是两个非常不同的数据库系统:MongoDB 使用文档模型,使用专用的查询语言进行交互 。但是鉴于 PostgreSQL 也提供了完整的 JSON/JSONB/GIN 功能支持,所以这么做在理论上也是完全可行的:FerretDB 负责将您的 SON 查询转换为 SQL 查询:
use test-- CREATE SCHEMA test;
db.dropDatabase()-- DROP DATABASE test;
db.createCollection('posts')-- CREATE TABLE posts(_data JSONB,...)
db.posts.insert({title: 'Post One',body: 'Body of post one',category: 'News',tags: ['news', 'events'],user: {name: 'John Doe',status: 'author'},date: Date()})-- INSERT INTO posts VALUES(...);
db.posts.find().limit(2).pretty()-- SELECT * FROM posts LIMIT 2;
db.posts.createIndex({ title: 1 })-- CREATE INDEX ON posts(_data->>'title');
在 Pigsty 定义一个 FerretDB 集群与其他类型的数据库并无二致,您仅需要提供核心的身份参数:集群名称与实例号。需要关注的是 mongo_pgurl 参数,它指定了 FerretDB 底层使用的 PostgreSQL 地址。
ferret: hosts: 10.10.10.45: { mongo_seq: 1 } 10.10.10.46: { mongo_seq: 2 } 10.10.10.47: { mongo_seq: 3 } vars: mongo_cluster: ferret mongo_pgurl: 'postgres://test:[email protected]:5436/test'
您可以直接填入一个已由 Pigsty 创建的任意 PostgreSQL 服务地址。数据库不需要预先配置什么,你只需要确保所使用的用户具有 DDL 权限即可。
配置完成后,使用 ./mongo.yml -l ferret 即可完成安装。当然,如果您更喜欢使用容器,也可以直接 cd pigsty/app/ferretdb; make 使用 docker-compose 拉起 FerretDB 使用。安装完成后,您可以使用任何 MongoDB Client 访问 FerretDB,例如 MongoSH:
mongosh 'mongodb://test:[email protected]:27017/test?authMechanism=PLAIN'
对于那些希望从 MongoDB 迁移到 PostgreSQL 的用户来说,这是一种改造成本极小的折衷手段。Pigsty 同样提供了另一种支持方式 MongoFDW:在 PostgreSQL 中使用 SQL 查询现有的 MongoDB 集群。
新应用:NocoDB
在 Pigsty v2.3 中,添加了对 NocoDB 的内置支持,您可以使用默认的 Docker Compose 模板,一键拉起 NocoDB 并使用内置的 PostgreSQL 作为存储。
NocoDB 是 Airtable 的开源替代品,那 AirTable 又是什么呢?其实有点类似于 Google Docs / 腾讯云文档。但是提供了非常丰富的接口,钩子,可以用来实现一些非常强大的功能。
NocoDB 可以让各种关系型数据库变身成为 Excel ,运行你自己的本地云文档软件。它也可以让用户用低代码的方式实现一些需求:比如你可以把自动生成的表单发送给别人填写,将结果自动整理成为实时共享、可协作、可编程的多维表格。
在 Pigsty 中,拉起 NocoDB 非常容易,只需要一行命令即可。您可以修改 .env 中的 DATABASE_URL 参数来使用不同的数据库。
cd ~/pigsty/app/nocodb; make up
Node VIP 支持
Pigsty v2.3 新增了为主机节点集群绑定一个 L2 VIP 的功能,使用 VRRP 协议确保全链路上没有单点,并提供了完整的监控。
在古早的 Pigsty 版本中(0.5前),曾经提供过基于 Keepalived 的 L2 VIP 功能实现。但随后被 HAProxy + VIP-Manager 所取代:HAProxy 不挑网络,可以进行灵活的健康检查、流量分发,更是提供了一个简单易用的管控界面。而 VIP Manager 则可以将一个 L2 VIP 绑定在数据库集群主库上。
但通用的 L2 VIP 需求仍然是存在的,例如,如果用户选择使用 HAProxy 集群接入,那么 HAProxy 本身的可靠性如何保证?尽管您可以使用 DNS LB 的方式进行切换,但 VRRP 在可靠性与易用性上显然更胜一筹。此外,MinIO / ETCD ,Prometheus 这些组件,有时也会有这样的需求。
想要为集群绑定一个 L2 VIP 其实很简单,只需要启用 vip_enabled,分配一个 VLAN 中唯一的 VirtualRouterID 号与 VIP 地址就可以了。默认情况下,所有集群成员使用 BACKUP 初始状态以非抢占模式工作。你可以通过设置 vip_role 与 vip_preempt 来改变这一行为。
L2 VIP 会自动被纳入监控中。当 MASTER 宕机后, BACKUP 会立即进行接管。
监控系统改进
Pigsty v2.2 基于 Grafana 10 对监控系统进行了彻底的翻新重制。v2.3 在 v2.2 的基础上进行了更多优化。
例如,新增的 NODE VIP 监控面板用于展示一个 VIP 的状态:所属集群/成员,网络RT,KA的状态等等等等。
上图展示了一个 L2 VIP 自动故障转移的现场监控:绑定在 3 节点集群 MinIO 上。当原本的 Master (.27)宕机后,(.26)立即完成接管。
同样的信息也被展示在 NODE 与 PGSQL 监控面板的关键位置:例如,Overview 的实例列表中,现在就会添加 VIP 的快速导航(紫色):
同理,在 NODE Cluster 与 PGSQL Cluster 中也会在醒目处列出 VIP 与所有成员的 ICMP 可达性状态(Ping 网络延迟)。
此外,在 PGCAT 中新增了默认 1s 刷新的 PGCAT Locks 监控面板,可以直观的观察数据库当前活跃的情况,以及锁等待的情况。
锁等待会组织成一棵等待树,用 Level 与缩进标识层次。您可以选择不同的刷新率,最快每秒 10 次。
在 REDIS 监控上,相关的监控面板也统一按照 PGSQL 与 NODE 的风格进行适配与调整:
更丝滑的构建流程
Pigsty v2.2 提供了官方 Yum 源,在 v2.3 中则默认启用了全站 HTTPS。所有
当您选择直接从互联网下载 Pigsty 所需的软件时,可能会遭遇到功夫网的烦恼。例如,默认的 Grafana / Prometheus Yum 源下载速度极慢。除此之外,还有一些零散的 RPM 包需要通过 Web URL 的方式,而不是 repotrack RPM 的方式进行下载。
在 Pigsty v2.2 中,解决了这个问题。Pigsty 提供了一个官方的 yum 源:http://get.pigsty.cc ,并配置为默认的上游源之一。所有零散的 RPM,需要翻墙的 RPM 都放置其中,可以有效加快在线安装/构建速度。
此外, Pigsty 还在 v2.2 中提供了对信创操作系统,统信 UOS 1050e uel20 的支持,满足一些特殊客户的特殊需求。Pigsty 针对这些系统重新编译了 PG相关的 RPM 包,为有需求的客户提供支持。
安装
Pigsty v2.3 的安装命令为:
bash -c “$(curl -fsSL https://get.pigsty.cc/latest)"
一行命令,即可在全新机器上完整安装 Pigsty. 如果您想要尝鲜 beta 版本,将 latest 换为 beta 即可。对于没有互联网访问的特殊环境,您也可以使用以下链接下载 Pigsty,以及打包了所有软件的离线安装包:
https://get.pigsty.cc/v2.3.0/pigsty-v2.3.0.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el7.x86_64.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el8.x86_64.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el9.x86_64.tgz
以上,就是 Pigsty v2.3 带来的变化。
更多细节,请参考 Pigsty 官方文档:https://vonng.github.io/pigsty/ 与 Github Release Note: https://github.com/Vonng/pigsty/releases/tag/v2.3.0
v2.3.0
相关文章:《Pigsty v2.3 发布:应用生态丰富》
发布注记:https://github.com/Vonng/pigsty/releases/tag/v2.3.0
使用 bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"
快速开始。
亮点特性
- INFRA: 添加了对 NODE/PGSQL VIP 的监控支持
- PGSQL: 通过小版本升级修复了 PostgreSQL CVE-2023-39417: 15.4, 14.9, 13.12, 12.16,以及 Patroni v3.1.0
- NODE: 允许用户使用
keepalived
为一个节点集群绑定 L2 VIP - REPO: Pigsty 专用 yum 源优化精简,全站默认使用 HTTPS:
get.pigsty.cc
与demo.pigsty.cc
- APP: 升级
app/bytebase
版本至 v2.6.0,app/ferretdb
版本至 v1.8;添加新的应用模板:nocodb,开源的 Airtable。 - REDIS: 升级版本至 v7.2,并重制了 Redis 监控面板。
- MONGO: 添加基于 FerretDB 1.8 实现的基本支持。
- MYSQL: 添加了 Prometheus / Grafana / CA 中的代码存根,便于后续纳管。
API变化
新增一个新的参数组 NODE
.NODE_VIP
:包含 8 个新参数
NODE
.VIP
.vip_enabled
:在此节点集群上启用 vip 吗?NODE
.VIP
.vip_address
:ipv4 格式的节点 vip 地址,如果启用了 vip,则必需NODE
.VIP
.vip_vrid
:必需,整数,1-255 在相同 VLAN 中应该是唯一的NODE
.VIP
.vip_role
:master/backup,默认为备份,用作初始角色NODE
.VIP
.vip_preempt
:可选,true/false,默认为 false,启用 vip 抢占NODE
.VIP
.vip_interface
:节点 vip 网络接口监听,eth0 默认NODE
.VIP
.vip_dns_suffix
:节点 vip dns 名称后缀,默认为 .vipNODE
.VIP
.vip_exporter_port
:keepalived 导出器监听端口,默认为 9650
MD5 (pigsty-pkg-v2.3.0.el7.x86_64.tgz) = 81db95f1c591008725175d280ad23615
MD5 (pigsty-pkg-v2.3.0.el8.x86_64.tgz) = 6f4d169b36f6ec4aa33bfd5901c9abbe
MD5 (pigsty-pkg-v2.3.0.el9.x86_64.tgz) = 4bc9ae920e7de6dd8988ca7ee681459d
v2.3.1
使用 bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"
快速开始。
最新特性
pgvector
更新至 0.5,添加 hnsw 算法支持。- 支持 PostgreSQL 16 RC1 (el8/el9)
- 默认包中添加了 SealOS 用于快速部署Kubernetes集群。
问题修复
- 修复了
infra
.repo
.repo_pkg
任务:当repo_packages
中包名包含*
时,下载可能会受到/www/pigsty
现有内容的影响。 - 将
vip_dns_suffix
的默认值由.vip
调整为空字符串,即集群本身的名称将默认作为节点集群的 L2 VIP modprobe watchdog
andchown watchdog
ifpatroni_watchdog_mode
isrequired
- 当
pg_dbsu_sudo
=limit
andpatroni_watchdog_mode
=required
时,授予数据库 dbsu 以下命令的 sudo 执行权限/usr/bin/sudo /sbin/modprobe softdog
:在启动 Patroni 服务时确保 softdog 内核模块启用/usr/bin/sudo /bin/chown {{ pg_dbsu }} /dev/watchdog
: 在启动 Patroni 服务时,确保 watchdog 属主正确
文档更新
- 向英文文档中添加了更新内容。
- 添加了简体中文版本的内置文档,修复了 pigsty.cc 文档站的中文文档。
软件更新
- PostgreSQL 16 RC1 for EL8/EL9
- PGVector 0.5.0,支持 hnsw 索引
- TimescaleDB 2.11.2
- grafana 10.1.0
- loki & promtail 2.8.4
- redis-stack 7.2 on el7/8
- mcli-20230829225506 / minio-20230829230735
- ferretdb 1.9
- sealos 4.3.3
- pgbadger 1.12.2
ce69791eb622fa87c543096cdf11f970 pigsty-pkg-v2.3.1.el7.x86_64.tgz
495aba9d6d18ce1ebed6271e6c96b63a pigsty-pkg-v2.3.1.el8.x86_64.tgz
38b45582cbc337ff363144980d0d7b64 pigsty-pkg-v2.3.1.el9.x86_64.tgz
v2.2:监控全面翻新
Pigsty v2.2 发布了 🎉,欢迎大家尝鲜! 地表最强 PostgreSQL 监控系统迎来史诗级重大升级,基于 Grafana v10 彻底重制,将 PG 可观测性拔高到一个全新阶段,带来了全新的用户体验。Demo: http://demo.pigsty.cc 。
此外 Pigsty v2.2 还提供了一个 42 节点的生产仿真环境沙箱模板,支持了 Citus 12,PG 16beta2,提供了使用KVM虚拟机的vagrant模板,为零散/墙外RPM包提供了专用的 Pigsty Yum 源,并支持了国产信创操作系统统信UOS20。
欢迎大家试用尝鲜,提出反馈意见。加 PG x Pigsty 微信讨论群请搜 pigsty-cc 小助手。
另外:8月9号晚7点开源中国出品的直播 《 PostgreSQL vs MySQL》以及8月16号的DTCC 2023,我将代表 PG 一方出战与 MySQL 对喷:谁才是数据库一哥,欢迎大家收看。
监控系统重制:视觉配色
Pigsty v2.2 中,对监控面板进行了彻底的重制,充分利用 Grafana v10 的新特性,为用户带来耳目一新的可视化体验。
最直观的变化是色彩。Pigsty v2.2 采用了全新的配色方案.以 PGSQL Overview 面板为例,新配色方案降低了饱和度,整体视觉体验比旧版本更加协调美观。
Pigsty v2.0 使用Grafana默认的高饱和配色
Pigsty v2.2:失效实例标黑,点击可直达故障现场
在 Pigsty v2.2 的监控面板中使用了 PG蓝,Nginx绿,Redis红,Python黄,Grafana橙等颜色作为基准,这套配色方案的灵感来自这篇文章:SCI,但《天气之子》~当SCI论文插图遇上新海诚天气之子配色 https://zhuanlan.zhihu.com/p/619556088 。
监控系统重制:集群导航
当然除了配色,v2.2 也在内容编排和布局上重新进行了设计。例如,使用 Stats 色块统计替代了大量表格式导航,让有问题的服务能够在首屏即可一目了然。点击异常色块即可直达故障现场。
当然,老式的导航表格可以提供更丰富的信息,也并没有移除,而是移动到了专门的 Instances / Members 分栏中去。让我们以最常用的 PGSQL Cluster 面板为例:
首屏是基于色块的图元导航,展现了集群组件存活状态与服务可用性,核心指标,负载水平与告警事件图。且提供了到集群内部资源 —— 实例,连接池,负载均衡器,服务,数据库的快速导航
PGSQL Cluster 的表格式导航
具体的集群资源表,则是在第二栏中,以备查阅详情。配合后面的 指标栏与日志栏,完整的呈现了一个 PostgreSQL 数据库集群的核心状态。
监控系统重制:实例
PGSQL Instance 展现了一个实例的详细状态,在 v2.2 中也进行了重制。最基本的设计原则就是:不是蓝/绿色的状态才需要关注。这样通过颜色视觉编码,用户可以在事故分析时快速定位一个数据库实例的故障根因。
其他的实例,主机节点,ETCD,MinIO,Redis,也都使用了类似的设计,例如 Node Instance 的首屏就是这样的。
Node Instance 的指标部分基本保持不变,但首屏概览部分进行了重制。MinIO Overview 亦然。
Etcd Overview 则使用 State Timeline 来可视化 DCS 服务的可用性状态。例如下图展现了一个模拟 etcd 故障的现场:在一个5节点的 ETCD 集群中依次关闭各个实例,集群可以容忍两个节点故障,但3个节点故障将导致 ETCD 服务整体不可用(黄色的条转为暗蓝色,代表 ETCD 服务整体不可用)。
当 DCS 出现故障时,依赖 ETCD 进行高可用的 PostgreSQL 集群默认会启用 FailSafeMode:在确认所有集群成员可达,不是自身而是DCS故障的前提下,可以避免出现主库降级的故障。而这一点,也会在 PG 的监控中体现出来
监控系统重制:服务
另一个进行重新设计的部分是 Service 与 Proxy 。Service 面板现在添加了关于服务的重要信息:SLI ,通过条状的 Statetimeline,用户可以直观的看出服务中断情况,获取服务可用性指标,并理解负载均衡器与后端真实数据库服务器的状态。
本例中,对 pg-test 集群的四个 HAProxy,分别进行了 排干,设置维护状态操作,然后关闭后端数据库服务器。只有当一个集群的全部实例都下线后, pg-test-replica 这个只读服务才会进入不可用状态。
这是 pg-test 集群 1 号 HAProxy 负载均衡器的监控面板,每一个由其承载的服务都会列于其中,展示后端服务器状态并计算 SLI。HAProxy 本身的状态与监控放置在 Node Haproxy 监控面板中。
在全局总览中,可以看到 Pigsty 中所有数据库服务的整体状态时间线与 SLI 指标。
监控系统重制:数据库统计
在 Pigsty 中,除了会对数据库服务器进行监控外,也会对数据库服务器所承载的逻辑对象 —— 数据库,表,查询,索引等逻辑。
PGSQL Databases 展示了集群层面的数据库统计指标。例如,在 pg-test 集群中有4个数据库实例,与一个数据库 test ,而这里就展示出了这4个实例数据库指标的水平对比。
用户可以进一步下钻到单个数据库实例内部的统计,也就是 PGSQL Database 面板。这个面板提供了一些关于数据库与连接池的关键指标,但最重要的是,PGSQL Database 面板提供了对数据库内最活跃醒目的表与查询的索引 —— 这是两类最为重要的库内对象。
用户可以进一步下钻到单个数据库实例内部的统计,也就是 PGSQL Database 面板。这个面板提供了一些关于数据库与连接池的关键指标,但最重要的是,PGSQL Database 面板提供了对数据库内最活跃醒目的表与查询的索引 —— 这是两类最为重要的库内对象。
监控系统重制:系统目录
在 Pigsty 中,除了使用 pg exporter 采集到的指标数据之外,还会使用另外一类可选的重要补充数据 —— 系统目录。这也是 PGCAT 系列 Dashboard 所做的事情。PGCAT Instance 将直接访问数据库系统目录(使用最多8条监控只读连接),获取并呈现所需的信息。
例如,您可以获取数据库当前正在运行的活动,按照各种指标对数据库中的慢查询,无用索引,全表扫描进行定位与分析。查阅数据库的角色,会话,复制情况,配置修改状态,内存使用详情,备份与持久化的具体细节。
如果说 PGCAT Instance 关注的是数据库服务器本身,那么 PGCAT Database 就更关注单个数据库内部的对象细节:例如 Schema,Table,Index,膨胀,Top SQL, Top Table,等等。
每一个 Schema,Table ,Index 都可以点击下钻,进入更详细的专用面板中。例如 PGCAT Schema,就进一步展现了一个架构模式内的对象细节。
数据库内的查询,也按照执行计划进行聚合,便于用户找到问题 SQL,快速定位慢查询问题。
监控系统重制:表与查询
在 Pigsty 中,您可以查阅一张表的方方面面。PGCAT Table 面板可以让您查看表的元数据,上面的索引,每一列的统计信息,以及相关的查询。
当然,您也可以使用 PGSQL Table 面板,从指标的维度,查阅一张表在任意历史时间段上的关键指标。点击表名即可轻松在两个视角进行切换。
相应地,您也可以获取(具有相同执行计划)的同一类 SQL 的详细信息。
在 Pigsty 中,还有许多关于特定主题的 Dashboard。限于篇幅,关于监控系统的介绍就是这些。最直观的体验方式,就是访问 Pigsty 提供的公开 Demo:http://demo.pigsty.cc ,亲自上手把玩一番。虽然这只是一个4台1C虚拟机的简陋环境,但用来展示Pigsty最基本的监控系统能力已经是足够了。
大号仿真环境
Pigsty 提供了一个基于 Vagrant 与 Virtualbox 的沙箱环境,可以跑在你的笔记本电脑/Mac上,有一个 1 节点的最小版本,和一个4节点的完整版本,用与演示与学习,而现在 v2.2 中又多了一个 42 节点的生产仿真版本沙箱。
生产沙箱的所有细节都由 prod.yml 这个五百行不到的配置文件描述,它可以轻松跑在一台普通的服务器物理机上,而拉起它过程与4节点并无二致:make prod install 即可完工。
Pigsty v2.2 提供了基于 libvirt 的 Vagrantfile 模板,您只需要调整上面配置中的机器清单,即可一键创建出所需的虚拟机来。所有东西都可以轻松跑在一台 Dell R730 48C 256G 物理机上,二手价不到三千元。当然,您依然可以使用 Pigsty Terraform 模板一键在云厂商上拉起虚拟机。
安装完成后环境如下所示,包含两节点的监控基础设施,一主一备。5节点的专用 etcd 集群,3 节点的样例 MinIO 集群提供对象存储服务存放 PG 备份,还有一个两节点的专用 HAProxy 集群,可以统一为数据库服务提供负载均衡。
在此之上,还有3套Redis数据库集群与10套规格各异的 PostgreSQL 数据库集群与,其中还包括一套开箱即用的 5 分片的 Citus 12 分布式 PostgreSQL 集群。
![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)
这个配置是中大型企业运行管理大规模数据库集群的参考样例,而您可以在单台物理服务器上用半个小时完整一键拉起。
更丝滑的构建流程
当您选择直接从互联网下载 Pigsty 所需的软件时,可能会遭遇到功夫网的烦恼。例如,默认的 Grafana / Prometheus Yum 源下载速度极慢。除此之外,还有一些零散的 RPM 包需要通过 Web URL 的方式,而不是 repotrack RPM 的方式进行下载。
在 Pigsty v2.2 中,解决了这个问题。Pigsty 提供了一个官方的 yum 源:http://get.pigsty.cc ,并配置为默认的上游源之一。所有零散的 RPM,需要翻墙的 RPM 都放置其中,可以有效加快在线安装/构建速度。
此外, Pigsty 还在 v2.2 中提供了对信创操作系统,统信 UOS 1050e uel20 的支持,满足一些特殊客户的特殊需求。Pigsty 针对这些系统重新编译了 PG相关的 RPM 包,为有需求的客户提供支持。
安装
从 v2.2 开始,Pigsty 的安装命令变为:
bash -c “$(curl -fsSL http://get.pigsty.cc/latest)"
一行命令,即可在全新机器上完整安装 Pigsty. 如果您想要尝鲜 beta 版本,将 latest 换为 beta 即可。对于没有互联网访问的特殊环境,您也可以使用以下链接下载 Pigsty,以及打包了所有软件的离线安装包:
http://get.pigsty.cc/v2.2.0/pigsty-v2.2.0.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el7.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el8.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el9.x86_64.tgz
以上,就是 Pigsty v2.2 带来的变化。
更多细节,请参考 Pigsty 官方文档:https://vonng.github.io/pigsty/ 与 Github Release Note: https://github.com/Vonng/pigsty/releases/tag/v2.2.0
v2.2.0
相关文章:《Pigsty v2.2 发布 —— 监控系统大升级》
发布注记:https://github.com/Vonng/pigsty/releases/tag/v2.2.0
快速开始: bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"
亮点特性
- 监控面板重做: https://demo.pigsty.cc
- Vagrant沙箱重做: 支持 libvirt 与新的配置模板
- Pigsty EL Yum 仓库: 统一收纳零碎 RPM,简化安装构建流程。
- 操作系统兼容性: 新增信创操作系统 UOS-v20-1050e 支持
- 新的配置模板:42 节点的生产仿真配置
- 统一使用官方 PGDG citus 软件包(el7)
软件升级
- PostgreSQL 16 beta2
- Citus 12 / PostGIS 3.3.3 / TimescaleDB 2.11.1 / PGVector 0.44
- patroni 3.0.4 / pgbackrest 2.47 / pgbouncer 1.20
- grafana 10.0.3 / loki/promtail/logcli 2.8.3
- etcd 3.5.9 / haproxy v2.8.1 / redis v7.0.12
- minio 20230711212934 / mcli 20230711233044
Bug修复
- 修复了 Docker 组权限的问题 [29434bd]https://github.com/Vonng/pigsty/commit/29434bdd39548d95d80a236de9099874ed564f9b
- 将
infra
操作系统用户组作为额外的组,而不是首要用户组。 - 修复了 Redis Sentinel Systemd 服务的自动启用状态 5c96feb
- 放宽了
bootstrap
&configure
的检查,特别是当/etc/redhat-release
不存在的时候。 - 升级到 Grafana 10,修复了 Grafana 9.x CVE-2023-1410
- 在 CMDB
pglog
模式中添加了 PG 14 - 16 的 command tags 与 错误代码。
API变化
新增1个变量
INFRA
.NGINX
.nginx_exporter_enabled
: 现在用户可以通过设置这个参数来禁用 nginx_exporter 。
默认值变化:
repo_modules
:node,pgsql,infra
: redis 现在由 pigsty-el 仓库提供,不再需要redis
模块。repo_upstream
:- 新增
pigsty-el
: 与具体EL版本无关的RPM: 例如 grafana, minio, pg_exporter, 等等…… - 新增
pigsty-misc
: 与具体EL版本有关的RPM: 例如 redis, prometheus 全家桶,等等…… - 移除
citus
: 现在 PGDG 中有完整的 EL7 - EL9 citus 12 支持 - 移除
remi
: redis 现在由 pigsty-el 仓库提供,不再需要redis
模块。
- 新增
repo_packages
:- ansible python3 python3-pip python3-requests python3.11-jmespath dnf-utils modulemd-tools # el7: python36-requests python36-idna yum-utils
- grafana loki logcli promtail prometheus2 alertmanager karma pushgateway node_exporter blackbox_exporter nginx_exporter redis_exporter
- redis etcd minio mcli haproxy vip-manager pg_exporter nginx createrepo_c sshpass chrony dnsmasq docker-ce docker-compose-plugin flamegraph
- lz4 unzip bzip2 zlib yum pv jq git ncdu make patch bash lsof wget uuid tuned perf nvme-cli numactl grubby sysstat iotop htop rsync tcpdump
- netcat socat ftp lrzsz net-tools ipvsadm bind-utils telnet audit ca-certificates openssl openssh-clients readline vim-minimal
- postgresql13* wal2json_13* pg_repack_13* passwordcheck_cracklib_13* postgresql12* wal2json_12* pg_repack_12* passwordcheck_cracklib_12* postgresql16* timescaledb-tools
- postgresql15 postgresql15* citus_15* pglogical_15* wal2json_15* pg_repack_15* pgvector_15* timescaledb-2-postgresql-15* postgis33_15* passwordcheck_cracklib_15* pg_cron_15*
- postgresql14 postgresql14* citus_14* pglogical_14* wal2json_14* pg_repack_14* pgvector_14* timescaledb-2-postgresql-14* postgis33_14* passwordcheck_cracklib_14* pg_cron_14*
- patroni patroni-etcd pgbouncer pgbadger pgbackrest pgloader pg_activity pg_partman_15 pg_permissions_15 pgaudit17_15 pgexportdoc_15 pgimportdoc_15 pg_statement_rollback_15*
- orafce_15* mysqlcompat_15 mongo_fdw_15* tds_fdw_15* mysql_fdw_15 hdfs_fdw_15 sqlite_fdw_15 pgbouncer_fdw_15 multicorn2_15* powa_15* pg_stat_kcache_15* pg_stat_monitor_15* pg_qualstats_15 pg_track_settings_15 pg_wait_sampling_15 system_stats_15
- plprofiler_15* plproxy_15 plsh_15* pldebugger_15 plpgsql_check_15* pgtt_15 pgq_15* pgsql_tweaks_15 count_distinct_15 hypopg_15 timestamp9_15* semver_15* prefix_15* rum_15 geoip_15 periods_15 ip4r_15 tdigest_15 hll_15 pgmp_15 extra_window_functions_15 topn_15
- pg_background_15 e-maj_15 pg_catcheck_15 pg_prioritize_15 pgcopydb_15 pg_filedump_15 pgcryptokey_15 logerrors_15 pg_top_15 pg_comparator_15 pg_ivm_15* pgsodium_15* pgfincore_15* ddlx_15 credcheck_15 safeupdate_15 pg_squeeze_15* pg_fkpart_15 pg_jobmon_15
repo_url_packages
:node_default_packages
:- lz4,unzip,bzip2,zlib,yum,pv,jq,git,ncdu,make,patch,bash,lsof,wget,uuid,tuned,nvme-cli,numactl,grubby,sysstat,iotop,htop,rsync,tcpdump
- netcat,socat,ftp,lrzsz,net-tools,ipvsadm,bind-utils,telnet,audit,ca-certificates,openssl,readline,vim-minimal,node_exporter,etcd,haproxy,python3,python3-pip
infra_packages
- grafana,loki,logcli,promtail,prometheus2,alertmanager,karma,pushgateway
- node_exporter,blackbox_exporter,nginx_exporter,redis_exporter,pg_exporter
- nginx,dnsmasq,ansible,postgresql15,redis,mcli,python3-requests
PGSERVICE
in.pigsty
被移除了,取而代之的是PGDATABASE=postgres
,这用户只需 IP 地址就可以从管理节点访问特定实例。
目录结构变化:
bin/dns
andbin/ssh
现在被移动到vagrant/
目录中。
MD5 (pigsty-pkg-v2.2.0.el7.x86_64.tgz) = 5fb6a449a234e36c0d895a35c76add3c
MD5 (pigsty-pkg-v2.2.0.el8.x86_64.tgz) = c7211730998d3b32671234e91f529fd0
MD5 (pigsty-pkg-v2.2.0.el9.x86_64.tgz) = 385432fe86ee0f8cbccbbc9454472fdd
v2.1:向量+PG全系支持!
随着 PostgreSQL 夏季小版本例行更新,与 16 Beta 的发布,Pigsty 也紧随PG社区发布了 v2.1 版本,这次更新支持了 16 Beta1 的高可用与新监控指标,也提供了 PG 12 - 15 版本的支持。同时,AI 向量扩展插件 PGVector 也于 2.0.2 正式进入 Pigsty 中并默认启用。
https://github.com/Vonng/pigsty/releases/tag/v2.1.0
向量数据库扩展 PGVector
最近向量数据库非常火爆,市面上有许多专用向量数据库产品,商业的有 Pinecone,Zilliz,开源的有 Milvus,Qdrant 等。在所有现有向量数据库中,pgvector 是一个独特的存在 —— 它选择了在现有的世界上最强大的开源关系型数据库 PostgreSQL 上以插件的形式添砖加瓦,而不是另起炉灶做成另一个专用的“数据库”。毕竟从零开始做好一个TP数据库还是非常难的。
pgvector 有着优雅简单易用的接口,不俗的性能表现,更是继承了PG生态的超能力集合。在以前,PGVECTOR 需要自行下载编译安装,所以我提了一个 Issue 把它加入到 PostgreSQL 全球开发组的官方仓库中。你只需要正常使用 PGDG 源即可直接 yum install pgvector_15
完成安装。在安装了 pgvector
的数据库实例中使用 CREATE EXTENSION vector
即可启用此扩展。
但是使用 Pigsty,你甚至都不需要这个过程。在3月底发布的 Pigsty v2.0.2 中,就已经默认集成并安装了 PGVector 扩展。你只需要 CREATE EXTENSION vector
即可开箱即用。PGVector 的使用方式,应用场景案例,工作原理,请参考本号前一篇文章:《AI大模型与向量数据库 PGVECTOR》。
同时透露一下,我们正在制作一个功能、性能、易用性更好的 PGVector 实现,将于后续版本纳入 Pigsty 中,敬请期待。
PG16支持与可观测性
Pigsty 也许是最快提供 PostgreSQL 16 支持的发行版 —— 尽管目前仍然处于 Beta 状态,一些功能扩展仍然没有跟进,但你已经可以拉起 PostgreSQL 16 的高可用集群体验测试起来。PostgreSQL 16 有一些比较实用的新功能:从库逻辑解码与逻辑复制,针对I/O的新统计视图,全连接的并行执行,更好的冻结性能,符合 SQL/JSON 标准的新函数集,以及在HBA认证中使用正则表达式。
Pigsty 特别关注 PostgreSQL 16 中的可观测性改进,新的 pg_stat_io
视图,让用户可以直接从数据库内访问到重要的 I/O 统计指标,对于性能优化,故障分析具有非常重要的意义。在以前,用户只能在数据库/BGWriter上看到有限的统计指标,想要更精细的统计数据,只能关联操作系统层面的I/O指标进行分析。现在,你可以从后端进程类型/关系类型/操作类型三个维度,对读/写/追加/回刷/Fsync/命中/逐出等行为进行深入的洞察。
另外一个非常有价值的可观测性改进点是,pg_stat_all_tables
与 pg_stat_all_indexes
会记录最后一次顺序扫描 / 索引扫描的时间。尽管这个功能在 Pigsty 的监控系统中可以通过扫描统计图表实现,但官方提供直接的支持肯定更好:用户可以直观地得出一些结论:比如某一个索引是不是没用上可以考虑移除。此外,n_tup_newpage_upd
指标可以告诉我们表上有多少行在更新时不是在页内原地更新,而是移动到了一个新的页面上,这个指标对于优化 UPDATE 性能,调整表填充因子具有重要的参考价值。
PGSQL 12 - 15 支持
Pigsty 从 PostgreSQL 10 开始提供支持,但一直紧跟社区主干的最新版本。但用户确实会有使用旧版本的需求 —— 有的是外部组件最高就支持某个版本,有的是对最新的大版本有所顾虑希望谨慎升级,有的是因为想要从现有的低版本集群创建一个由 Pigsty 托管的 Standby Cluster 完成迁移。不管怎么样,对于较低版本的 PostgreSQL 支持是一个来自用户侧的真实需求。因此我们在 2.1 中,加入了 PG 12 -14 三个大版本的支持,并默认纳入离线软件包中。
每个大版本除了核心的软件包,也包括了相应版本的重要扩展插件:地理空间插件 PostGIS,时序数据库插件 TimescaleDB,分布式数据库插件 citus,向量数据库插件 PGVector,在线垃圾清理插件 pg_repack,CDC逻辑解码插件 wal2json 与 pglogical,定时任务插件 pg_cron,以及强制检查密码强度的插件 passwordcheck_cracklib ,确保每个大版本都可以享受到 PostgreSQL 生态的核心能力。
PostgreSQL 11 其实也可以支持,但因为有一些扩展缺失,加之即将进入 EOL,所以就排除在本次更新中。对于新尝试 PostgreSQL 的用户,我们始终建议从最新的稳定大版本(目前为15)开始使用。如果您真的希望使用 10 或 11,也可以参照教程调整仓库中的软件包版本自行构建。
Grafana监控系统改进
随着 Grafana 版本升级至 v9.5.3 , 全新的导航栏,面板布局让 Pigsty 的监控系统 UI 也随之焕然一新。所有监控面板都根据新 UI 的特性进行了微调与适配,一些不和谐的样式问题也得到了修正。
在 Pigsty 2.1 中引入了4个来自 volkovlabs
的 Grafana 扩展插件。使用 Grafana + Echarts 进行数据可视化与分析一直是 Pigsty 所倡导和支持的一个功能亮点,奈何作者精力有限,难以在这个方向投入资源。
在 v2.1 发布前,我很高兴看到一个由专人维护的 Apache Echarts 面板插件 —— 终于可以松一口气,让自己维护的 echarts panel 退休了。有一个专业的创业团队选择这个方向进行拓展,并开发出一系列实用的扩展插件。可以使用后端数据渲染 SVG 与文本的动态文本插件,提供表单提交功能的 Form 插件,动态数据日历插件,等等等等。
此外,Pigsty 还专门添加了 echarts-gl
的扩展资源,放置于 Grafana public/chart
目录下,允许用户使用 Pigsty 自带的 Grafana,无需互联网访问即可实现出 Apache Echarts 官方文档库中炫酷的三维地球等面板。
其他便利工具的改进
在 Pigsty 2.1 中,添加了 3 个便利命令,profile
,validate
,repo-add
。
bin/validate
命令接受一个配置文件路径作为输入,它用来检查验证 Pigsty 配置文件的正确性。常见的问题,例如在不同集群里错误写入了同一个 IP,一些配置项的名称,类型错误,都可以自动检查抛出,更不用说最常见的YAML缩进格式错误了。用户修改配置之后,可以使用 bin/validate
确保自己的修改是有效合法的。
bin/repo-add
命令用于手工调整节点上的 YUM 仓库。当用户想要往本地软件仓库添加一些新的软件包时,经常需要使用 Ansible 剧本的子任务来进行管理,较为不便,现在您可以使用包装的命令行工具来完成这一点:比如,bin/repo-add infra node,pgsql
就会向 infra
分组的节点上添加分类为 node
与 pgsql
的软件源。
bin/profile
命令可以便捷地针对某个 IP 地址上特定 PID 的进程进行 perf
采样1分钟,并在 Pigsty Web服务器目录生成火焰图,用户可以直接从网页界面打开浏览,这个功能对于分析数据库内部的故障与性能瓶颈尤为有用。
v2.1.0
相关文章:Pigsty v2.1 发布:向量扩展 / PG12-16 支持
发布注记:https://github.com/Vonng/pigsty/releases/tag/v2.1.0
Highlight
- PostgreSQL 16 beta 支持, 以及 12 ~ 15 的支持.
- 为 PG 12 - 15 新增了 PGVector 扩展支持,用于存储 AI 嵌入。
- 为 Grafana 添加了额外6个默认的扩展面板/数据源插件。
- 添加
bin/profile
脚本用于执行远程 Profiling ,生成火焰图。 - 添加
bin/validate
用于校验pigsty.yml
配置文件合法性。 - 添加
bin/repo-add
用于快速向节点添加 Yum 源定义。 - PostgreSQL 16 可观测性:添加了
pg_stat_io
支持与相关监控面板
软件升级
- PostgreSQL 15.3 , 14.8, 13.11, 12.15, 11.20, and 16 beta1
- pgBackRest 2.46 / pgbouncer 1.19
- Redis 7.0.11
- Grafana v9.5.3
- Loki / Promtail / Logcli 2.8.2
- Prometheus 2.44
- TimescaleDB 2.11.0
- minio-20230518000536 / mcli-20230518165900
- Bytebase v2.2.0
改进增强
- 当添加本地用户的公钥时,所有的
id*.pub
都会被添加到远程机器上(例如椭圆曲线算法生成的密钥文件)
v2.0:开源RDS PG替代
2023/02/28,Pigsty v2.0.0 正式发布,带来了一系列重大的功能更新。
现在 PIGSTY 是 “PostgreSQL In Great STYle"的首字母缩写,即”全盛状态的 PostgreSQL"。而 Pigsty 的定位也不再是 “开箱即用的PostgreSQL数据库发行版”,变成了 “Me Better 开源 RDS PG 替代”。
明人不说暗话,这是一个很有野心的目标:推翻云数据库垄断,砸烂****RDS的饭碗!详见:《云数据库是不是智商税?》
2.0 新特性
Pigsty 是一个更好的、****本地优先的,开源 RDS for PostgreSQL 替代。
强力的发行版
彻底释放世界上最先进的关系型数据库的力量!
PostgreSQL 是一个足够完美的数据库内核,但它需要更多工具与系统的配合,才能成为一个足够好的数据库服务(RDS),而 Pigsty 帮助 PostgreSQL 完成这一步飞跃。
Pigsty 深度整合了 PostgreSQL 生态的三大核心扩展插件 PostGIS,TimescaleDB,Citus,并确保它们可以协同工作,提供分布式的时序地理空间数据库能力。Pigsty 还提供了运行企业级 RDS 服务的所需软件,打包所有依赖为离线软件包,所有组件均可在无需互联网访问的情况下一键完成安装部署,进入生产可用状态。
在 Pigsty 中功能组件被抽象 模块,可以自由组合以应对多变的需求场景。INFRA
模块带有完整的现代监控技术栈,而 NODE
模块则将节点调谐至指定状态并纳入监控。在多个节点上安装 PGSQL
模块会自动组建出一个基于主从复制的高可用数据库集群,而同样的 ETCD
模块则为数据库高可用提供共识与元数据存储。可选的 MINIO
模块可以用作图像视频等大文件存储并可选用为数据库备份仓库。与 PG 有着极佳相性的 REDIS
亦为 Pigsty 所支持,更多的模块(如GPSQL
, MYSQL
, KAFKA
)将会在后续加入,你也可以开发自己的模块并自行扩展 Pigsty 的能力。
惊艳的观测能力
使用现代开源可观测性技术栈,提供无与伦比的监控最佳实践!
Pigsty 提供了基于开源的 Grafana / Prometheus 可观测性技术栈做监控的最佳实践:Prometheus 用于收集监控指标,Grafana 负责可视化呈现,Loki 用于日志收集与查询,Alertmanager 用于告警通知。PushGateway 用于批处理任务监控,Blackbox Exporter 负责检查服务可用性。整套系统同样被设计为一键拉起,开箱即用的 INFRA 模块。
Pigsty 所管理的任何组件都会被自动纳入监控之中,包括主机节点,负载均衡 HAProxy,数据库 Postgres,连接池 Pgbouncer,元数据库 ETCD,KV缓存 Redis,对象存储 MinIO,……,以及整套监控基础设施本身。大量的 Grafana 监控面板与预置告警规则会让你的系统观测能力有质的提升,当然,这套系统也可以被复用于您的应用监控基础设施,或者监控已有的数据库实例或 RDS。
无论是故障分析还是慢查询优化、无论是水位评估还是资源规划,Pigsty 为您提供全面的数据支撑,真正做到数据驱动。在 Pigsty 中,超过三千类监控指标被用于描述整个系统的方方面面,并被进一步加工、聚合、处理、分析、提炼并以符合直觉的可视化模式呈现在您的面前。从全局大盘总揽,到某个数据库实例中单个对象(表,索引,函数)的增删改查详情都能一览无余。您可以随意上卷下钻横向跳转,浏览系统现状与历史趋势,并预测未来的演变。详见公开演示:http://demo.pigsty.cc。
久经考验的可靠性
开箱即用的高可用与时间点恢复能力,确保你的数据库坚如磐石!
对于软件缺陷或人为误操作造成的删表删库,Pigsty 提供了开箱即用的 PITR 时间点恢复能力,无需额外配置即默认启用。只要存储空间管够,基于 pgBackRest
的基础备份与 WAL 归档让您拥有快速回到过去任意时间点的能力。您可以使用本地目录/磁盘,亦或专用的 MinIO 集群或 S3 对象存储服务保留更长的回溯期限,丰俭由人。
更重要的是,Pigsty 让高可用与故障自愈成为 PostgreSQL 集群的标配,基于 patroni
, etcd
, 与 haproxy
打造的故障自愈架构,让您在面对硬件故障时游刃有余:主库故障自动切换的 RTO < 30s,一致性优先模式下确保数据零损失 RPO = 0。只要集群中有任意实例存活,集群就可以对外提供完整的服务,而客户端只要连接至集群中的任意节点,即可获得完整的服务。
Pigsty 内置了 HAProxy 负载均衡器用于自动流量切换,提供 DNS/VIP/LVS 等多种接入方式供客户端选用。故障切换与主动切换对业务侧除零星闪断外几乎无感知,应用不需要修改连接串重启。极小的维护窗口需求带来了极大的灵活便利:您完全可以在无需应用配合的情况下滚动维护升级整个集群。硬件故障可以等到第二天再抽空善后处置的特性,让研发,运维与 DBA 都能安心睡个好觉。许多大型组织与核心机构已经在生产环境中长时间使用 Pigsty ,最大的部署有 25K CPU 核心与 200+ PostgreSQL 实例,在这一部署案例中, Pigsty 在三年内经历了数十次硬件故障与各类事故,但依然可以保持 99.999% 以上的整体可用性。
简单易用可维护
Infra as Code, 数据库即代码,声明式的API将数据库管理的复杂度来封装。
Pigsty 使用声明式的接口对外提供服务,将系统的可控制性拔高到一个全新水平:用户通过配置清单告诉 Pigsty “我想要什么样的数据库集群”,而不用去操心到底需要怎样去做。从效果上讲,这类似于 K8S 中的 CRD 与 Operator,但 Pigsty 可用于任何节点上的数据库与基础设施:不论是容器,虚拟机,还是物理机。
无论是创建/销毁集群,添加/移除从库,还是新增数据库/用户/服务/扩展/黑白名单规则,您只需要修改配置清单并运行 Pigsty 提供的幂等剧本,而 Pigsty 负责将系统调整到您期望的状态。用户无需操心配置的细节,Pigsty将自动根据机器的硬件配置进行调优,您只需要关心诸如集群叫什么名字,有几个实例放在哪几台机器上,使用什么配置模版:事务/分析/核心/微型,这些基础信息,研发也可以自助服务。但如果您愿意跳入兔子洞中,Pigsty 也提供了丰富且精细的控制参数,满足最龟毛 DBA 的苛刻定制需求。
除此之外,Pigsty 本身的安装部署也是一键傻瓜式的,所有依赖被预先打包,在安装时可以无需互联网访问。而安装所需的机器资源,也可以通过 Vagrant 或 Terraform 模板自动获取,让您在十几分钟内就可以从零在本地笔记本或云端虚拟机上拉起一套完整的 Pigsty 部署。本地沙箱环境可以跑在1核2G的微型虚拟机中,提供与生产环境完全一致的功能模拟,可以用于开发、测试、演示与学习。
扎实的安全性
加密备份一应俱全,只要硬件与密钥安全,您无需操心数据库的安全性。
每套 Pigsty 部署都会创建一套自签名的 CA 用于证书签发,所有的网络通信都可以使用 SSL 加密。数据库密码使用合规的 scram-sha-256
算法加密存储,远端备份会使用 AES-256
算法加密。此外还针对 PGSQL 提供了一套开箱即用的的访问控制体系,足以应对绝大多数应用场景下的安全需求。
Pigsty 针对 PostgreSQL 提供了一套开箱即用,简单易用,精炼灵活的,便于扩展的访问控制体系,包括职能分离的四类默认角色:读(DQL) / 写(DML) / 管理(DDL) / 离线(ETL) ,与四个默认用户:dbsu / replicator / monitor / admin。所有数据库模板都针对这些角色与用户配置有合理的默认权限,而任何新建的数据库对象也会自动遵循这套权限体系,而客户端的访问则受到一套基于最小权限原则的设计的 HBA 规则组限制,任何敏感操作都会记入日志审计。
任何网络通信都可以使用 SSL 加密,需要保护的敏感管理页面与API端点都受到多重保护:使用用户名与密码进行认证,限制从管理节点/基础设施节点IP地址/网段访问,要求使用 HTTPS 加密网络流量。Patroni API 与 Pgbouncer 因为性能因素默认不启用 SSL ,但亦提供安全开关便于您在需要时开启。合理配置的系统通过等保三级毫无问题,只要您遵循安全性最佳实践,内网部署并合理配置安全组与防火墙,数据库安全性将不再是您的痛点。
广泛的应用场景
使用预置的Docker模板,一键拉起使用PostgreSQL的海量软件!
在各类数据密集型应用中,数据库往往是最为棘手的部分。例如 Gitlab 企业版与社区版的核心区别就是底层 PostgreSQL 数据库的监控与高可用,如果您已经有了足够好的本地 PG RDS,又为什么要为软件自带的土法手造数据库掏钱?
Pigsty 提供了 Docker 模块与大量开箱即用的 Compose 模板。您可以使用 Pigsty 管理的高可用 PostgreSQL (以及 Redis 与 MinIO )作为后端存储,以无状态的模式一键拉起这些软件:Gitlab、Gitea、Wiki.js、Odoo、Jira、Confluence、Habour、Mastodon、Discourse、KeyCloak 等等。如果您的应用需要一个靠谱的 PostgreSQL 数据库, Pigsty 也许是最简单的获取方案。
Pigsty 也提供了与 PostgreSQL 紧密联系的应用开发工具集:PGAdmin4、PGWeb、ByteBase、PostgREST、Kong、以及 EdgeDB、FerretDB、Supabase 这些使用 PostgreSQL 作为存储的"上层数据库"。更奇妙的是,您完全可以基于 Pigsty 内置了的 Grafana 与 Postgres ,以低代码的方式快速搭建起一个交互式的数据应用来,甚至还可以使用 Pigsty 内置的 ECharts 面板创造更有表现力的交互可视化作品。
开源免费的自由软件
Pigsty是基于 AGPLv3 开源的自由软件,由热爱 PostgreSQL 的社区成员用热情浇灌
Pigsty 是完全开源免费的自由软件,它允许您在缺乏数据库专家的情况下,用几乎接近纯硬件的成本来运行企业级的 PostgreSQL 数据库服务。作为对比,公有云厂商提供的 RDS 会收取底层硬件资源几倍到十几倍不等的溢价作为 “服务费”。
( 参考阅读:为什么说云数据库是杀猪盘 )
很多用户选择上云,正是因为自己搞不定数据库;很多用户使用 RDS,是因为别无他选。我们将打破云厂商的垄断,为用户提供一个云中立的,更好的 RDS 开源替代:Pigsty 紧跟 PostgreSQL 上游主干,不会有供应商锁定,不会有恼人的 “授权费”,不会有节点数量限制,不会收集您的任何数据。您的所有的核心资产 —— 数据,都能"自主可控",掌握在自己手中。
Pigsty 本身旨在用数据库自动驾驶软件,替代大量无趣的人肉数据库运维工作,但再好的软件也没法解决所有的问题。总会有一些的冷门低频疑难杂症需要专家介入处理。这也是为什么我们也提供专业的订阅服务,来为有需要的企业级用户使用 PostgreSQL 提供兜底。几万块的订阅咨询费不到顶尖 DBA 每年工资的几十分之一,让您彻底免除后顾之忧,把成本真正花在刀刃上。当然对于社区用户,我们亦用爱发电,提供免费的支持与日常答疑。
2.0 快速上手
Pigsty 2.0 的安装依然是一条命令搞定所有:
curl -fsSL http://download.pigsty.cc/get) | bash
如果互联网访问受限,您可以提前从 Github 或 CDN 下载对应操作系统的离线软件包进行离线安装。监控系统部分提供公开的 Demo:http://demo.pigsty.cc 。
v2.0.0
相关文章:
Pigsty v2.0.0 正式发布!
从v2.0.0开始,PIGSTY 现在是 “PostgreSQL In Great STYle"的首字母缩写,即"全盛状态的PostgreSQL”。
curl -fsSL http://download.pigsty.cc/get | bash
Download directly from GitHub Release
bash -c "$(curl -fsSL https://raw.githubusercontent.com/Vonng/pigsty/master/bin/get)"
# or download tarball directly with curl (EL9)
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-v2.0.0.tgz -o ~/pigsty.tgz
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el9.x86_64.tgz -o /tmp/pkg.tgz
# EL7: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el7.x86_64.tgz
# EL8: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el8.x86_64.tgz
亮点
- 完美整合 PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10,分布式地理时序超融合数据库。
- OS兼容性大幅增强:支持 EL7,8,9,以及 RHEL, CentOS, Rocky, OracleLinux, AlmaLinux等兼容发行版。
- 安全性改进:自签名CA,全局网络流量SSL加密,密码scram-sha-256认证,备份采用AES加密,重制的HBA规则系统。
- Patroni升级至3.0,提供原生的高可用 Citus 分布式集群支持,默认启用FailSafe模式,无惧DCS故障致全局主库瘫痪。
- 提供基于 pgBackRest 的开箱即用的时间点恢复 PITR 支持,默认支持本地文件系统与专用MinIO/S3集群备份。
- 新模块
ETCD
,可独立部署,简易扩缩容,自带监控高可用,彻底取代 Consul 作为高可用 PG 的 DCS。 - 新模块
MINIO
,可独立部署,支持多盘多节点部署,用作S3本地替代,亦用于集中式 PostgreSQL 备份仓库。 - 大幅精简配置文件参数,无需默认值即可使用;模板自动根据机器规格调整主机与PG参数,HBA/服务的定义更简洁泛用。
- 受 Grafana 与 MinIO 影响,软件协议由 Apache License 2.0 变更为 AGPL 3.0
兼容性
- 支持 EL7, EL8, EL9 三个大版本,并提供三个版本对应的离线软件包,默认开发测试环境由EL7升级至EL9。
- 支持更多EL兼容Linux发行版:RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux等…
- 源码包与离线软件包的命名规则发生改变,现在版本号,操作系统版本号,架构都会体现在包名中。
PGSQL
: PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 现可同时使用,协同工作。PGSQL
: Patroni 升级至 3.0 版本,作为 PGSQL 的高可用组件。- 默认使用 ETCD 作为 DCS,取代 Consul,减少一个 Consul Agent 失效点。
- 因为 vip-manager 升级至 2.1 并使用 ETCDv3 API,彻底弃用 ETCDv2 API,Patroni同理
- 提供原生的高可用 Citus 分布式集群支持。使用完全开源所有功能的 Citus 11.2。
- 默认启用FailSafe模式,无惧DCS故障致全局主库瘫痪。
PGSQL
: 引入 pgBackrest v2.44 提供开箱即用的 PostgreSQL 时间点恢复 PITR 功能- 默认使用主库上的备份目录创建备份仓库,滚动保留两天的恢复窗口。
- 默认备选备份仓库为专用 MinIO/S3 集群,滚动保留两周的恢复窗口,本地使用需要启用 MinIO 模块。
ETCD
现在作为一个独立部署的模块,带有完整的扩容/缩容方案与监控。MINIO
现在成为一个独立部署的模块,支持多盘多节点部署,用作S3本地替代,亦可用作集中式备份仓库。NODE
模块现在包含haproxy
,docker
,node_exporter
,promtail
功能组件chronyd
现在取代ntpd
成为所有节点默认的 NTP 服务。- HAPROXY 现从属于
NODE
的一部分,而不再是PGSQL
专属,可以 NodePort 的方式对外暴露服务。 - 现在
PGSQL
模块可以使用专用的集中式 HAPROXY 集群统一对外提供服务。
INFRA
模块现在包含dnsmasq
,nginx
,prometheus
,grafana
,loki
等组件- Infra 模块中的 DNSMASQ 服务器默认启用,并添加为所有节点的默认 DNS 服务器之一。
- 添加了
blackbox_exporter
用于主机 PING 探测,pushgateway
用于批处理任务指标。 loki
与promtail
现在使用 Grafana 默认的软件包,使用官方的 Grafana Echarts 面板插件- 提供针对 PostgreSQL 15 的新增可观测性位点的监控支持,添加 Patroni 监控
- 软件版本升级
- PostgreSQL 15.2 / PostGIS 3.3 / TimescaleDB 2.10 / Citus 11.2
- Patroni 3.0 / Pgbouncer 1.18 / pgBackRest 2.44 / vip-manager 2.1
- HAProxy 2.7 / Etcd 3.5 / MinIO 20230131022419 / mcli 20230128202938
- Prometheus 2.42 / Grafana 9.3 / Loki & Promtail 2.7 / Node Exporter 1.5
安全性
- 启用了一个完整的本地自签名CA:
pigsty-ca
,用于签发内网组件所使用的证书。 - 创建用户/修改密码的操作将不再会在日志文件中留下痕迹。
- Nginx 默认启用 SSL 支持(如需HTTPS,您需要在系统中信任
pigsty-ca
,或使用Chromethisisunsafe
) - ETCD 全面启用 SSL 加密客户端与服务端对等通信
- PostgreSQL 添加并默认启用了 SSL 支持,管理链接默认都使用SSL访问。
- Pgbouncer 添加了 SSL 支持,出于性能考虑默认不启用。
- Patroni 添加了 SSL 支持,并默认限制了管理 API 只能从本机与管理节点使用密码认证方可访问。
- PostgreSQL 的默认密码认证方式由
md5
改为scram-sha-256
。 - Pgbouncer添加了认证查询支持,可以动态管理连接池用户。
- pgBackRest 使用远端集中备份存储仓库时,默认使用
AES-256-CBC
加密备份数据。 - 提供高安全等级配置模板:强制使用全局 SSL,并要求使用管理员证书登陆。
- 所有默认HBA规则现在全部在配置文件中显式定义。
可维护性
- 现有的配置模板可根据机器规格(CPU/内存/存储)自动调整优化。
- 现在可以动态配置 Postgres/Pgbouncer/Patroni/pgBackRest 的日志目录:默认为:
/pg/log/<type>/
- 原有的 IP 地址占位符
10.10.10.10
被替换为一个专用变量:${admin_ip}
,可在多处引用,便于切换备用管理节点。 - 您可以指定
region
来使用不同地区的上游镜像源,以加快软件包的下载速度。 - 现在允许用户定义更细粒度的上游源地址,您可以根据不同的EL版本、架构,以及地区,使用不同的上游源。
- 提供了阿里云与AWS中国地区的 Terraform 模板,可用于一键拉起所需的 EC2 虚拟机。
- 提供了多种不同规格的 Vagrant 沙箱模板:
meta
,full
,el7/8/9
,minio
,build
,citus
- 添加了新的专用剧本:
pgsql-monitor.yml
用于监控现有的 Postgres 实例或 RDS。 - 添加了新的专用剧本:
pgsql-migration.yml
,使用逻辑复制无缝迁移现有实例至 Pigsty管理的集群。 - 添加了一系列专用 Shell 实用命令,封装常见运维操作,方便用户使用。
- 优化了所有 Ansible Role 的实现,使其更加简洁、易读、易维护,无需默认参数即可使用。
- 允许在业务数据库/用户的层次上定义额外的 Pgbouncer 参数。
API变更
Pigsty v2.0 进行了大量变更,新增64个参数,移除13个参数,重命名17个参数。
新增的参数
INFRA
.META
.admin_ip
: 主元节点 IP 地址INFRA
.META
.region
: 上游镜像区域:default|china|europeINFRA
.META
.os_version
: 企业版 Linux 发行版本:7,8,9INFRA
.CA
.ca_cn
: CA 通用名称,默认为 pigsty-caINFRA
.CA
.cert_validity
: 证书有效期,默认为 20 年INFRA
.REPO
.repo_enabled
: 在 infra 节点上构建本地 yum 仓库吗?INFRA
.REPO
.repo_upstream
: 上游 yum 仓库定义列表INFRA
.REPO
.repo_home
: 本地 yum 仓库的主目录,通常与 nginx_home ‘/www’ 相同INFRA
.NGINX
.nginx_ssl_port
: https 监听端口INFRA
.NGINX
.nginx_ssl_enabled
: 启用 nginx https 吗?INFRA
.PROMTETHEUS
.alertmanager_endpoint
: altermanager 端点(ip|domain):端口格式NODE
.NODE_TUNE
.node_hugepage_ratio
: 内存 hugepage 比率,默认禁用,值为 0NODE
.HAPROXY
.haproxy_service
: 要公开的 haproxy 服务列表PGSQL
.PG_ID
.pg_mode
: pgsql 集群模式:pgsql,citus,gpsqlPGSQL
.PG_BUSINESS
.pg_dbsu_password
: dbsu 密码,默认为空字符串表示没有 dbsu 密码PGSQL
.PG_INSTALL
.pg_log_dir
: postgres 日志目录,默认为/pg/data/log
PGSQL
.PG_BOOTSTRAP
.pg_storage_type
: SSD|HDD,默认为 SSDPGSQL
.PG_BOOTSTRAP
.patroni_log_dir
: patroni 日志目录,默认为/pg/log
PGSQL
.PG_BOOTSTRAP
.patroni_ssl_enabled
: 使用 SSL 保护 patroni RestAPI 通信?PGSQL
.PG_BOOTSTRAP
.patroni_username
: patroni rest api 用户名PGSQL
.PG_BOOTSTRAP
.patroni_password
: patroni rest api 密码(重要:请更改此密码)PGSQL
.PG_BOOTSTRAP
.patroni_citus_db
: 由 patroni 管理的 citus 数据库,默认为 postgresPGSQL
.PG_BOOTSTRAP
.pg_max_conn
: postgres 最大连接数,auto
将使用推荐值PGSQL
.PG_BOOTSTRAP
.pg_shmem_ratio
: postgres 共享内存比率,默认为 0.25,范围 0.1~0.4PGSQL
.PG_BOOTSTRAP
.pg_rto
: 恢复时间目标,故障转移的 ttl,默认为 30sPGSQL
.PG_BOOTSTRAP
.pg_rpo
: 恢复点目标,默认最多丢失 1MB 数据PGSQL
.PG_BOOTSTRAP
.pg_pwd_enc
: 密码加密算法:md5|scram-sha-256PGSQL
.PG_BOOTSTRAP
.pgbouncer_log_dir
: pgbouncer 日志目录,默认为/var/log/pgbouncer
PGSQL
.PG_BOOTSTRAP
.pgbouncer_auth_query
: 如果启用,查询 pg_authid 表以检索 biz 用户,而不是填充用户列表PGSQL
.PG_BOOTSTRAP
.pgbouncer_sslmode
: pgbouncer 客户端的 SSL:disable|allow|prefer|require|verify-ca|verify-fullPGSQL
.PG_BOOTSTRAP
.pg_service_provider
: 专用的 haproxy 节点组名称,或者默认为本地节点的空字符串PGSQL
.PG_BOOTSTRAP
.pg_default_service_dest
: 如果 svc.dest=‘default’,则为默认服务目标PGSQL
.PG_BACKUP
.pgbackrest_enabled
: 启用 pgbackrest 吗?PGSQL
.PG_BACKUP
.pgbackrest_clean
: 初始化期间删除 pgbackrest 数据吗?PGSQL
.PG_BACKUP
.pgbackrest_log_dir
: pgbackrest 日志目录,默认为/pg/log
PGSQL
.PG_BACKUP
.pgbackrest_method
: pgbackrest 备份仓库方法,local 或 minioPGSQL
.PG_BACKUP
.pgbackrest_repo
: pgbackrest 备份仓库配置PGSQL
.PG_DNS
.pg_dns_suffix
: pgsql dns 后缀,默认为空字符串PGSQL
.PG_DNS
.pg_dns_target
: auto, primary, vip, none 或 ad hoc ipETCD
.etcd_seq
: etcd 实例标识符,必需ETCD
.etcd_cluster
: etcd 集群和组名称,默认为 etcdETCD
.etcd_safeguard
: 防止清除正在运行的 etcd 实例吗?ETCD
.etcd_clean
: 在初始化期间清除现有的 etcd 吗?ETCD
.etcd_data
: etcd 数据目录,默认为 /data/etcdETCD
.etcd_port
: etcd 客户端端口,默认为 2379ETCD
.etcd_peer_port
: etcd 对等端口,默认为 2380ETCD
.etcd_init
: etcd 初始集群状态,新建或已存在ETCD
.etcd_election_timeout
: etcd 选举超时,默认为 1000msETCD
.etcd_heartbeat_interval
: etcd 心跳间隔,默认为 100msMINIO
.minio_seq
: minio 实例标识符,必须参数MINIO
.minio_cluster
: minio 集群名称,默认为 minioMINIO
.minio_clean
: 初始化时清理 minio 吗?默认为 falseMINIO
.minio_user
: minio 操作系统用户,默认为minio
MINIO
.minio_node
: minio 节点名模式MINIO
.minio_data
: minio 数据目录,使用 {x…y} 来指定多个驱动器MINIO
.minio_domain
: minio 外部域名,默认为sss.pigsty
MINIO
.minio_port
: minio 服务端口,默认为 9000MINIO
.minio_admin_port
: minio 控制台端口,默认为 9001MINIO
.minio_access_key
: 根访问密钥,默认为minioadmin
MINIO
.minio_secret_key
: 根秘密密钥,默认为minioadmin
MINIO
.minio_extra_vars
: minio 服务器的额外环境变量MINIO
.minio_alias
: 本地 minio 部署的别名MINIO
.minio_buckets
: 待创建的 minio 存储桶列表MINIO
.minio_users
: 待创建的 minio 用户列表
移除的参数
INFRA
.CA
.ca_homedir
: CA 主目录,现在固定为/etc/pki/
INFRA
.CA
.ca_cert
: CA 证书文件名,现在固定为ca.key
INFRA
.CA
.ca_key
: CA 密钥文件名,现在固定为ca.key
INFRA
.REPO
.repo_upstreams
: 已被repo_upstream
替代PGSQL
.PG_INSTALL
.pgdg_repo
: 现在由节点 playbooks 负责PGSQL
.PG_INSTALL
.pg_add_repo
: 现在由节点 playbooks 负责PGSQL
.PG_IDENTITY
.pg_backup
: 未使用且与部分名称冲突PGSQL
.PG_IDENTITY
.pg_preflight_skip
: 不再使用,由pg_id
替代DCS
.dcs_name
: 由于使用 etcd 而被移除DCS
.dcs_servers
: 被 ad hoc 组etcd
替代DCS
.dcs_registry
: 由于使用 etcd 而被移除DCS
.dcs_safeguard
: 被etcd_safeguard
替代DCS
.dcs_clean
: 被etcd_clean
替代
重命名的参数
nginx_upstream
->infra_portal
repo_address
->repo_endpoint
pg_hostname
->node_id_from_pg
pg_sindex
->pg_group
pg_services
->pg_default_services
pg_services_extra
->pg_services
pg_hba_rules_extra
->pg_hba_rules
pg_hba_rules
->pg_default_hba_rules
pgbouncer_hba_rules_extra
->pgb_hba_rules
pgbouncer_hba_rules
->pgb_default_hba_rules
vip_mode
->pg_vip_enabled
vip_address
->pg_vip_address
vip_interface
->pg_vip_interface
node_packages_default
->node_default_packages
node_packages_meta
->infra_packages
node_packages_meta_pip
->infra_packages_pip
node_data_dir
->node_data
Checksums
MD5 (pigsty-pkg-v2.0.0-rc1.el7.x86_64.tgz) = af4b5db9dc38c860de609956a8f1f0d3
MD5 (pigsty-pkg-v2.0.0-rc1.el8.x86_64.tgz) = 5b7152e142df3e3cbc06de30bd70e433
MD5 (pigsty-pkg-v2.0.0-rc1.el9.x86_64.tgz) = 1362e2a5680fc1a3a014cc4f304100bd
特别感谢意大利用户 @alemacci 在 SSL加密,备份,多操作系统发行版适配与自适应参数模版上的贡献!
v2.0.1
https://github.com/Vonng/pigsty/releases/tag/v2.0.1
安全性改进,与对 v2.0.0 的 BUG 修复。
改进
- 更换猪头 logo 以符合 PostgreSQL 商标政策。
- 将 grafana 版本升级至 v9.4,界面更佳且修复了 bug。
- 将 patroni 版本升级至 v3.0.1,其中包含了一些 bug 修复。
- 修改:将 grafana systemd 服务文件回滚到 rpm 默认的版本。
- 使用缓慢的
copy
代替rsync
来复制 grafana 仪表板,更加可靠。 - 增强:bootstrap 执行后会添加回默认 repo 文件。
- 添加 asciinema 视频,用于各种管理任务。
- 安全增强模式:限制监控用户权限。
- 新的配置模板:
dual.yml
,用于双节点部署。 - 在
crit.yml
模板中启用log_connections
和log_disconnections
。 - 在
crit.yml
模板中的pg_libs
中启用$lib/passwordcheck
。 - 明确授予
pg_monitor
角色监视视图权限。 - 从
dbuser_monitor
中移除默认的dbrole_readonly
以限制监控用户的权限 - 现在 patroni 监听在
{{ inventory_hostname }}
而不是0.0.0.0
- 现在你可以使用
pg_listen
控制 postgres/pgbouncer 监听的地址 - 现在你可以在
pg_listen
中使用${ip}
,${lo}
,${vip}
占位符 - 将 Aliyun terraform 镜像从 centos 7.9 提升到 rocky Linux 9
- 将 bytebase 版本升级到 v1.14.0
BUG修复
- 为 alertmanager 添加缺失的 advertise 地址。
- 解决使用
bin/pgsql-user
创建数据库用户时,pg_mode
变量缺失问题。 - 在
redis.yml
中为 Redis 集群加入任务添加-a password
选项。 - 在
infra-rm.yml
.remove infra data
任务中补充缺失的默认值。 - 修复 prometheus 监控对象定义文件的属主为
prometheus
用户。 - 使用 管理员用户 而不是 root 去删除 DCS 中的元数据。
- 修复了由 grafana 9.4 bug 导致的问题:Meta数据源缺失。
注意事项
EL8 pgdg 上游官方源处于依赖破损状态,请小心使用。涉及到的软件包: postgis33_15, pgloader, postgresql_anonymizer_15*, postgresql_faker_15
如何升级?
cd ~/pigsty; tar -zcf /tmp/files.tgz files; rm -rf ~/pigsty # backup files dir and remove
cd ~; bash -c "$(curl -fsSL https://get.pigsty.cc/latest)" # get latest pigsty source
cd ~/pigsty; rm -rf files; tar -xf /tmp/files.tgz -C ~/pigsty # restore files dir
Checksums
MD5 (pigsty-pkg-v2.0.1.el7.x86_64.tgz) = 5cfbe98fd9706b9e0f15c1065971b3f6
MD5 (pigsty-pkg-v2.0.1.el8.x86_64.tgz) = c34aa460925ae7548866bf51b8b8759c
MD5 (pigsty-pkg-v2.0.1.el9.x86_64.tgz) = 055057cebd93c473a67fb63bcde22d33
特别感谢 @cocoonkid 提供的反馈。
v2.0.2
https://github.com/Vonng/pigsty/releases/tag/v2.0.2
亮点
使用开箱即用的 pgvector
存储 AI Embedding、索引、检索向量。
- 新扩展
pgvector
- MinIO CVE-2023-28432 问题修复
变更
- 新扩展插件
pgvector
用于存储 AI 嵌入,并执行向量相似度搜索。 - 修复 MinIO CVE-2023-28432 ,使用 20230324 新提供的 policy API.
- 为 DNSMASQ systemd 服务添加动态重载命令
- 更新 PEV 版本至 v1.8
- 更新 grafana 版本至 v9.4.7
- 更新 MinIO 与 MCLI 版本至 20230324
- 更新 bytebase 版本至 v1.15.0
- 更新监控面板并修复死链接
- 更新了阿里云 Terraform 模板,默认使用 RockyLinux 9
- 使用 Grafana v9.4 的 Provisioning API
- 为众多管理任务添加了 asciinema 视频
- 修复了 EL8 PostgreSQL 的破损依赖:移除 anonymizer_15 faker_15 pgloader
MD5 (pigsty-pkg-v2.0.2.el7.x86_64.tgz) = d46440a115d741386d29d6de646acfe2
MD5 (pigsty-pkg-v2.0.2.el8.x86_64.tgz) = 5fa268b5545ac96b40c444210157e1e1
MD5 (pigsty-pkg-v2.0.2.el9.x86_64.tgz) = c8b113d57c769ee86a22579fc98e8345
v1.5.0 发布注记
v1.5.0
亮点概述
- 完善的Docker支持:在管理节点上默认启用并提供诸多开箱即用的软件模板:bytebase, pgadmin, pgweb, postgrest, minio等。
- 基础设施自我监控:Nginx, ETCD, Consul, Prometheus, Grafana, Loki 自我监控
- CMDB升级:兼容性改善,支持Redis集群/Greenplum集群元数据,配置文件可视化。
- 服务发现改进:可以使用Consul自动发现所有待监控对象,并纳入Prometheus中。
- 更好的冷备份支持:默认定时备份任务,添加
pg_probackup
备份工具,一键创建延时从库。 - ETCD现在可以用作PostgreSQL/Patroni的DCS服务,作为Consul的备选项。
- Redis剧本/角色改善:现在允许对单个Redis实例,而非整个Redis节点进行初始化与移除。
详细变更列表
监控系统
监控面板
- CMDB Overview:可视化Pigsty CMDB Inventory。
- DCS Overview:查阅Consul与ETCD集群的监控指标。
- Nginx Overview:查阅Pigsty Web访问指标与访问日志。
- Grafana Overview:Grafana自我监控
- Prometheus Overview:Prometheus自我监控
- INFRA Dashboard进行重制,反映基础设施整体状态
监控架构
- 现在允许使用 Consul 进行服务发现(当所有服务注册至Consul时)
- 现在所有的Infra组件会启用自我监控,并通过
infra_register
角色注册至Prometheus与Consul中。 - 指标收集器 pg_exporter 更新至 v0.5.0,添加新功能,
scale
与default
,允许为指标指定一个倍乘因子,以及指定默认值。 pg_bgwriter
,pg_wal
,pg_query
,pg_db
,pgbouncer_stat
关于时间的指标,单位由默认的毫秒或微秒统一缩放至秒。pg_table
中的相关计数器指标,现在配置有默认值0
,替代原有的NaN
。pg_class
指标收集器默认移除,相关指标添加至pg_table
与pg_index
收集器中。pg_table_size
指标收集器现在默认启用,默认设置有300秒的缓存时间。
部署方案
-
新增可选软件包
docker.tgz
,带有常用应用镜像:Pgadmin, Pgweb, Postgrest, ByteBase, Kong, Minio等。 -
新增角色ETCD,可以在DCS Servers指定的节点上自动部署ETCD服务,并自动纳入监控。
-
允许通过
pg_dcs_type
指定PG高可用使用的DCS服务,Consul(默认),ETCD(备选) -
允许通过
node_crontab
参数,为节点配置定时任务,例如数据库备份、VACUUM,统计收集等。 -
新增了
pg_checksum
选项,启用时,数据库集群将启用数据校验和(此前只有crit
模板默认启用) -
新增了
pg_delay
选项,当实例为Standby Cluster Leader时,此参数可以用于配置一个延迟从库 -
新增了软件包
pg_probackup
,默认角色replicator
现在默认赋予了备份相关函数所需的权限。 -
Redis部署现在拆分为两个部分:Redis节点与Redis实例,通过
redis_port
参数可以精确控制一个具体实例。 -
Loki 与 Promtail 现在使用
frpm
制作的 RPM软件包进行安装。 -
DCS3配置模板现在使用一个3节点的
pg-meta
集群,与一个单节点的延迟从库。
软件升级
- 升级 PostgreSQL 至 14.3
- 升级 Redis 至 6.2.7
- 升级 PG Exporter 至 0.5.0
- 升级 Consul 至 1.12.0
- 升级 vip-manager 至 v1.0.2
- 升级 Grafana 至 v8.5.2
- 升级 Loki & Promtail 至 v2.5.0,使用frpm打包。
问题修复
- 修复了Loki 与 Promtail 默认配置文件名的问题
- 修复了Loki 与 Promtail 环境变量无法正确展开的问题
- 对英文文档进行了一次完整的翻译与修缮,文档依赖的JS资源现在直接从本地获取,无需互联网访问。
API变化
新参数
node_data_dir
: 主要的数据挂载路径,如果不存在会被创建。node_crontab_overwrite
: 覆盖/etc/crontab
而非追加内容。node_crontab
: 要被追加或覆盖的 node crontab 内容。nameserver_enabled
: 在这个基础设施节节点上启用 nameserver 吗?prometheus_enabled
: 在这个基础设施节节点上启用 prometheus 吗?grafana_enabled
: 在这个基础设施节节点上启用 grafana 吗?loki_enabled
: 在这个基础设施节节点上启用 loki 吗?docker_enable
: 在这个基础设施节点上启用 docker 吗?consul_enable
: 启用 consul 服务器/代理吗?etcd_enable
: 启用 etcd 服务器/客户端吗?pg_checksum
: 启用 pg 集群数据校验和吗?pg_delay
: 备份集群主库复制重放时的应用延迟。
参数重制
现在 *_clean
是布尔类型的参数,用于在初始化期间清除现有实例。
*_safeguard
也是布尔类型的参数,用于在执行任何剧本时,避免清除正在运行的实例。
pg_exists_action
->pg_clean
pg_disable_purge
->pg_safeguard
dcs_exists_action
->dcs_clean
dcs_disable_purge
->dcs_safeguard
参数重命名
node_ntp_config
->node_ntp_enabled
node_admin_setup
->node_admin_enabled
node_admin_pks
->node_admin_pk_list
node_dns_hosts
->node_etc_hosts_default
node_dns_hosts_extra
->node_etc_hosts
node_dns_server
->node_dns_method
node_local_repo_url
->node_repo_local_urls
node_packages
->node_packages_default
node_extra_packages
->node_packages
node_packages_meta
->node_packages_meta
node_meta_pip_install
->node_packages_meta_pip
node_sysctl_params
->node_tune_params
app_list
->nginx_indexes
grafana_plugin
->grafana_plugin_method
grafana_cache
->grafana_plugin_cache
grafana_plugins
->grafana_plugin_list
grafana_git_plugin_git
->grafana_plugin_git
haproxy_admin_auth_enabled
->haproxy_auth_enabled
pg_shared_libraries
->pg_libs
dcs_type
->pg_dcs_type
v1.5.1
亮点
重要:修复了PG14.0-14.3中 CREATE INDEX|REINDEX CONCURRENTLY
可能导致索引数据损坏的问题。
Pigsty v1.5.1 升级默认PostgreSQL版本至 14.4 强烈建议尽快更新。
软件升级
- postgres 升级至 to 14.4
- haproxy 升级至 to 2.6.0
- grafana 升级至 to 9.0.0
- prometheus 升级至 2.36.0
- patroni 升级至 2.1.4
问题修复
- 修复了
pgsql-migration.yml
中的TYPO - 移除了HAProxy配置文件中的PID配置项
- 移除了默认软件包中的 i686 软件包
- 默认启用所有Systemd Redis Service
- 默认启用所有Systemd Patroni Service
API变更
grafana_database
与grafana_pgurl
被标记为过时API,将从后续版本移除
New Apps
- wiki.js : 使用Postgres搭建本地维基百科
- FerretDB : 使用Postgres提供MongoDB API
v1.4.0 发布注记
v1.4.0
架构
- 将系统解耦为4大类别:
INFRA
、NODES
、PGSQL
、REDIS
,这使得pigsty更加清晰、更易于扩展。 - 单节点部署 =
INFRA
+NODES
+PGSQL
- 部署pgsql集群 =
NODES
+PGSQL
- 部署redis集群 =
NODES
+REDIS
- 部署其他数据库 =
NODES
+ xxx(例如MONGO
、KAFKA
…待定)
可访问性
- 为中国大陆提供CDN。
- 使用
bash -c "$(curl -fsSL http://get.pigsty.cc/latest)"
获取最新源代码。 - 使用新的
download
脚本下载并提取包。
监控增强
- 将监控系统分为5大类别:
INFRA
、NODES
、REDIS
、PGSQL
、APP
- 默认启用日志记录
- 现在默认启用
loki
和promtail
,带有预构建的 loki-rpm。
- 现在默认启用
- 模型和标签
- 为所有仪表板添加了一个隐藏的
ds
prometheus数据源变量,因此您只需选择一个新的数据源而不是修改Grafana数据源和仪表板。 - 为所有指标添加了一个
ip
标签,并将其用作数据库指标和节点指标之间的连接键。
- 为所有仪表板添加了一个隐藏的
- INFRA监控
- Infra主仪表板:INFRA概览
- 添加日志仪表板:日志实例
- PGLOG分析和PGLOG会话现在被视为一个示例Pigsty APP。
- NODES监控应用
- 如果您完全不关心数据库,现在可以单独使用Pigsty作为主机监控软件!
- 包括4个核心仪表板:节点概览 & 节点集群 & 节点实例 & 节点警报
- 为节点引入新的身份变量:
node_cluster
和nodename
- 变量
pg_hostname
现在意味着将主机名设置为与postgres实例名相同,以保持向后兼容性 - 变量
nodename_overwrite
控制是否用nodename覆盖节点的主机名 - 变量
nodename_exchange
将nodename写入彼此的/etc/hosts
- 所有节点指标引用都经过修订,通过
ip
连接 - 节点监控目标在
/etc/prometheus/targets/nodes
下单独管理
- PGSQL监控增强
- 完全新的PGSQL集群,简化并专注于集群中的重要内容。
- 新仪表板PGSQL数据库是集群级对象监控。例如整个集群而不是单个实例的表和查询。
- PGSQL警报仪表板现在只关注pgsql警报。
- PGSQL Shard已添加到PGSQL中。
- Redis监控增强
- 为所有redis仪表板添加节点监控。
MatrixDB支持
- 通过
pigsty-matrix.yml
playbook可以部署MatrixDB(Greenplum 7) - MatrixDB监控仪表板:PGSQL MatrixDB
- 添加示例配置:
pigsty-mxdb.yml
监控增强
- 将监控系统分为5大类别:
INFRA
、NODES
、REDIS
、PGSQL
、APP
- 默认启用日志记录
- 现在默认启用
loki
和promtail
,带有预构建的 loki-rpm。
- 现在默认启用
- 模型和标签
- 为所有仪表板添加了一个隐藏的
ds
prometheus数据源变量,因此您只需选择一个新的数据源而不是修改Grafana数据源和仪表板。 - 为所有指标添加了一个
ip
标签,并将其用作数据库指标和节点指标之间的连接键。
- 为所有仪表板添加了一个隐藏的
- INFRA监控
- Infra主仪表板:INFRA概览
- 添加日志仪表板:日志实例
- PGLOG分析和PGLOG会话现在被视为一个示例Pigsty APP。
- NODES监控应用
- 如果您完全不关心数据库,现在可以单独使用Pigsty作为主机监控软件!
- 包括4个核心仪表板:节点概览 & 节点集群 & 节点实例 & 节点警报
- 为节点引入新的身份变量:
node_cluster
和nodename
- 变量
pg_hostname
现在意味着将主机名设置为与postgres实例名相同,以保持向后兼容性 - 变量
nodename_overwrite
控制是否用nodename覆盖节点的主机名 - 变量
nodename_exchange
将nodename写入彼此的/etc/hosts
- 所有节点指标引用都经过修订,通过
ip
连接 - 节点监控目标在
/etc/prometheus/targets/nodes
下单独管理
- PGSQL监控增强
- 完全新的PGSQL集群,简化并专注于集群中的重要内容。
- 新仪表板PGSQL数据库是集群级对象监控。例如整个集群而不是单个实例的表和查询。
- PGSQL警报仪表板现在只关注pgsql警报。
- PGSQL Shard已添加到PGSQL中。
- Redis监控增强
- 为所有redis仪表板添加节点监控。
MatrixDB支持
- 通过
pigsty-matrix.yml
playbook可以部署MatrixDB(Greenplum 7) - MatrixDB监控仪表板:PGSQL MatrixDB
- 添加示例配置:
pigsty-mxdb.yml
置备改进
现在 pigsty 的工作流如下:
infra.yml ---> 在单一的元节点上安装 pigsty
| 然后将更多节点加入 pigsty 的管理下
|
nodes.yml ---> 为 pigsty 准备节点(节点设置、dcs、node_exporter、promtail)
| 然后选择一个 playbook 在这些节点上部署数据库集群
|
^--> pgsql.yml 在已准备好的节点上安装 postgres
^--> redis.yml 在已准备好的节点上安装 redis
infra-demo.yml =
infra.yml -l meta +
nodes.yml -l pg-test +
pgsql.yml -l pg-test +
infra-loki.yml + infra-jupyter.yml + infra-pgweb.yml
nodes.yml
:用于设置和准备 pigsty 的节点,- 在节点上设置 node、node_exporter、consul agent
node-remove.yml
用于节点注销pgsql.yml
:现在只在已准备好的节点上工作pgsql-remove
现在只负责 postgres 本身(dcs 和节点监控由node.yml
负责)- 添加一系列新选项以在 greenplum/matrixdb 中重用
postgres
角色 redis.yml
:现在在已准备好的节点上工作- 而
redis-remove.yml
现在从节点上移除 redis。 pgsql-matrix.yml
现在在已准备好的节点上安装 matrixdb(Greenplum 7)。
软件升级
- PostgreSQL 14.2
- PostGIS 3.2
- TimescaleDB 2.6
- Patroni 2.1.3 (Prometheus 指标 + 故障转移插槽)
- HAProxy 2.5.5 (修复统计错误,更多指标)
- PG 导出器 0.4.1 (超时参数等)
- Grafana 8.4.4
- Prometheus 2.33.4
- Greenplum 6.19.4 / MatrixDB 4.4.0
- Loki 现在作为 rpm 包提供,而不是 zip 存档。
错误修复
- 删除 patroni 的 consul 依赖,这使其更容易迁移到新的 consul 集群
- 修复 prometheus bin/new 脚本的默认数据目录路径:从
/export/prometheus
更改为/data/prometheus
- 在 vip-manager systemd 服务中添加重新启动秒数
- 修复错别字和任务
API 变更
新增变量
node_cluster
:节点集群的身份变量nodename_overwrite
:如果设置,则 nodename 将设置为节点的主机名nodename_exchange
:交换 play 主机之间的节点主机名(在/etc/hosts
中)node_dns_hosts_extra
:可以通过单个实例/集群轻松覆盖的额外静态 dns 记录patroni_enabled
:如果禁用,postgres & patroni 的引导过程不会在postgres
角色期间执行pgbouncer_enabled
:如果禁用,pgbouncer 在postgres
角色期间不会启动pg_exporter_params
:生成监控目标 url 时为 pg_exporter 提供的额外 url 参数。pg_provision
:布尔值变量,表示是否执行postgres
角色的资源配置部分(模板,数据库,用户)no_cmdb
:用于infra.yml
和infra-demo.yml
播放书,不会在元节点上创建 cmdb。
MD5 (app.tgz) = f887313767982b31a2b094e5589a75ea
MD5 (matrix.tgz) = 3d063437c482d94bd7e35df1a08bbc84
MD5 (pigsty.tgz) = e143b88ebea1474f9ebaffddc6072c49
MD5 (pkg.tgz) = 73e8f5ce995b1f1760cb63c1904fb91b
v1.4.1
日常错误修复 / Docker 支持 / 英文文档
现在,默认在元节点上启用 docker。您可以使用它启动海量的各类软件
现在提供英文文档。
Bug 修复
- 修复 promtail & loki 配置变量问题
- 修复 grafana 旧版警报。
- 默认禁用 nameserver
- 为 patroni 快捷方式重命名 pg-alias.sh
- 为所有仪表板禁用 exemplars 查询
- 修复 loki 数据目录问题 https://github.com/Vonng/pigsty/issues/100
- 将 autovacuum_freeze_max_age 从 100000000 更改为 1000000000
v1.3.0 发布注记
1.3.0
- 【功能增强】Redis 部署(集群、哨兵、主从)
- 【功能增强】Redis 监控
- Redis 总览仪表盘
- Redis 集群仪表盘
- Redis 实例仪表盘 -【功能增强】 监控:PGCAT 大修
- 新仪表盘:PGCAT 实例
- 新仪表盘:PGCAT 数据库仪表盘
- 重做仪表盘:PGCAT 表格
- 【功能增强】 监控:PGSQL 增强
- 新面板:PGSQL 集群,添加 10 个关键指标面板(默认切换)
- 新面板:PGSQL 实例,添加 10 个关键指标面板(默认切换)
- 简化 & 重新设计:PGSQL 服务
- 在 PGCAT & PGSL 仪表盘之间添加交叉引用 -【功能增强】 监控部署
- 现在 grafana 数据源在仅监控部署期间自动注册 -【功能增强】 软件升级
- 将 PostgreSQL 13 添加到默认包列表
- 默认升级到 PostgreSQL 14.1
- 添加 greenplum rpm 和依赖项
- 添加 redis rpm & 源代码包
- 将 perf 添加为默认包
v1.3.1
监控
- PGSQL & PGCAT 仪表盘改进
- 优化 pgcat 实例 & pgcat 数据库的布局
- 在 pgsql 实例仪表盘中添加关键指标面板,与 pgsql 集群保持一致
- 在 pgcat 数据库中添加表/索引膨胀面板,移除 pgcat 膨胀仪表盘
- 在 pgcat 数据库仪表盘中添加索引信息
- 修复在 grafana 8.3 中的损坏面板
- 在 nginx 主页中添加 redis 索引
部署
- 新的
infra-demo.yml
剧本用于一次性引导 - 使用
infra-jupyter.yml
剧本部署可选的 jupyter lab 服务器 - 使用
infra-pgweb.yml
剧本部署可选的 pgweb 服务器 - 在 meta 节点上新的
pg
别名,可以从 admin 用户启动 postgres 集群(除了 postgres) - 根据
timescaledb-tune
的建议调整所有 patroni 配置模板中的max_locks_per_transactions
- 在配置模板中添加
citus.node_conninfo: 'sslmode=prefer'
以便在没有 SSL 的情况下使用 citus - 在 pgdg14 包列表中添加所有扩展(除了 pgrouting)
- 将 node_exporter 升级到 v1.3.1
- 将 PostgREST v9.0.0 添加到包列表。从 postgres 模式生成 API。
错误修复
- Grafana 的安全漏洞(升级到 v8.3.1 问题)
- 修复
pg_instance
&pg_service
在register
角色中从剧本的中间开始时的问题 - 修复在没有
pg_cluster
变量存在的主机上 nginx 主页渲染问题 - 在升级到 grafana 8.3.1 时修复样式问题
v1.2.0 发布注记
v1.2.0
- 【功能增强】默认使用 PostgreSQL 14 版本
- 【功能增强】默认使用 TimescaleDB 2.5 扩展
- 现在 timescaledb 和 postgis 默认在 cmdb 中启用
- 【功能增强】 新增仅监控模式:
- 仅通过可连接的 URL,您可以使用 pigsty 监控现有的 pg 实例
- pg_exporter 将在本地的 meta 节点上部署
- 新仪表板 PGSQL Cluster Monly 用于远程集群
- 【功能增强】软件升级
- grafana 升级到 8.2.2
- pev2 升级到 v0.11.9
- promscale 升级到 0.6.2
- pgweb 升级到 0.11.9
- 新增扩展:pglogical、pg_stat_monitor、orafce
-【功能增强】自动检测机器规格并使用适当的
node_tune
和pg_conf
模板 -【功能增强】重做与膨胀相关的视图,现在公开更多信息 -【功能增强】删除 timescale 和 citus 的内部监控 -【功能增强】新剧本pgsql-audit.yml
用于创建审计报告 -【BUG修复】现在 pgbouncer_exporter 资源所有者是 {{ pg_dbsu }} 而不是 postgres -【BUG修复】 修复在执行REINDEX TABLE CONCURRENTLY
时 pg_exporter 在 pg_table pg_index 上的重复指标 -【功能增强】现在所有配置模板都减少到两个:auto 和 demo。(已删除:pub4, pg14, demo4, tiny, oltp
) - 如果
vagrant
是默认用户,则配置pigsty-demo
,否则使用pigsty-auto
。
如何从 v1.1.1 升级
在 1.2.0 中没有 API 变更。您仍然可以使用旧的 pigsty.yml
配置文件 (PG13)。
对于基础设施部分,重新执行 repo
将完成大部分工作。
至于数据库,您仍然可以使用现有的 PG13 实例。就地升级在涉及到像 PostGIS 和 Timescale 这样的扩展时非常棘手。我强烈推荐使用逻辑复制进行数据库迁移。
新的剧本 pgsql-migration.yml
将使这一过程变得容易得多。它将创建一系列的脚本,帮助您近乎零停机时间地迁移您的集群。
v1.1.0 发布注记
v1.1.0
- 【增强功能】 增加
pg_dummy_filesize
以创建文件系统空间占位符 - 【增强功能】 主页大改版
- 【增强功能】 增加 Jupyter Lab 整合
- 【增强功能】 增加 pgweb 控制台整合
- 【增强功能】 增加 pgbadger 支持
- 【增强功能】 增加 pev2 支持,解释可视化工具
- 【增强功能】 增加 pglog 工具
- 【增强功能】 更新默认的 pkg.tgz 软件版本:
- PostgreSQL 升级至 v13.4(支持官方的 pg14)
- pgbouncer 升级至 v1.16(指标定义更新)
- Grafana 升级至 v8.1.4
- Prometheus 升级至 v2.2.29
- node_exporter 升级至 v1.2.2
- haproxy 升级至 v2.1.1
- consul 升级至 v1.10.2
- vip-manager 升级至 v1.0.1
API 变更
nginx_upstream
现在持有不同的结构。(不兼容)- 新的配置条目:
app_list
,渲染至主页的导航条目 - 新的配置条目:
docs_enabled
,在默认服务器上设置本地文档 - 新的配置条目:
pev2_enabled
,设置本地的 pev2 工具 - 新的配置条目:
pgbadger_enabled
,创建日志概要/报告目录 - 新的配置条目:
jupyter_enabled
,在元节点上启用 Jupyter Lab 服务器 - 新的配置条目:
jupyter_username
,指定运行 Jupyter Lab 的用户 - 新的配置条目:
jupyter_password
,指定 Jupyter Lab 的默认密码 - 新的配置条目:
pgweb_enabled
,在元节点上启用 pgweb 服务器 - 新的配置条目:
pgweb_username
,指定运行 pgweb 的用户 - 将内部标记
repo_exist
重命名为repo_exists
- 现在
repo_address
的默认值为pigsty
而非yum.pigsty
- 现在 haproxy 的访问点为
http://pigsty
而非http://h.pigsty
v1.1.1
- 【功能增强】 用
timescale
版本替换 timescaledb 的apache
版本 - 【功能增强】 升级 prometheus 到 2.30
- 【BUG修复】 现在 pg_exporter 配置目录的属主是
{{ pg_dbsu }}
,而不再是prometheus
如何从v1.1.0升级?
这个版本的主要变动是 TimescaleDB,使用 TimescaleDB License (TSL)的官方版本替代了 PGDG 仓库中的 Apache License v2 的版本。
stop/pause postgres instance with timescaledb
yum remove -y timescaledb_13
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=0
gpgcheck=0
enabled=1
yum install timescaledb-2-postgresql13
v1.0.0 发布注记
v1.0.0
v1 正式发布,监控系统全面改进
亮点
- 监控系统全面改进
- 在 Grafana 8.0 上新增仪表盘
- 新的度量定义,增加 PG14 支持
- 简化的标签系统:静态标签集:(job, cls, ins)
- 新的警报规则与衍生度量
- 同时监控多个数据库
- 实时日志搜索 & csvlog 分析
- 链接丰富的仪表盘,点击图形元素进行深入|汇总
- 架构变更
- 将 citus 和 timescaledb 加入默认安装部分
- 增加对 PostgreSQL 14beta2 的支持
- 简化 haproxy 管理页面索引
- 通过添加新的角色
register
来解耦基础设施和 pgsql - 添加新角色
loki
和promtail
用于日志记录 - 为管理员节点上的管理员用户添加新角色
environ
以设置环境 - 默认使用
static
服务发现用于 prometheus(而不是consul
) - 添加新角色
remove
以优雅地移除集群和实例 - 升级 prometheus 和 grafana 的配置逻辑
- 升级到 vip-manager 1.0,node_exporter 1.2,pg_exporter 0.4,grafana 8.0
- 现在,每个实例上的每个数据库都可以自动注册为 grafana 数据源
- 将 consul 注册任务移到
register
角色,更改 consul 服务标签 - 添加 cmdb.sql 作为 pg-meta 基线定义(CMDB & PGLOG)
- 应用框架
- 可扩展框架用于新功能
- 核心应用:PostgreSQL 监控系统:
pgsql
- 核心应用:PostgreSQL 目录浏览器:
pgcat
- 核心应用:PostgreSQL Csvlog 分析器:
pglog
- 添加示例应用
covid
用于可视化 covid-19 数据 - 添加示例应用
isd
用于可视化 isd 数据
- 其他
- 添加 jupyterlab,为数据科学提供完整的 python 环境
- 添加
vonng-echarts-panel
以恢复对 Echarts 的支持 - 添加 wrap 脚本
createpg
,createdb
,createuser
- 添加 cmdb 动态库存脚本:
load_conf.py
,inventory_cmdb
,inventory_conf
- 移除过时的剧本:
pgsql-monitor
,pgsql-service
,node-remove
等….
API 变更
- 新变量:
node_meta_pip_install
- 新变量:
grafana_admin_username
- 新变量:
grafana_database
- 新变量:
grafana_pgurl
- 新变量:
pg_shared_libraries
- 新变量:
pg_exporter_auto_discovery
- 新变量:
pg_exporter_exclude_database
- 新变量:
pg_exporter_include_database
- 变量重命名:
grafana_url
为grafana_endpoint
Bug 修复
- 修复默认时区 Asia/Shanghai (CST) 问题
- 修复 pgbouncer & patroni 的 nofile 限制
- 当执行标签
pgbouncer
时,pgbouncer 的用户列表和数据库列表将会被生成
v1.0.1
2021-09-14
- 文档更新
- 现已支持中文文档
- 现已支持机器翻译的英文文档
- 错误修复:
pgsql-remove
不会移除主实例 - 错误修复:用 pg_cluster + pg_seq 替换 pg_instance
- Start-At-Task 可能因为 pg_instance 未定义而失败
- 错误修复:从默认共享预加载库中移除 citus
- citus 会强制 max_prepared_transaction 的值为非零
- 错误修复:在
configure
中进行 ssh sudo 检查:- 现在使用
ssh -t sudo -n ls
进行权限检查
- 现在使用
- 笔误修复:
pg-backup
脚本的笔误 - 警报调整:移除 NTP 合理性检查警报(与 ClockSkew 重复)
- 导出器调整:移除 collector.systemd 以减少开销
v0.9.0 发布注记
v0.9.0
新功能
-
一键安装模式:
/bin/bash -c "$(curl -fsSL https://pigsty.cc/install)"
-
开发命令行工具
pigsty-cli
封装常用Ansible命令,目前pigsty-cli处于Beta状态 -
使用Loki与Promtail收集日志:
- 默认收集Postgres,Pgbouncer,Patroni日志
- 新增部署脚本
infra-loki.yml
与pgsql-promtail.yml
- 定义基于日志的监控指标
- 使用Grafana制作日志相关可视化面板。
-
监控组件可以使用二进制安装,使用
files/get_bin.sh
下载监控二进制组件。 -
飞升模式:
当集群元节点初始化完成后,可以使用
bin/upgrade
升级为动态Inventory使用pg-meta上的数据库代替YAML配置文件。
问题修复
-
集中修复日志相关问题:
- 修复了HAProxy健康检查造成PG日志中大量
connection reset by peer
的问题。 - 修复了HAProxy健康检查造成Patroni日志中大量出现
Connect Reset
Exception的问题 - 修复了Patroni日志时间戳格式,去除毫秒时间戳,附加完整时区信息。
- 为
dbuser_monitor
配置1秒的log_min_duration_statement
,避免监控查询出现在日志中。
- 修复了HAProxy健康检查造成PG日志中大量
-
重构Grafana角色
- 在保持API不变的前提下重构Grafana角色。
- 使用CDN下载预打包的Grafana插件,加速插件下载
-
其他问题修复
- 修复了
pgbouncer-create-user
未能正确处理 md5 密码的问题。 - 完善了数据库与用户创建SQL模版中参数空置检查。
- 修复了 NODE DNS配置时如果手工中断执行,DNS配置可能出错的问题。
- 重构了Makefile快捷方式 Makefile 中的错别字
- 修复了
参数变更
node_disable_swap
默认为 False,默认不会关闭SWAP。node_sysctl_params
不再有默认修改的系统参数。grafana_plugin
的默认值install
现在意味着当插件缓存不存在时,从CDN下载。repo_url_packages
现在从 Pigsty CDN 下载额外的RPM包,解决墙内无法访问的问题。proxy_env.no_proxy
现在将Pigsty CDN加入到NOPROXY列表中。grafana_customize
现在默认为false
,启用意味着安装Pigsty Pro版UI(默认不开源所以不要启用)node_admin_pk_current
,新增选项,启用后会将当前用户的~/.ssh/id_rsa.pub
添加至管理员的Key中loki_clean
:新增选项,安装Loki时是否清除现有数据loki_data_dir
:新增选项,指明安装Loki时的数据目录promtail_enabled
是否启用Promtail日志收集服务?promtail_clean
是否在安装promtail时移除已有状态信息?promtail_port
promtail使用的默认端口,默认为9080promtail_status_file
保存Promtail状态信息的文件位置promtail_send_url
用于接收日志的loki服务endpoint
v0.8.0 发布注记
v0.8.0
v0.8 针对 服务(Service) 接入部分进行了彻底的重做。现在除了默认的primary
, replica
服务外,用户可以自行定义新的服务。服务的接口可以支持多种不同的实现,例如L4 DPKG VIP可作为Haproxy的替代品与Pigsty集成。同时,针对用户反馈的一些问题进行了集中处理与改进。
改动内容
v0.8是供给方案定稿版本,此后供给系统的API将保持稳定。
API变更
原有vip
与haproxy
角色的所有配置项,现在迁移至service
角色中。
#------------------------------------------------------------------------------
# SERVICE PROVISION
#------------------------------------------------------------------------------
pg_weight: 100 # default load balance weight (instance level)
# - service - #
pg_services: # how to expose postgres service in cluster?
# primary service will route {ip|name}:5433 to primary pgbouncer (5433->6432 rw)
- name: primary # service name {{ pg_cluster }}_primary
src_ip: "*"
src_port: 5433
dst_port: pgbouncer # 5433 route to pgbouncer
check_url: /primary # primary health check, success when instance is primary
selector: "[]" # select all instance as primary service candidate
# replica service will route {ip|name}:5434 to replica pgbouncer (5434->6432 ro)
- name: replica # service name {{ pg_cluster }}_replica
src_ip: "*"
src_port: 5434
dst_port: pgbouncer
check_url: /read-only # read-only health check. (including primary)
selector: "[]" # select all instance as replica service candidate
selector_backup: "[? pg_role == `primary`]" # primary are used as backup server in replica service
# default service will route {ip|name}:5436 to primary postgres (5436->5432 primary)
- name: default # service's actual name is {{ pg_cluster }}-{{ service.name }}
src_ip: "*" # service bind ip address, * for all, vip for cluster virtual ip address
src_port: 5436 # bind port, mandatory
dst_port: postgres # target port: postgres|pgbouncer|port_number , pgbouncer(6432) by default
check_method: http # health check method: only http is available for now
check_port: patroni # health check port: patroni|pg_exporter|port_number , patroni by default
check_url: /primary # health check url path, / as default
check_code: 200 # health check http code, 200 as default
selector: "[]" # instance selector
haproxy: # haproxy specific fields
maxconn: 3000 # default front-end connection
balance: roundrobin # load balance algorithm (roundrobin by default)
default_server_options: 'inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100'
# offline service will route {ip|name}:5438 to offline postgres (5438->5432 offline)
- name: offline # service name {{ pg_cluster }}_replica
src_ip: "*"
src_port: 5438
dst_port: postgres
check_url: /replica # offline MUST be a replica
selector: "[? pg_role == `offline` || pg_offline_query ]" # instances with pg_role == 'offline' or instance marked with 'pg_offline_query == true'
selector_backup: "[? pg_role == `replica` && !pg_offline_query]" # replica are used as backup server in offline service
pg_services_extra: [] # extra services to be added
# - haproxy - #
haproxy_enabled: true # enable haproxy among every cluster members
haproxy_reload: true # reload haproxy after config
haproxy_policy: roundrobin # roundrobin, leastconn
haproxy_admin_auth_enabled: false # enable authentication for haproxy admin?
haproxy_admin_username: admin # default haproxy admin username
haproxy_admin_password: admin # default haproxy admin password
haproxy_exporter_port: 9101 # default admin/exporter port
haproxy_client_timeout: 3h # client side connection timeout
haproxy_server_timeout: 3h # server side connection timeout
# - vip - #
vip_mode: none # none | l2 | l4
vip_reload: true # whether reload service after config
# vip_address: 127.0.0.1 # virtual ip address ip (l2 or l4)
# vip_cidrmask: 24 # virtual ip address cidr mask (l2 only)
# vip_interface: eth0 # virtual ip network interface (l2 only)
新增选项
# - localization - #
pg_encoding: UTF8 # default to UTF8
pg_locale: C # default to C
pg_lc_collate: C # default to C
pg_lc_ctype: en_US.UTF8 # default to en_US.UTF8
pg_reload: true # reload postgres after hba changes
vip_mode: none # none | l2 | l4
vip_reload: true # whether reload service after config
移除选项
haproxy_check_port # Haproxy相关参数已经被Service定义覆盖
haproxy_primary_port
haproxy_replica_port
haproxy_backend_port
haproxy_weight
haproxy_weight_fallback
vip_enabled # vip_enabled参数被vip_mode覆盖
服务管理
pg_services
与 pg_services_extra
定义了集群中的服务,每一个服务的定义结构如下例所示:
一个服务必须指定以下内容:
-
名称:服务的完整名称以数据库集群名为前缀,以
service.name
为后缀,通过-
连接。例如在pg-test
集群中name=primary
的服务,其完整服务名称为pg-test-primary
。 -
端口:在Pigsty中,服务默认采用NodePort的形式对外暴露,因此暴露端口为必选项。但如果使用外部负载均衡服务接入方案,您也可以通过其他的方式区分服务。
-
选择器:选择器指定了服务的成员,采用JMESPath的形式,从所有集群实例成员中筛选变量。默认的
[]
选择器会选取所有的集群成员。此外
selector_backup
会选择或标记用于backup的实例列表(当集群中所有其他成员失效时方才接管服务)
# default service will route {ip|name}:5436 to primary postgres (5436->5432 primary)
- name: default # service's actual name is {{ pg_cluster }}-{{ service.name }}
src_ip: "*" # service bind ip address, * for all, vip for cluster virtual ip address
src_port: 5436 # bind port, mandatory
dst_port: postgres # target port: postgres|pgbouncer|port_number , pgbouncer(6432) by default
check_method: http # health check method: only http is available for now
check_port: patroni # health check port: patroni|pg_exporter|port_number , patroni by default
check_url: /primary # health check url path, / as default
check_code: 200 # health check http code, 200 as default
selector: "[]" # instance selector
haproxy: # haproxy specific fields
maxconn: 3000 # default front-end connection
balance: roundrobin # load balance algorithm (roundrobin by default)
default_server_options: 'inter 3s fastinter 1s downinter 5s rise 3 fall 3 on-marked-down shutdown-sessions slowstart 30s maxconn 3000 maxqueue 128 weight 100'
数据库管理
数据库现在可以对locale的细分选项:lc_ctype
与lc_collate
分别进行指定。支持这一功能的主要原因是PG的扩展插件pg_trgm
需要在lc_ctype!=C
的环境中才能正常支持中文。
旧接口定义
pg_databases:
- name: meta # name is the only required field for a database
owner: postgres # optional, database owner
template: template1 # optional, template1 by default
encoding: UTF8 # optional, UTF8 by default
locale: C # optional, C by default
allowconn: true # optional, true by default, false disable connect at all
revokeconn: false # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
tablespace: pg_default # optional, 'pg_default' is the default tablespace
connlimit: -1 # optional, connection limit, -1 or none disable limit (default)
extensions: # optional, extension name and where to create
- {name: postgis, schema: public}
parameters: # optional, extra parameters with ALTER DATABASE
enable_partitionwise_join: true
pgbouncer: true # optional, add this database to pgbouncer list? true by default
comment: pigsty meta database # optional, comment string for database
新的接口定义
pg_databases:
- name: meta # name is the only required field for a database
# owner: postgres # optional, database owner
# template: template1 # optional, template1 by default
# encoding: UTF8 # optional, UTF8 by default , must same as template database, leave blank to set to db default
# locale: C # optional, C by default , must same as template database, leave blank to set to db default
# lc_collate: C # optional, C by default , must same as template database, leave blank to set to db default
# lc_ctype: C # optional, C by default , must same as template database, leave blank to set to db default
allowconn: true # optional, true by default, false disable connect at all
revokeconn: false # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
# tablespace: pg_default # optional, 'pg_default' is the default tablespace
connlimit: -1 # optional, connection limit, -1 or none disable limit (default)
extensions: # optional, extension name and where to create
- {name: postgis, schema: public}
parameters: # optional, extra parameters with ALTER DATABASE
enable_partitionwise_join: true
pgbouncer: true # optional, add this database to pgbouncer list? true by default
comment: pigsty meta database # optional, comment string for database
v0.7.0 发布注记
v0.7.0
v0.7 针对接入已有数据库实例进行了改进,现在用户可以采用 仅监控部署(Monly Deployment) 模式使用Pigsty。同时新增了专用于管理数据库与用户、以及单独部署监控的剧本,并对数据库与用户的定义进行改进。
改动内容
Features
- Monitor Only Deployment Support #25
- Split monolith static monitor target file into per-cluster conf #36
- Add create user playbook #29
- Add create database playbook #28
- Database provisioning interface enhancement #33
- User provisioning interface enhancement #34
Bug Fix
API变更
新增选项
prometheus_sd_target: batch # batch|single 监控目标定义文件采用单体还是每个实例一个
exporter_install: none # none|yum|binary 监控Exporter的安装模式
exporter_repo_url: '' # 如果设置,这里的REPO连接会加入目标的Yum源中
node_exporter_options: '--no-collector.softnet --collector.systemd --collector.ntp --collector.tcpstat --collector.processes' # Node Exporter默认的命令行选项
pg_exporter_url: '' # 可选,PG Exporter监控对象的URL
pgbouncer_exporter_url: '' # 可选,PGBOUNCER EXPORTER监控对象的URL
移除选项
exporter_binary_install: false # 功能被 exporter_install 覆盖
定义结构变更
pg_default_roles # 变化细节参考 用户管理。
pg_users # 变化细节参考 用户管理。
pg_databases # 变化细节参考 数据库管理。
重命名选项
pg_default_privilegs -> pg_default_privileges # 很明显这是一个错别字
仅监控模式
有时用户不希望使用Pigsty供给方案,只希望使用Pigsty监控系统管理现有PostgreSQL实例。
Pigsty提供了 仅监控部署(monly, monitor-only) 模式,剥离供给方案部分,可用于监控现有PostgreSQL集群。
仅监控模式的部署流程与标准模式大体上保持一致,但省略了很多步骤
- 在元节点上完成基础设施初始化的部分与标准流程保持一致,仍然通过
./infra.yml
完成。 - 不需要在数据库节点上完成 基础设施初始化。
- 不需要在数据库节点上执行数据库初始化的绝大多数任务,而是通过专用的
./pgsql-monitor.yml
完成仅监控系统部署。 - 实际使用的配置项大大减少,只保留基础设施相关变量,与 监控系统 相关的少量变量。
数据库管理
Database provisioning interface enhancement #33
旧接口定义
pg_databases: # create a business database 'meta'
- name: meta
schemas: [meta] # create extra schema named 'meta'
extensions: [{name: postgis}] # create extra extension postgis
parameters: # overwrite database meta's default search_path
search_path: public, monitor
新的接口定义
pg_databases:
- name: meta # name is the only required field for a database
owner: postgres # optional, database owner
template: template1 # optional, template1 by default
encoding: UTF8 # optional, UTF8 by default
locale: C # optional, C by default
allowconn: true # optional, true by default, false disable connect at all
revokeconn: false # optional, false by default, true revoke connect from public # (only default user and owner have connect privilege on database)
tablespace: pg_default # optional, 'pg_default' is the default tablespace
connlimit: -1 # optional, connection limit, -1 or none disable limit (default)
extensions: # optional, extension name and where to create
- {name: postgis, schema: public}
parameters: # optional, extra parameters with ALTER DATABASE
enable_partitionwise_join: true
pgbouncer: true # optional, add this database to pgbouncer list? true by default
comment: pigsty meta database # optional, comment string for database
接口变更
- Add new options:
template
,encoding
,locale
,allowconn
,tablespace
,connlimit
- Add new option
revokeconn
, which revoke connect privileges from public for this database - Add
comment
field for database
数据库变更
在运行中集群中创建新数据库可以使用pgsql-createdb.yml
剧本,在配置中定义完新数据库后,执行以下剧本。
./pgsql-createdb.yml -e pg_database=<your_new_database_name>
通过-e pg_datbase=
告知需要创建的数据库名称,则该数据库即会被创建(或修改)。具体执行的命令参见集群主库/pg/tmp/pg-db-{{ database.name}}.sql
文件。
用户管理
User provisioning interface enhancement #34
旧接口定义
pg_users:
- username: test # example production user have read-write access
password: test # example user's password
options: LOGIN # extra options
groups: [ dbrole_readwrite ] # dborole_admin|dbrole_readwrite|dbrole_readonly
comment: default test user for production usage
pgbouncer: true # add to pgbouncer
新接口定义
pg_users:
# complete example of user/role definition for production user
- name: dbuser_meta # example production user have read-write access
password: DBUser.Meta # example user's password, can be encrypted
login: true # can login, true by default (should be false for role)
superuser: false # is superuser? false by default
createdb: false # can create database? false by default
createrole: false # can create role? false by default
inherit: true # can this role use inherited privileges?
replication: false # can this role do replication? false by default
bypassrls: false # can this role bypass row level security? false by default
connlimit: -1 # connection limit, -1 disable limit
expire_at: '2030-12-31' # 'timestamp' when this role is expired
expire_in: 365 # now + n days when this role is expired (OVERWRITE expire_at)
roles: [dbrole_readwrite] # dborole_admin|dbrole_readwrite|dbrole_readonly
pgbouncer: true # add this user to pgbouncer? false by default (true for production user)
parameters: # user's default search path
search_path: public
comment: test user
接口变更
-
username
field rename toname
-
groups
field rename toroles
-
options
now split into separated configration entries:login
,superuser
,createdb
,createrole
,inherit
,replication
,bypassrls
,connlimit
-
expire_at
andexpire_in
options -
pgbouncer
option for user is nowfalse
by default
用户管理
在运行中集群中创建新数据库可以使用pgsql-createuser.yml
剧本,在配置中定义完新数据库后,执行以下剧本。
./pgsql-createuser.yml -e pg_user=<your_new_user_name>
通过-e pg_user=
告知需要创建的数据库名称,则该数据库即会被创建(或修改)。具体执行的命令参见集群主库/pg/tmp/pg-user-{{ user.name}}.sql
文件。
v0.6.0 发布注记
v0.6.0
v0.6 对数据库供给方案进行了修改与调整,根据用户的反馈添加了一系列实用功能与修正。针对监控系统的移植性进行优化,便于与其他外部数据库供给方案对接,例如阿里云MyBase。
BUG修复
- 修复了新版本Patroni重启后会重置PG HBA的问题
- 修复了PG Overview Dashboard标题中的别字
- 修复了沙箱集群
pg-test
的默认主库,原来为pg-test-2
,应当为pg-test-1
- 修复了过时代码注释
功能改进
- 改造Prometheus与监控供给方式
- Haproxy供给重构与改进 #8
- 访问控制模型改进。#7
- 添加了默认角色
dbrole_offline
,用于慢查询,ETL,交互式查询场景。 - 修改默认HBA规则,允许
dbrole_offline
分组的用户访问pg_role == 'offline'
及pg_offline_query == true
的实例。
- 添加了默认角色
- 软件更新 Release v0.6
- PostgreSQL 13.2
- Prometheus 2.25
- PG Exporter 0.3.2
- Node Exporter 1.1
- Consul 1.9.3
- 更新默认PG源:PostgreSQL现在默认使用浙江大学的镜像,加速下载安装
接口变更
新增选项
service_registry: consul # 服务注册机制:none | consul | etcd | both
prometheus_options: '--storage.tsdb.retention=30d' # prometheus命令行选项
prometheus_sd_method: consul # Prometheus使用的服务发现机制:static|consul
prometheus_sd_interval: 2s # Prometheus服务发现刷新间隔
pg_offline_query: false # 设置后将允许dbrole_offline角色连接与查询该实例
node_exporter_enabled: true # 设置后将安装配置Node Exporter
pg_exporter_enabled: true # 设置后将安装配置PG Exporter
pgbouncer_exporter_enabled: true # 设置后将安装配置Pgbouncer Exporter
dcs_disable_purge: false # 双保险,强制 dcs_exists_action = abort 避免误删除DCS实例
pg_disable_purge: false # 双保险,强制 pg_exists_action = abort 避免误删除数据库实例
haproxy_weight: 100 # 配置实例的相对负载均衡权重
haproxy_weight_fallback: 1 # 配置集群主库在只读服务中的相对权重
移除选项
prometheus_metrics_path # 与 exporter_metrics_path 重复
prometheus_retention # 功能被 prometheus_options 覆盖
v0.5.0 发布注记
v0.5.0
大纲
- Pigsty官方文档站正式上线!
- 添加了数据库模板的定制支持,用户可以通过配置文件定制所需的数据库内部对象。
- 对默认访问控制模型进行了改进
- 重构了HBA管理的逻辑,现在将由Pigsty替代Patroni直接负责生成HBA
- 将Grafana监控系统的供给方案从sqlite改为JSON文件静态Provision
- 将
pg-cluster-replication
面板加入Pigsty开源免费套餐。 - 最新的经过测试的离线安装包:pkg.tgz (v0.5)
定制数据库
您是否烦恼过单实例多租户的问题?比如总有研发拿着PostgreSQL当MySQL使,明明是一个Schema就能解决的问题,非要创建一个新的数据库出来,在一个实例中创建出几十个不同的DB。 不要忧伤,不要心急。Pigsty已经提供数据库内部对象的Provision方案,您可以轻松地在配置文件中指定所需的数据库内对象,包括:
- 角色
- 用户/角色名
- 密码
- 用户属性
- 用户备注
- 用户所属的权限组
- 数据库
- 属主
- 额外的模式
- 额外的扩展插件
- 数据库级的自定义配置参数
- 数据库
- 属主
- 额外的模式
- 额外的扩展插件
- 数据库级的自定义配置参数
- 默认权限
- 默认情况下这里配置的权限会应用至所有由 超级用户 和 管理员用户创建的对象上。
- 默认扩展
- 所有新创建的业务数据库都会安装有这些默认扩展
- 默认模式
- 所有新创建的业务数据库都会创建有这些默认的模式
配置样例
# 通常是每个DB集群配置的变量
pg_users:
- username: test
password: test
comment: default test user
groups: [ dbrole_readwrite ] # dborole_admin|dbrole_readwrite|dbrole_readonly
pg_databases: # create a business database 'test'
- name: test
extensions: [{name: postgis}] # create extra extension postgis
parameters: # overwrite database meta's default search_path
search_path: public,monitor
# 通常是整个环境统一配置的全局变量
# - system roles - #
pg_replication_username: replicator # system replication user
pg_replication_password: DBUser.Replicator # system replication password
pg_monitor_username: dbuser_monitor # system monitor user
pg_monitor_password: DBUser.Monitor # system monitor password
pg_admin_username: dbuser_admin # system admin user
pg_admin_password: DBUser.Admin # system admin password
# - default roles - #
pg_default_roles:
- username: dbrole_readonly # sample user:
options: NOLOGIN # role can not login
comment: role for readonly access # comment string
- username: dbrole_readwrite # sample user: one object for each user
options: NOLOGIN
comment: role for read-write access
groups: [ dbrole_readonly ] # read-write includes read-only access
- username: dbrole_admin # sample user: one object for each user
options: NOLOGIN BYPASSRLS # admin can bypass row level security
comment: role for object creation
groups: [dbrole_readwrite,pg_monitor,pg_signal_backend]
# NOTE: replicator, monitor, admin password are overwritten by separated config entry
- username: postgres # reset dbsu password to NULL (if dbsu is not postgres)
options: SUPERUSER LOGIN
comment: system superuser
- username: replicator
options: REPLICATION LOGIN
groups: [pg_monitor, dbrole_readonly]
comment: system replicator
- username: dbuser_monitor
options: LOGIN CONNECTION LIMIT 10
comment: system monitor user
groups: [pg_monitor, dbrole_readonly]
- username: dbuser_admin
options: LOGIN BYPASSRLS
comment: system admin user
groups: [dbrole_admin]
- username: dbuser_stats
password: DBUser.Stats
options: LOGIN
comment: business read-only user for statistics
groups: [dbrole_readonly]
# object created by dbsu and admin will have their privileges properly set
pg_default_privilegs:
- GRANT USAGE ON SCHEMAS TO dbrole_readonly
- GRANT SELECT ON TABLES TO dbrole_readonly
- GRANT SELECT ON SEQUENCES TO dbrole_readonly
- GRANT EXECUTE ON FUNCTIONS TO dbrole_readonly
- GRANT INSERT, UPDATE, DELETE ON TABLES TO dbrole_readwrite
- GRANT USAGE, UPDATE ON SEQUENCES TO dbrole_readwrite
- GRANT TRUNCATE, REFERENCES, TRIGGER ON TABLES TO dbrole_admin
- GRANT CREATE ON SCHEMAS TO dbrole_admin
- GRANT USAGE ON TYPES TO dbrole_admin
# schemas
pg_default_schemas: [monitor]
# extension
pg_default_extensions:
- { name: 'pg_stat_statements', schema: 'monitor' }
- { name: 'pgstattuple', schema: 'monitor' }
- { name: 'pg_qualstats', schema: 'monitor' }
- { name: 'pg_buffercache', schema: 'monitor' }
- { name: 'pageinspect', schema: 'monitor' }
- { name: 'pg_prewarm', schema: 'monitor' }
- { name: 'pg_visibility', schema: 'monitor' }
- { name: 'pg_freespacemap', schema: 'monitor' }
- { name: 'pg_repack', schema: 'monitor' }
- name: postgres_fdw
- name: file_fdw
- name: btree_gist
- name: btree_gin
- name: pg_trgm
- name: intagg
- name: intarray
# postgres host-based authentication rules
pg_hba_rules:
- title: allow meta node password access
role: common
rules:
- host all all 10.10.10.10/32 md5
- title: allow intranet admin password access
role: common
rules:
- host all +dbrole_admin 10.0.0.0/8 md5
- host all +dbrole_admin 172.16.0.0/12 md5
- host all +dbrole_admin 192.168.0.0/16 md5
- title: allow intranet password access
role: common
rules:
- host all all 10.0.0.0/8 md5
- host all all 172.16.0.0/12 md5
- host all all 192.168.0.0/16 md5
- title: allow local read-write access (local production user via pgbouncer)
role: common
rules:
- local all +dbrole_readwrite md5
- host all +dbrole_readwrite 127.0.0.1/32 md5
- title: allow read-only user (stats, personal) password directly access
role: replica
rules:
- local all +dbrole_readonly md5
- host all +dbrole_readonly 127.0.0.1/32 md5
pg_hba_rules_extra: []
# pgbouncer host-based authentication rules
pgbouncer_hba_rules:
- title: local password access
role: common
rules:
- local all all md5
- host all all 127.0.0.1/32 md5
- title: intranet password access
role: common
rules:
- host all all 10.0.0.0/8 md5
- host all all 172.16.0.0/12 md5
- host all all 192.168.0.0/16 md5
pgbouncer_hba_rules_extra: []
数据库模板
- pg-init-template.sql 用于初始化
template1
数据的脚本模板 - pg-init-business.sql 用于初始化其他业务数据库的脚本模板
权限模型
v0.5 改善了默认的权限模型,主要是针对单实例多租户的场景进行优化,并收紧权限控制。
- 撤回了普通业务用户对非所属数据库的默认
CONNECT
权限 - 撤回了非管理员用户对所属数据库的默认
CREATE
权限 - 撤回了所有用户在
public
模式下的默认创建权限。
供给方式
原先Pigsty采用直接拷贝Grafana自带的grafana.db的方式完成监控系统的初始化。
这种方式虽然简单粗暴管用,但不适合进行精细化的版本控制管理。在v0.5中,Pigsty采用了Grafana API完成了监控系统面板供给的工作。
您所需的就是在grafana_url
中填入带有用户名密码的Grafana URL。
因此,监控系统可以背方便地添加至已有的Grafana中。
v0.4.0 发布注记
v0.4.0
第二个公开测试版v0.4现已正式发行
Pigsty v0.4对监控系统进行了整体升级改造,精心挑选了10个面板作为标准的Pigsty开源内容。同时,针对Grafana 7.3的不兼容升级进行了大量适配改造工作。使用升级的pg_exporter v0.3.1
作为默认指标导出器,调整了监控报警规则的监控面板连接。
Pigsty开源版
Pigsty开源版选定了以下10个Dashboard作为开源内容。其他Dashboard作为可选的商业支持内容提供。
- PG Overview
- PG Cluster
- PG Service
- PG Instance
- PG Database
- PG Query
- PG Table
- PG Table Catalog
- PG Table Detail
- Node
尽管进行了少量阉割,这10个监控面板所涵盖的内容仍然可以吊打所有同类软件。
软件升级
Pigsty v0.4进行了大量软件适配工作,包括:
- Upgrade to PostgreSQL 13.1, Patroni 2.0.1-4, add citus to repo.
- Upgrade to
pg_exporter 0.3.1
- Upgrade to Grafana 7.3, Ton’s of compatibility work
- Upgrade to prometheus 2.23, with new UI as default
- Upgrade to consul 1.9
其他改进
- Update prometheus alert rules
- Fix alertmanager info links
- Fix bugs and typos.
- add a simple backup script
离线安装包
- v0.4的离线安装包(CentOS 7.8)已经可以从Github下载:pkg.tgz
v0.3.0 发布注记
v0.3.0
首个Pigsty公开测试版本现在已经释出!
监控系统
Pigsty v0.3 包含以下8个监控面板作为开源内容:
- PG Overview
- PG Cluster
- PG Service
- PG Instance
- PG Database
- PG Table Overview
- PG Table Catalog
- Node
离线安装包
- v0.3 离线安装包(CentOS 7.8)已经可以从Github下载:pkg.tgz