跳转到主要内容

这是本节的多页打印视图。 .

返回本页常规视图.

博客

Pigsty 文章、工程设计说明与完整版本发布档案。

从 VONNG 汇集的观点、教程、实践记录与项目故事。

Pigsty 工程中的架构决策与实现说明。

按完整 x.y.z 版本号维护的 Pigsty 发布档案。

1 - Release

Pigsty 完整 x.y.z 版本发布档案。

截至 v4.5.0 的每一个稳定数字标签都有独立的 x.y.z 页面,小版本与补丁版本也全部收录。每条记录交叉核对 Pigsty 发布文章、历史 About / 发布注记 档案以及对应的 GitHub Release 或标签,并附上精确的源码对比链接。尚未产生真实标签的规划版本继续保持草稿状态。

1.1 - Pigsty v3.7.0

PG18 成为默认,437 个扩展,EL10 与 Debian13 支持,PGEXT.CLOUD

亮点特性

  • PostgreSQL 18 深度支持,成为默认 PG 大版本,扩展已就位!
  • 新增 EL10 / Debian 13 操作系统支持,总数达 14 个!
  • 新增 PostgresQL 扩展数量,总数达到 437 个!
  • 支持了 Ansible 2.19 破坏性重构以后的版本!
  • Supabase,PolarDB, IvorySQL, Percona 内核更新至最新版本!
  • 优化了 PG 默认参数的设置逻辑,更充分利用资源。

版本更新

  • PostgreSQL 18.1, 17.7, 16.11, 15.15, 14.20, 13.23
  • Patroni 4.1.0
  • Pgbouncer 1.25.0
  • pg_exporter 1.0.3
  • pgbackrest 2.57.0
  • Supabase 2025-11
  • PolarDB 15.15.5.0
  • FerretDB 2.7.0
  • DuckDB 1.4.2
  • Etcd 3.6.6
  • pig 0.7.4

更多软件版本更新信息,请参考:

API 变化

  • 为并行执行的相关参数设置了更合理的优化策略,详见 调参说明
  • richfull 模板中,不再默认安装 citus 扩展,因为 citus 尚未支持 PG 18
  • PG 参数模板中,新增 duckdb 系列扩展存根。
  • min_wal_size, max_wal_size, max_slot_wal_keep_size 设置 200,2000,3000 GB 的封顶上限值。
  • temp_file_limit 设置 200 GB 的封顶上限,OLAP 设置为 2 TB。
  • 适当增大连接池默认链接数量
  • 新增 prometheus_port 参数,且默认值为 9058,避开与 EL10 RHEL Web Console 端口的冲突。
  • 修改 alertmanager_port 参数的默认值为 9059,避开与 Kafka SSL 端口的潜在冲突。
  • 新增 pg_pkgpg_pre 子任务,在安装 PG 包前移除 el9+ 上导致 LLVM 冲突的 bpftool, python3-perf
  • 在 Debian / Ubuntu 的默认仓库定义中新增 llvm 仓库模块
  • 修复了 infra-rm.yml 移除软件包的逻辑

兼容性修复

  • 修复了 Ubuntu/Debian 信任 CA 时 Warning 返回码错误的问题。
  • 修复了 Ansible 2.19 引入的大量兼容性问题,确保在新老版本上正常运行。
  • 为 seq 类变量添加了 int 类型转换,确保兼容
  • 将大量 with_items 修改为 loop 语法,确保兼容
  • 为密钥交换变量添加一层列表嵌套,避免在新版本下针对字符串进行字符迭代。
  • 将 range 用例显式转换为 list 后使用
  • 修改了 name,port 等标记保留的变量命名
  • play_hosts 修改为 ansible_play_hosts
  • 为部分字符串类型添加了 string 强制类型转换,避免运行时错误。
  • EL10 逻辑适配:
  • 修复了 EL10 缺少 ansible-collection-community-crypto 无法生成密钥的问题
  • 修复了 EL10 缺少 ansible 逻辑包的问题
  • 移除 modulemd_tools flamegraph timescaledb-tool
  • 使用 java-21-openjdk 替代 java-17-openjdk
  • aarch64 YUM 仓库名称问题
  • Debian 13 逻辑适配
  • 使用 bind9-dnsutils 替代 dnsutils
  • Ubuntu 24 修复
  • 临时移除了上游依赖崩溃的 tcpdump 包

校验和

e00d0c2ac45e9eff1cc77927f9cd09df  pigsty-v3.7.0.tgz
987529769d85a3a01776caefefa93ecb  pigsty-pkg-v3.7.0.d12.aarch64.tgz
2d8272493784ae35abeac84568950623  pigsty-pkg-v3.7.0.d12.x86_64.tgz
090cc2531dcc25db3302f35cb3076dfa  pigsty-pkg-v3.7.0.d13.x86_64.tgz
ddc54a9c4a585da323c60736b8560f55  pigsty-pkg-v3.7.0.el10.aarch64.tgz
d376e75c490e8f326ea0f0fbb4a8fd9b  pigsty-pkg-v3.7.0.el10.x86_64.tgz
8c2deeba1e1d09ef3d46d77a99494e71  pigsty-pkg-v3.7.0.el8.aarch64.tgz
9795e059bd884b9d1b2208011abe43cd  pigsty-pkg-v3.7.0.el8.x86_64.tgz
08b860155d6764ae817ed25f2fcf9e5b  pigsty-pkg-v3.7.0.el9.aarch64.tgz
1ac430768e488a449d350ce245975baa  pigsty-pkg-v3.7.0.el9.x86_64.tgz
e033aaf23690755848db255904ab3bcd  pigsty-pkg-v3.7.0.u22.aarch64.tgz
cc022ea89181d89d271a9aaabca04165  pigsty-pkg-v3.7.0.u22.x86_64.tgz
0e978598796db3ce96caebd76c76e960  pigsty-pkg-v3.7.0.u24.aarch64.tgz
48223898ace8812cc4ea79cf3178476a  pigsty-pkg-v3.7.0.u24.x86_64.tgz

信息来源

1.2 - Pigsty v3.6.1

例行 PG 小版本更新,PGDG 中国区域镜像,EL9,D13 存根
curl https://repo.pigsty.cc/get | bash -s v3.6.1

亮点特性

  • PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, 以及 18 Beta 3 支持
  • 在中国大陆地区使用 Pigsty 提供的 PGDG APT/YUM 镜像解决更新断供问题。
  • 新的网站首页: https://pgsty.com
  • 增加了 el10, debian 13 的实现存根,以及 el10 的 Terraform 镜像

基础设施软件包更新

  • Grafana 12.1.0
  • pg_exporter 1.0.2
  • pig 0.6.1
  • vector 0.49.0
  • redis_exporter 1.75.0
  • mongo_exporter 0.47.0
  • victoriametrics 1.123.0
  • victorialogs: 1.28.0
  • grafana-victoriametrics-ds 0.18.3
  • grafana-victorialogs-ds 0.19.3
  • grafana-infinity-ds 3.4.1
  • etcd 3.6.4
  • ferretdb 2.5.0
  • tigerbeetle 0.16.54
  • genai-toolbox 0.12.0

数据库软件包更新

  • pg_search 0.17.3

API 变更

  • node_kernel_modules 默认值中移除 br_filter 内核模块。
  • 在添加 PGDG YUM 源时使用操作大版本号,不再使用小版本号。

校验和

045977aff647acbfa77f0df32d863739  pigsty-pkg-v3.6.1.d12.aarch64.tgz
636b15c2d87830f2353680732e1af9d2  pigsty-pkg-v3.6.1.d12.x86_64.tgz
700a9f6d0db9c686d371bf1c05b54221  pigsty-pkg-v3.6.1.el8.aarch64.tgz
2aff03f911dd7be363ba38a392b71a16  pigsty-pkg-v3.6.1.el8.x86_64.tgz
ce07261b02b02b36a307dab83e460437  pigsty-pkg-v3.6.1.el9.aarch64.tgz
d598d62a47bbba2e811059a53fe3b2b5  pigsty-pkg-v3.6.1.el9.x86_64.tgz
13fd68752e59f5fd2a9217e5bcad0acd  pigsty-pkg-v3.6.1.u22.aarch64.tgz
c25ccfb98840c01eb7a6e18803de55bb  pigsty-pkg-v3.6.1.u22.x86_64.tgz
0d71e58feebe5299df75610607bf428c  pigsty-pkg-v3.6.1.u24.aarch64.tgz
4fbbab1f8465166f494110c5ec448937  pigsty-pkg-v3.6.1.u24.x86_64.tgz
083d8680fa48e9fec3c3fcf481d25d2f  pigsty-v3.6.1.tgz

信息来源

1.3 - Pigsty v3.6.0

pgactive,MinIO / ETCD 改进,安装简化,配置梳理
curl https://repo.pigsty.cc/get | bash -s v3.6.0

亮点特性

  • 全新文档站: https://doc.pgsty.com
  • 新增 pgsql-pitr 剧本与备份/恢复教程,改善 PITR 体验,
  • 新增内核支持:Percona PG TDE (PG17)
  • 优化 Supabase 自建体验,更新至最新版本,并解决了一系列官方模板的问题
  • 简化安装步骤,默认使用在线安装,更加高效简单,bootstrap 过程(安装 ansible)嵌入安装脚本中

设计改进

  • 改善了 Etcd 模块的实现,新增独立的 etcd-rm.yml 剧本与扩缩容 SOP 脚本。
  • 改善了 MinIO 模块的实现,支持 HTTP 模式,创建不同属性的三个桶供开箱即用
  • 重新调整梳理了所有配置模板,使用更为便利
  • 针对中国大陆使用速度更快的 Docker Registry 镜像站
  • 优化了 tuned 操作系统参数模板,针对现代硬件与 NVMe 磁盘优化
  • 新增扩展 pgactive 用于多主复制与亚秒级故障切换
  • 调整 pg_fs_main / pg_fs_backup 默认值,简化文件目录结构设计

问题修复

  • 修复了 pgbouncer 配置文件的错误 by @housei-zzy
  • 修复了 OrioleDB 在 Debian 平台上的问题
  • 修复了 tuned shm 配置参数的问题
  • 离线软件包直接使用 PGDG 源,避免使用断开同步的镜像站点
  • 修复了 IvorySQL libxcrypt 依赖的问题
  • 替换了破损与缓慢的 EPEL 软件仓库站点
  • 修复了 haproxy_enabled 标记位的功能

基础设施软件包更新

新增 Victoria Metrics / Victoria Logs 相关包

  • genai-toolbox 0.9.0 (new)
  • victoriametrics 1.120.0 -> 1.121.0 (重构)
  • vmutils 1.121.0 (重命名 victoria-metrics-utils)
  • grafana-victoriametrics-ds 0.15.1 -> 0.17.0
  • victorialogs 1.24.0 -> 1.25.1 (重构)
  • vslogcli 1.24.0 -> 1.25.1
  • vlagent 1.25.1 (新增)
  • grafana-victorialogs-ds 0.16.3 -> 0.18.1
  • prometheus 3.4.1 -> 3.5.0
  • grafana 12.0.0 -> 12.0.2
  • vector 0.47.0 -> 0.48.0
  • grafana-infinity-ds 3.2.1 -> 3.3.0
  • keepalived_exporter 1.7.0
  • blackbox_exporter 0.26.0 -> 0.27.0
  • redis_exporter 1.72.1 -> 1.77.0
  • rclone 1.69.3 -> 1.70.3

数据库软件包更新

  • PostgreSQL 18 Beta2 更新
  • pg_exporter 1.0.1,更新至最新依赖并提供 Docker 镜像
  • pig 0.6.0,更新了最新扩展与仓库列表,带有 pig install 子命令
  • vip-manager 3.0.0 -> 4.0.0
  • ferretdb 2.2.0 -> 2.3.1
  • dblab 0.32.0 -> 0.33.0
  • duckdb 1.3.1 -> 1.3.2
  • etcd 3.6.1 -> 3.6.3
  • ferretdb 2.2.0 -> 2.4.0
  • juicefs 1.2.3 -> 1.3.0
  • tigerbeetle 0.16.41 -> 0.16.50
  • pev2 1.15.0 -> 1.16.0

PG 扩展包更新

  • OrioleDB 1.5 beta12
  • OriolePG 17.11
  • plv8 3.2.3 -> 3.2.4
  • postgresql_anonymizer 2.1.1 -> 2.3.0
  • pgvectorscale 0.7.1 -> 0.8.0
  • wrappers 0.5.0 -> 0.5.3
  • supautils 2.9.1 -> 2.10.0
  • citus 13.0.3 -> 13.1.0
  • timescaledb 2.20.0 -> 2.21.1
  • vchord 0.3.0 -> 0.4.3
  • pgactive 2.1.5 (new)
  • documentdb 0.103.0 -> 0.105.0
  • pg_search 0.17.0

API 变更

  • pg_fs_backup:重命名为 pg_fs_backup,默认值为 /data/backups
  • pg_rm_bkup:重命名为 pg_rm_backup,默认值为 true
  • pg_fs_main:现在默认值调整为 /data/postgres
  • nginx_cert_validity:新增参数,用于控制 Nginx 自签名证书的有效期,默认为 397d
  • minio_buckets:默认值调整为创建名为 pgsqlmetadata 的三个桶。
  • minio_users:移除 dba 用户,新增 s3user_metas3user_data 用户,分别对应 metadata 桶。
  • minio_https:新增参数,允许配置 MinIO 使用 HTTP 模式。
  • minio_provision:新增参数,允许跳过 MinIO 置备阶段(跳过桶和用户的创建)。
  • minio_safeguard:新增参数,启用后会在执行 minio-rm.yml 时中止操作。
  • minio_rm_data:新增参数,控制在执行 minio-rm.yml 时是否删除 minio 数据目录。
  • minio_rm_pkg:新增参数,控制在执行 minio-rm.yml 时是否卸载 minio 软件包。
  • etcd_learner:新增参数,允许 etcd 以学习者身份初始化。
  • etcd_rm_data:新增参数,控制在执行 etcd-rm.yml 时是否删除 etcd 数据目录。
  • etcd_rm_pkg:新增参数,控制在执行 etcd-rm.yml 时是否卸载 etcd 软件包。

校验和

df64ac0c2b5aab39dd29698a640daf2e  pigsty-v3.6.0.tgz
cea861e2b4ec7ff5318e1b3c30b470cb  pigsty-pkg-v3.6.0.d12.aarch64.tgz
2f253af87e19550057c0e7fca876d37c  pigsty-pkg-v3.6.0.d12.x86_64.tgz
0158145b9bbf0e4a120b8bfa8b44f857  pigsty-pkg-v3.6.0.el8.aarch64.tgz
07330d687d04d26e7d569c8755426c5a  pigsty-pkg-v3.6.0.el8.x86_64.tgz
311df5a342b39e3288ebb8d14d81e0d1  pigsty-pkg-v3.6.0.el9.aarch64.tgz
92aad54cc1822b06d3e04a870ae14e29  pigsty-pkg-v3.6.0.el9.x86_64.tgz
c4fadf1645c8bbe3e83d5a01497fa9ca  pigsty-pkg-v3.6.0.u22.aarch64.tgz
5477ed6be96f156a43acd740df8a9b9b  pigsty-pkg-v3.6.0.u22.x86_64.tgz
196169afc1be02f93fcc599d42d005ca  pigsty-pkg-v3.6.0.u24.aarch64.tgz
dbe5c1e8a242a62fe6f6e1f6e6b6c281  pigsty-pkg-v3.6.0.u24.x86_64.tgz

信息来源

1.4 - Pigsty v3.5.0

PG18 beta,421 扩展,监控升级,代码重构

亮点特性

  • 支持 PG 18 (Beta),扩展更新,总数达到 421 个
  • OrioleDB 与 OpenHalo 内核在全平台上可用
  • 可使用 pig do 子命令代替 bin 脚本
  • Supabase 自建加强,解决若干遗留问题,例如复制延迟与密钥分发
  • 代码重构与架构优化,优化了 Postgres 与 Pgbouncer 默认参数
  • 更新了 Grafana 12, pg_exporter 1.0 与相关插件,翻修面板
curl https://repo.pigsty.cc/get | bash -s v3.5.0
  • 支持 PostgreSQL 18
  • 通过 pg_exporter 1.0.0 支持 PG18 监控指标
  • 通过 pig 0.4.1 支持 PG18 安装 Alias。
  • 提供 pg18 配置模板
  • 重构 pgsql 模块
  • PGSQL 重构,将 PG 监控抽离为单独的 pg_monitor 角色,移除 clean 逻辑
  • 去除冗余重复的任务,合并同类项,精简配置。移除 dir/utils 任务块
  • 所有扩展默认安装至 extensions 模式中(与 supabase 安全实践保持一致)
  • 重命名模板文件,移除所有 .j2 后缀
  • 为所有模板中的 monitor 函数添加 SET 命令清空 search_path,遵循 Supabase 安全最佳实践。
  • 调整 pgbouncer 默认参数,增大默认链接池大小,设置链接池清理查询。
  • 新增参数 pgbouncer_ignore_param,允许配置 pgbouncer 忽略的参数列表
  • 新增任务 pg_key 用于生成 pgsodium 所需的服务端密钥
  • 针对 PG 17 默认启用 sync_replication_slots
  • 重新调整了子任务标签,使其更符合配置小节的拆分逻辑
  • 重构 pg_remove 模块
  • 重命名参数:pg_rm_data, pg_rm_bkup, pg_rm_pkg 用于控制删除的内容
  • 重新调整角色代码结构,使用更清楚的标签进行划分
  • 新增 pg_monitor 模块
  • pgbouncer_exporter 现在不再和 pg_exporter 共享配置文件
  • 新增了 TimescaleDB, Citus,pg_wait_event 的监控指标。
  • 使用 pg_exporter 1.0.0,更新了 PG16/17/18 相关监控指标。
  • 使用更为紧凑,全新设计的指标收集器配置文件。
  • Supabase 加强 (感谢来自 @lawso017 的贡献!)
  • 将 Supabase 容器镜像与数据库模式更新至最新版本
  • 现在默认支持 pgsodium 服务端密钥加载
  • 通过 supa-kick 定时任务解决 logflare 无法及时更新复制进度的问题
  • 为 monitor 模式中的函数添加 set search_path 子句以遵循安全最佳实践
  • CLI 新增 pig do 命令,允许通过命令行工具替代 bin/ 中的 Shell 脚本
  • 监控系统更新
  • 更新 Grafana 大版本至 12.0.0,更新相关插件/数据源软件包
  • 更新 Postgres 数据源 uid 命名方式(以适应新的 uid 长度限制与字符限制)
  • 新增了 Static Datasource
  • 更新了现有 Dashboard,修复若干遗留问题

基础设施软件包更新

  • pig 0.4.2
  • duckdb 1.3.0
  • etcd 3.6.0
  • vector 0.47.0
  • minio 20250422221226
  • mcli 20250416181326
  • pev 1.5.0
  • rclone 1.69.3
  • mtail 3.0.8 (new)

可观测性软件包更新

  • grafana 12.0.0
  • grafana-victorialogs-ds 0.16.3
  • grafana-victoriametrics-ds 0.15.1
  • grafana-infinity-ds 3.2.1
  • grafana_plugins 12.0.0
  • prometheus 3.4.0
  • pushgateway 1.11.1
  • nginx_exporter 1.4.2
  • pg_exporter 1.0.0
  • pgbackrest_exporter 0.20.0
  • redis_exporter 1.72.1
  • keepalived_exporter 1.6.2
  • victoriametrics 1.117.1
  • victoria_logs 1.22.2

数据库软件包更新

  • PostgreSQL 17.5, 16.9, 15.13, 14.18, 13.21
  • PostgreSQL 18beta1 支持
  • pgbouncer 1.24.1
  • pgbackrest 2.55
  • pgbadger 13.1

Postgres 扩展包更新

  • spat 0.1.0a4 新扩展
  • pgsentinel 1.1.0 新扩展
  • pgdd 0.6.0 (pgrx 0.14.1) 新扩展
  • convert 0.0.4 (pgrx 0.14.1) 新扩展
  • pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
  • pg_render 0.1.2 (pgrx 0.12.8)
  • pgx_ulid 0.2.0 (pgrx 0.12.7)
  • pg_idkit 0.3.0 (pgrx 0.14.1)
  • pg_ivm 1.11.0
  • orioledb 1.4.0 beta11 新增 debian/ubuntu 支持
  • openhalo 14.10 新增 debian/ubuntu 支持
  • omnigres 20250507 (在 d12/u22 编译最新版本失败)
  • citus 12.0.3
  • timescaledb 2.20.0 (移除 PG14 支持)
  • supautils 2.9.2
  • pg_envvar 1.0.1
  • pgcollection 1.0.0
  • aggs_for_vecs 1.4.0
  • pg_tracing 0.1.3
  • pgmq 1.5.1
  • tzf-pg 0.2.0 (pgrx 0.14.1)
  • pg_search 0.15.18 (pgrx 0.14.1)
  • anon 2.1.1 (pgrx 0.14.1)
  • pg_parquet 0.4.0 (0.14.1)
  • pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
  • pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
  • vchord_bm25 0.2.1 (pgrx 0.13.1)
  • vchord 0.3.0 (pgrx 0.13.1)
  • pg_vectorize 0.22.1 (pgrx 0.13.1)
  • wrappers 0.4.6 (pgrx 0.12.9)
  • timescaledb-toolkit 1.21.0 (pgrx 0.12.9)
  • pgvectorscale 0.7.1 (pgrx 0.12.9)
  • pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
  • pg_timetable 5.13.0
  • ferretdb 2.2.0
  • documentdb 0.103.0 (新增 aarch64 支持)
  • pgml 2.10.0 (pgrx 0.12.9)
  • sqlite_fdw 2.5.0 (fix pg17 deb)
  • tzf 0.2.2 0.14.1 (rename src)
  • pg_vectorize 0.22.2 (pgrx 0.13.1)
  • wrappers 0.5.0 (pgrx 0.12.9)

校验和

ab91bc05c54b88c455bf66533c1d8d43  pigsty-v3.6.0.tgz
4c9fabc2d1f0ed733145af2b6aff2f48 pigsty-pkg-v3.5.0.d12.x86_64.tgz
796d47de12673b2eb9882e527c3b6ba0 pigsty-pkg-v3.5.0.el8.x86_64.tgz
a53ef2cede1363f11e9faaaa43718fdc pigsty-pkg-v3.5.0.el9.x86_64.tgz
36da28f97a845fdc0b7bbde2d3812a67 pigsty-pkg-v3.5.0.u22.x86_64.tgz
8551b3e04b38af382163e6857778437d pigsty-pkg-v3.5.0.u24.x86_64.tgz

信息来源

1.5 - Pigsty v3.4.1

OpenHalo & OrioleDB,MySQL 兼容,pgAdmin 改进

GitHub 发布页面:v3.4.1

  • 在 EL 系统上增加了对 MySQL 协议兼容 PostgreSQL 内核的支持:openHalo
  • 在 EL 系统上增加了对 OLTP 增强 PostgreSQL 内核的支持:orioledb
  • 优化了 pgAdmin 9.2 应用模板,具有自动服务器列表更新和 pgpass 密码填充功能
  • 将 PG 默认最大连接数增加到 250、500、1000
  • 从 EL8 中删除了有依赖错误的 mysql_fdw 扩展

基础设施更新

  • pig 0.3.4
  • etcd 3.5.21
  • restic 0.18.0
  • ferretdb 2.1.0
  • tigerbeetle 0.16.34
  • pg_exporter 0.8.1
  • node_exporter 1.9.1
  • grafana 11.6.0
  • zfs_exporter 3.8.1
  • mongodb_exporter 0.44.0
  • victoriametrics 1.114.0
  • minio 20250403145628
  • mcli 20250403170756

扩展更新

  • 将 pg_search 升级到 0.15.13
  • 将 citus 升级到 13.0.3
  • 将 timescaledb 升级到 2.19.1
  • 将 pgcollection RPM 升级到 1.0.0
  • 将 pg_vectorize RPM 升级到 0.22.1
  • 将 pglite_fusion RPM 升级到 0.0.4
  • 将 aggs_for_vecs RPM 升级到 1.4.0
  • 将 pg_tracing RPM 升级到 0.1.3
  • 将 pgmq RPM 升级到 1.5.1

校验和

471c82e5f050510bd3cc04d61f098560  pigsty-v3.4.1.tgz
4ce17cc1b549cf8bd22686646b1c33d2  pigsty-pkg-v3.4.1.d12.aarch64.tgz
c80391c6f93c9f4cad8079698e910972  pigsty-pkg-v3.4.1.d12.x86_64.tgz
811bf89d1087512a4f8801242ca8bed5  pigsty-pkg-v3.4.1.el9.x86_64.tgzz
9fe2e6482b14a3e60863eeae64a78945  pigsty-pkg-v3.4.1.u22.x86_64.tgz

信息来源

1.6 - Pigsty v3.4.0

备份改进,自动证书,AGE,Ivory 全平台,本地化,架构与参数改进

GitHub 发布页面:v3.4.0

介绍博客:Pigsty v3.4 MySQL 兼容性和全面增强

新功能

  • 增加了新的 pgBackRest 备份监控指标和仪表板
  • 增强了 Nginx 服务器配置选项,支持自动 Certbot 签发
  • 现在优先使用 PostgreSQL 内置的 C/C.UTF-8 区域设置
  • IvorySQL 4.4 现在在所有平台上完全支持(RPM/DEB 在 x86/ARM 上)
  • 增加了新的软件包:Juicefs、Restic、TimescaleDB EventStreamer
  • Apache AGE 图数据库扩展现在在 EL 上完全支持 PostgreSQL 13–17
  • 改进了 app.yml playbook:无需额外配置即可启动标准 Docker 应用
  • 升级 Supabase、Dify 和 Odoo 应用模板到最新版本
  • 增加 electric 应用模板,本地优先的 PostgreSQL 同步引擎

基础设施包

  • +restic 0.17.3
  • +juicefs 1.2.3
  • +timescaledb-event-streamer 0.12.0
  • Prometheus 3.2.1
  • AlertManager 0.28.1
  • blackbox_exporter 0.26.0
  • node_exporter 1.9.0
  • mysqld_exporter 0.17.2
  • kafka_exporter 1.9.0
  • redis_exporter 1.69.0
  • pgbackrest_exporter 0.19.0-2
  • DuckDB 1.2.1
  • etcd 3.5.20
  • FerretDB 2.0.0
  • tigerbeetle 0.16.31
  • vector 0.45.0
  • VictoriaMetrics 1.113.0
  • VictoriaLogs 1.17.0
  • rclone 1.69.1
  • pev2 1.14.0
  • grafana-victorialogs-ds 0.16.0
  • grafana-victoriametrics-ds 0.14.0
  • grafana-infinity-ds 3.0.0

PostgreSQL 相关

  • Patroni 4.0.5
  • PolarDB 15.12.3.0-e1e6d85b
  • IvorySQL 4.4
  • pgbackrest 2.54.2
  • pev2 1.14
  • Babelfish 13.17

PostgreSQL 扩展

  • pgspider_ext 1.3.0(新扩展)
  • apache age 13–17 el rpm (1.5.0)
  • timescaledb 2.18.2 → 2.19.0
  • citus 13.0.1 → 13.0.2
  • documentdb 1.101-0 → 1.102-0
  • pg_analytics 0.3.4 → 0.3.7
  • pg_search 0.15.2 → 0.15.8
  • pg_ivm 1.9 → 1.10
  • emaj 4.4.0 → 4.6.0
  • pgsql_tweaks 0.10.0 → 0.11.0
  • pgvectorscale 0.4.0 → 0.6.0 (pgrx 0.12.5)
  • pg_session_jwt 0.1.2 → 0.2.0 (pgrx 0.12.6)
  • wrappers 0.4.4 → 0.4.5 (pgrx 0.12.9)
  • pg_parquet 0.2.0 → 0.3.1 (pgrx 0.13.1)
  • vchord 0.2.1 → 0.2.2 (pgrx 0.13.1)
  • pg_tle 1.2.0 → 1.5.0
  • supautils 2.5.0 → 2.6.0
  • sslutils 1.3 → 1.4
  • pg_profile 4.7 → 4.8
  • pg_snakeoil 1.3 → 1.4
  • pg_jsonschema 0.3.2 → 0.3.3
  • pg_incremental 1.1.1 → 1.2.0
  • pg_stat_monitor 2.1.0 → 2.1.1
  • ddl_historization 0.7 → 0.0.7(错误修复)
  • pg_sqlog 3.1.7 → 1.6(错误修复)
  • pg_random 删除开发后缀(错误修复)
  • asn1oid 1.5 → 1.6
  • table_log 0.6.1 → 0.6.4

接口变更

  • 增加了新的 Docker 参数:docker_datadocker_storage_driver#521@waitingsong 提供)
  • 增加了新的基础设施参数:alertmanager_port,让您指定 AlertManager 端口
  • 增加了新的基础设施参数:certbot_sign,在 nginx 初始化期间申请证书?(默认为 false)
  • 增加了新的基础设施参数:certbot_email,指定通过 Certbot 请求证书时使用的邮箱
  • 增加了新的基础设施参数:certbot_options,指定 Certbot 的额外参数
  • 更新 IvorySQL,从 IvorySQL 4.4 开始将其默认二进制文件放在 /usr/ivory-4
  • pg_lc_ctype 和其他区域相关参数的默认值从 en_US.UTF-8 更改为 C
  • 对于 PostgreSQL 17,如果使用 UTF8 编码与 CC.UTF-8 区域,PostgreSQL 的内置本地化规则现在优先
  • configure 自动检测 PG 版本和环境是否都支持 C.utf8,并相应调整区域相关选项
  • 将默认 IvorySQL 二进制路径设置为 /usr/ivory-4
  • 更新 pg_packages 的默认值为 pgsql-main patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • 更新 repo_packages 的默认值为 [node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules]
  • /etc/profile.d/node.sh 中删除 LANGLC_ALL 环境变量设置
  • 现在使用 bento/rockylinux-8bento/rockylinux-9 作为 EL 的 Vagrant box 镜像
  • 增加了新别名 extra_modules,包含额外的可选模块
  • 更新 PostgreSQL 别名:postgresqlpgsql-mainpgsql-corepgsql-full
  • GitLab 仓库现在包含在可用模块中
  • Docker 模块已合并到基础设施模块中
  • node.yml playbook 现在包含 node_pip 任务,在每个节点上配置 pip 镜像
  • pgsql.yml playbook 现在包含 pgbackrest_exporter 任务,用于收集备份指标
  • Makefile 现在允许使用 META/PKG 环境变量
  • 增加 /pg/spool 目录作为 pgBackRest 的临时存储
  • 默认禁用 pgBackRest 的 link-all 选项
  • 默认为 MinIO 仓库启用块级增量备份

错误修复

  • 修复 pg-backup 中的退出状态码(#532@waitingsong 提供)
  • pg-tune-hugepage 中,限制 PostgreSQL 仅使用大页面(#527@waitingsong 提供)
  • 修复 pg-role 任务中的逻辑错误
  • 纠正大页面配置参数的类型转换
  • 修复 slim 模板中 node_repo_modules 的默认值问题

校验和

768bea3bfc5d492f4c033cb019a81d3a  pigsty-v3.4.0.tgz
7c3d47ef488a9c7961ca6579dc9543d6  pigsty-pkg-v3.4.0.d12.aarch64.tgz
b5d76aefb1e1caa7890b3a37f6a14ea5  pigsty-pkg-v3.4.0.d12.x86_64.tgz
42dacf2f544ca9a02148aeea91f3153a  pigsty-pkg-v3.4.0.el8.aarch64.tgz
d0a694f6cd6a7f2111b0971a60c49ad0  pigsty-pkg-v3.4.0.el8.x86_64.tgz
7caa82254c1b0750e89f78a54bf065f8  pigsty-pkg-v3.4.0.el9.aarch64.tgz
8f817e5fad708b20ee217eb2e12b99cb  pigsty-pkg-v3.4.0.el9.x86_64.tgz
8b2fcaa6ef6fd8d2726f6eafbb488aaf  pigsty-pkg-v3.4.0.u22.aarch64.tgz
83291db7871557566ab6524beb792636  pigsty-pkg-v3.4.0.u22.x86_64.tgz
c927238f0343cde82a4a9ab230ecd2ac  pigsty-pkg-v3.4.0.u24.aarch64.tgz
14cbcb90693ed5de8116648a1f2c3e34  pigsty-pkg-v3.4.0.u24.x86_64.tgz

信息来源

1.7 - Pigsty v3.3.0

404 扩展,扩展目录,App 剧本,Nginx 定制,DocumentDB 支持
  • 可用扩展总数增加到 404
  • PostgreSQL 二月小版本更新:17.4、16.8、15.12、14.17、13.20
  • 新功能:app.yml 脚本,用于自动安装 Odoo、Supabase、Dify 等应用。
  • 新功能:在 infra_portal 中进一步自定义 Nginx 配置。
  • 新功能:增加 Certbot 支持,快速申请免费 HTTPS 证书。
  • 新功能:pg_default_extensions 现在支持纯文本扩展列表。
  • 新功能:默认仓库现在包含 mongo、redis、groonga、haproxy 等。
  • 新参数:node_aliases,为节点添加命令别名。
  • 修复:解决 Bootstrap 脚本中的默认 EPEL 仓库地址问题。
  • 改进:为 Debian Security 仓库添加阿里云镜像。
  • 改进:IvorySQL 内核的 pgBackRest 备份支持。
  • 改进:PolarDB 的 ARM64 和 Debian/Ubuntu 支持。
  • pg_exporter 0.8.0 现在支持 pgbouncer 1.24 中的新指标。
  • 新功能:gitdockersystemctl 等常用命令的自动补全 #506 #507@waitingsong 提供。
  • 改进:优化 pgbouncer 配置模板中的 ignore_startup_parameters #488@waitingsong 提供。
  • 新主页设计:Pigsty 的网站现在拥有全新的外观。
  • 扩展目录:RPM/DEB 二进制包的详细信息和下载链接。
  • 扩展构建:pig CLI 现在自动设置 PostgreSQL 扩展构建环境。

更多版本信息请参考 GitHub 发布页面

信息来源

1.8 - Pigsty v3.2.2

390扩展,Omnigres 支持,Mooncake,Citus13 与 PG17 支持

变更内容

  • 升级 IvorySQL 至4.2版本(基于 PostgreSQL 17.2)
  • 为 PolarDB 内核添加 Arm64 和 Debian 支持
  • 在默认 infra_packages 中添加 certbot 和 certbot-nginx
  • 增加 pgbouncer 的 max_prepared_statements 参数至256
  • 移除 pgxxx-citus 包别名
  • pg_extensions 中默认隐藏 pgxxx-olap 类别(因为存在两对扩展冲突)

信息来源

1.9 - Pigsty v3.2.1

350扩展,Ivory4,Citus 强化,Odoo 模板

亮点特性

  • PG 扩展插件数量提升至350个,新增强力 Rust 扩展 anon。
  • IvorySQL 支持更新至 PG17 兼容的4.0版本
  • 使用 Pigsty 编译的 Citus,TimescaleDB 与 PGroonga。
  • 添加 Odoo 一键自建模板与新 app.yml 剧本

新增 13 扩展插件:

  • 新增 pg_anon 2.0.0
  • 新增 omnisketch 1.0.2
  • 新增 ddsketch 1.0.1
  • 新增 pg_duration 1.0.1
  • 新增 ddl_historization 0.0.7
  • 新增 data_historization 1.1.0
  • 新增 schedoc 0.0.1
  • 新增 floatfile 1.3.1
  • 新增 pg_upless 0.0.3
  • 新增 pg_task 1.0.0
  • 新增 pg_readme 0.7.0
  • 新增 vasco 0.1.0
  • 新增 pg_xxhash 0.0.1

更新扩展版本

  • lower_quantile 1.0.3
  • quantile 1.1.8
  • sequential_uuids 1.0.3
  • pgmq 1.5.0 (subdir)
  • floatvec 1.1.1
  • pg_parquet 0.2.0
  • wrappers 0.4.4
  • pg_later 0.3.0
  • topn fix for deb.arm64
  • add age 17 on debian
  • powa + pg17, 5.0.1
  • h3 + pg17
  • ogr_fdw + pg17
  • age + pg17 1.5 on debian
  • pgtap + pg17 1.3.3
  • repmgr
  • topn + pg17
  • pg_partman 5.2.4
  • credcheck 3.0
  • ogr_fdw 1.1.5
  • ddlx 0.29
  • postgis 3.5.1
  • tdigest 1.4.3
  • pg_repack 1.5.2

信息来源

1.10 - Pigsty v3.2.0

扩展管理 CLI,Grafana 强化,ARM64 扩展补完

亮点特性

  • Pigsty 命令行工具:pig 0.2.0,可用于管理扩展插件。
  • 提供五大发行版上 390 个扩展 的 ARM64 扩展支持
  • Supabase 发布周最新版本更新,全发行版均可自建。
  • Grafana 更新至 11.4,新增 infinity 数据源。

软件包变化

  • 新增扩展

  • 更新扩展

    • pgvectorscale 0.4.0 -> 0.5.1
    • pg_parquet 0.1.0 -> 0.1.1
    • pg_polyline 0.0.1
    • pg_cardano 1.0.2 -> 1.0.3
    • pg_vectorize 0.20.0
    • pg_duckdb 0.1.0 -> 0.2.0
    • pg_search 0.13.0 -> 0.13.1
    • aggs_for_vecs 1.3.1 -> 1.3.2
    • pgoutput 被标记为新的 PostgreSQL Contrib 扩展
  • 基础设施

    • 新增 promscale 0.17.0
    • 新增 grafana-plugins 11.4
    • 新增 grafana-infinity-plugins
    • 新增 grafana-victoriametrics-ds
    • 新增 grafana-victorialogs-ds
    • vip-manager 2.8.0 -> 3.0.0
    • vector 0.42.0 -> 0.43.0
    • grafana 11.3 -> 11.4
    • prometheus 3.0.0 -> 3.0.1 (软件包名从 prometheus2 变更为 prometheus)
    • nginx_exporter 1.3.0 -> 1.4.0
    • mongodb_exporter 0.41.2 -> 0.43.0
    • VictoriaMetrics 1.106.1 -> 1.107.0
    • VictoriaLogs 1.0.0 -> 1.3.2
    • pg_timetable 5.9.0 -> 5.10.0
    • tigerbeetle 0.16.13 -> 0.16.17
    • pg_export 0.7.0 -> 0.7.1
  • 缺陷修复

    • el8.aarch64 添加 python3-cdiff 修复 patroni 依赖错漏问题
    • el9.aarch64 添加 timescaledb-tools,修复官方仓库缺失问题
    • el9.aarch64 添加 pg_filedump,修复官方仓库缺失问题
  • 移除扩展

    • pg_mooncake 因为与 pg_duckdb 冲突而被移除。
    • pg_top 因为出现太多版本出现缺失,因质量问题而淘汰。
    • hunspell_pt_pt 因为与 PG 官方字典文件冲突而被淘汰。
    • pg_timeit 因为无法在 AARCH64 架构上使用而被淘汰。
    • pgdd 因为缺乏维护,PG 17 与 pgrx 版本老旧而被标记为弃用。
    • old_snapshotadminpack 被标记为 PG 17 不可用。
    • pgml 被设置为默认不下载不安装。

API 变化

  • repo_url_packages 参数现在默认值为空数组,因为所有软件包现在都通过操作系统包管理器进行安装。
  • grafana_plugin_cache 参数弃用,现在 Grafana 插件通过操作系统包管理器进行安装
  • grafana_plugin_list 参数弃用,现在 Grafana 插件通过操作系统包管理器进行安装
  • 原名为 prod 的 36 节点仿真模板现在重命名为 simu
  • 原本在 node_id/vars 针对每个发行版代码生成的配置,现在同样针对 aarch64 生成。
  • infra_packages 中默认添加命令行管理工具 pig
  • configure 命令同样会修改自动生成配置文件中 pgsql-xxx 别名的版本号。
  • adminpack 在 PG 17 中被移除,因此从 Pigsty 默认扩展中被移除。

问题修复

  • 修复了 pgbouncer 仪表盘选择器问题 #474
  • pg-pitr 新增 --arg value 参数解析支持 by @waitingsong
  • 修复 Redis 日志信息 typo by @waitingsong

软件包校验和

8fdc6a60820909b0a2464b0e2b90a3a6  pigsty-v3.2.0.tgz
d2b85676235c9b9f2f8a0ad96c5b15fd  pigsty-pkg-v3.2.0.el9.aarch64.tgz
649f79e1d94ec1845931c73f663ae545  pigsty-pkg-v3.2.0.el9.x86_64.tgz
c42da231067f25104b71a065b4a50e68  pigsty-pkg-v3.2.0.d12.aarch64.tgz
ebb818f98f058f932b57d093d310f5c2  pigsty-pkg-v3.2.0.d12.x86_64.tgz
24c0be1d8436f3c64627c12f82665a17  pigsty-pkg-v3.2.0.u22.aarch64.tgz
0b9be0e137661e440cd4f171226d321d  pigsty-pkg-v3.2.0.u22.x86_64.tgz

信息来源

1.11 - Pigsty v3.1.0

PG 17 升默认大版本,配置简化,Ubuntu24 与 ARM 支持,Supabase,MinIO 改进

亮点特性

  • 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 中使用软件包组别名
  • 提供了 Babelfish,IvorySQL,PolarDB 的软件源镜像,简化三者的安装。
  • 默认启用数据库校验和。
  • 修复 ETCD 与 MINIO 日志面板

软件升级

  • PostgreSQL 17.2, 16.6, 15.10, 14.15, 13.18, 12.22
  • PostgreSQL 扩展版本变动请参考:/ext/
  • 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)

校验和

e62f9ce9f89a58958609da7b234bf2f2  pigsty-v3.1.0.tgz

信息来源

1.12 - Pigsty v3.0.4

PG 17 扩展,OLAP 全家桶,pg_duckdb

特性

  • 针对 PostgreSQL 17 编译了所有支持的 Pigsty 扩展插件
  • 提供了全新的 OLAP 扩展支持:pg_duckdbpg_parquet
  • 简化并优化了最新版本 Supabase 自建的流程
  • 新增参数 docker_image,允许在 Docker 安装后自动拉取镜像。

扩展

欢迎查阅我们最新的 PostgreSQL 扩展目录: /ext/

统计项 总计 PGDG PIGSTY MISC MISS PG17 PG16 PG15 PG14 PG13 PG12
EL 系统扩展 338 134 130 4 7 298 334 336 328 319 310
Deb 系统扩展 326 109 143 74 19 290 322 324 316 307 300
RPM 软件包 313 122 129 4 6 275 309 311 303 294 285
DEB 软件包 298 93 142 64 19 264 294 296 288 279 272

版本升级

  • 新的 PGSQL 扩展

  • 升级与跟进 PG 扩展

    • pg_search 0.11.0
    • pg_analytics 0.2.0
    • plv8 3.2.3
    • supautils 2.5.0
    • icu_ext 1.9.0
    • redis_fdw 17
    • pg_failover_slots 1.1.0
    • pg_later 0.1.3
    • plprql 1.0.0
    • pg_vectorize 0.18.3
    • unit 7.7 -> 7.9
    • log_fdw 1.4
    • pg_duckdb 0.1.0
    • pg_graphql 1.5.9 (+17)
    • pg_jsonschema 0.3.2 (+17)
    • pgvectorscale 0.4.0 (+17)
    • wrappers 0.4.3 +pg17
    • pg_ivm 1.9
    • pg_timeseries 0.1.6
    • pgmq 1.4.4
    • pg_protobuf 16 17
    • pg_uuidv7 1.6
    • pg_readonly
    • pgddl 0.28
    • pg_safeupdate
    • pg_stat_monitor 2.1
    • pg_profile 4.7
    • system_stats 3.2
    • pg_auth_mon 3.0
    • login_hook 1.6
    • logerrors 2.1.3
    • pg-orphaned
    • pgnodemx 1.7
    • sslutils 1.4 (deb+pg16,17)
    • timestamp9 (deb)
  • 修复不支持 PG16/17的扩展

    • pg_mon
    • pg_uri
    • agg_for_vecs
    • quantile
    • lower_quantile
    • pg_protobuf
    • acl
    • pg_emailaddr
    • pg_zstd
    • smlar
    • geohash
    • pgsmcrypto (+17)
    • pg_tiktoken (+17)
    • pg_idkit (+17)
  • 基础设施软件包

    • Grafana 11.3
    • duckdb 1.1.2
    • etcd 3.5.16
    • ferretdb 1.24.0
    • minio 20241013133411
    • mcli 2024101313411
    • pushgateway 1.10
    • tigerbeetle 0.16.8
    • mongodb_exporter 0.41.2
    • redis_exporter 1.64.1
    • vector 0.41.1
    • vip-manager 2.7
    • sealos 5.0.1

信息来源

1.13 - Pigsty v3.0.3

PostgreSQL 17,Etcd 运维优化,IvorySQL 3.4,PostGIS 3.5

特性

  • 提供对最新发布的 PostgreSQL 17 支持。
  • 优化了 etcd 配置,监控,与告警规则
  • (Oracle 兼容的)IvorySQL 3.4 支持,与 PostgreSQL 16.4 同步

版本升级

  • PostGIS 3.5
  • Grafana 11.2
  • duckdb 1.1
  • pg_search 0.10.2
  • pg_analytics 0.1.4

信息来源

1.14 - Pigsty v3.0.2

精简安装模式,PolarDB 15支持,监控视图更新

特性

  • 精简安装模式:使用 slim.yml 进行最精简的 HA PGSQL 部署。
  • PolarDB PG 15 的原生支持。
  • 优化 monitor.pg_table_bloatmonitor.pg_index_bloat,使用安全定义包装函数规避 PolarDB 统计视图权限问题。
  • 在各模块的监控注册阶段,尊重 prometheus_enabledgrafana_enabled 配置选项,关闭时不再注册。
  • /etc/profile.d/pgsql.sh 中添加 PGDATABASEPGPORT 环境变量,设置为 pg_primary_db(默认 postgres

变更

  • 在 Pigsty PGSQL 仓库中移除 PolarDB 11 与 CloudberryDB 1.5.4 的 RPM/APT 包。
  • 使用专用的仓库分发 PolarDB 15 与 CloudberryDB 1.6.0 的 RPM/APT 包。

问题修复

  • 修复 Redis 的 /etc/tmp.files.d 文件名错误。
  • 在管理 pgbouncer 用户时,设置 PGHOSTPGPORT 环境变量。
  • 临时移除 pg_snakeoil 扩展支持,因为 EL8 上游源 clamv 出现依赖缺失问题。
  • 移除 pgsql 角色的 Notify / Handler,以兼容更老的 Ansible 2.9 版本。

信息来源

1.15 - Pigsty v3.0.1

例行问题修复,Patroni 4支持,Oracle 兼容性改进

特性改进

  • PolarDB Oracle 兼容性模式支持(需要第三方商业闭源内核)
  • 使用 Oracle 兼容的 SQL 语法改写监控视图与相关 SQL 语句
  • Patroni 4 支持与适配
  • 新增扩展 pg_analytics,通过 duckdb 为 PG 加装分析能力
  • 添加新扩展:odbc_fdwjdbc_fdw,提供通用的外部数据源连接能力
  • 仓库添加新内核 cloudberrydb (Greenplum 原班开发者的开源分支)
  • 仓库添加新工具 walminer,从 WAL(replica 等级)中提取原始 SQL。(高级特性需自行购买 License)
  • 更新执行计划可视化工具 Pev2 版本至 1.12.1
  • 新增 Grafana 插件:volkovlabs-rss-datasource
  • 在 PGCAT databases 监控面板中添加了已安装和待安装的扩展插件
  • PGSQL 主库初始化后,会重启一次以便 pg_param & pg_files 生效,因此 Supabase PG / PolarDB 集群置备后无需重启。

问题修复

  • 修复了 Grafana 11.1.4 面板插件默认不加载的问题
  • 修复了特定操作系统上 BlackBox Exporter Ping 探针失效的问题
  • 确保 /var/run/postgresql 与 /var/run/redis 临时目录总是在重启后自动创建
  • 修复了 cache.yml 剧本没有正确移除老旧的 patroni 3.0.4 RPM 包问题
  • 修复了个别告警规则中的描述信息错误
  • 移除了 Patroni 配置文件中过时的 Bootstrap User/HBA 参数

信息来源

1.16 - Pigsty v3.0.0

333个扩展插件,可插拔内核,MSSQL,Oracle,PolarDB 兼容性

亮点特性

  • 扩展大爆炸

Pigsty v3 提供了史无前例的 333 个可用扩展插件。 包括 121 个扩展 RPM包133DEB包,数量已经超过了 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 #babelfish
- 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 Babelfish),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 的原生部署、监控管控支持以满足“国产化”需要。

使用以下命令快速安装体验:

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 四大类。

其他新特性

  • PG OLAP 分析能力史诗级加强:DuckDB 1.0.0,DuckDB FDW,以及 PG Lakehouse,Hydra 移植至 Deb 系统中。
  • PG 向量检索与全文检索能力加强:Vectorscale 提供 DiskANN 向量索引,Hunspell 分词字典支持,pg_search 0.8.6。
  • 帮助 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/cachebin/release-pkg 脚本。

API 变更

  • 新参数选项: pg_mode 现在支持的模式有 pgsql, citus, gpsql, mssql, ivory, polar,用于指定 PostgreSQL 集群的模式
    • pgsql: 标准 PostgreSQL 高可用集群
    • citus: Citus 水平分布式 PostgreSQL 原生高可用集群
    • gpsql: 用于 Greenplum 与 GP 兼容数据库的监控(专业版)
    • mssql: 安装 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 选项会自动在配置中写入当前环境中的代理服务器配置。
  • 参数强化:infra_portal 参数现在支持指定 path 选项,对外暴露本机上的目录,提供 web 服务。
  • 参数强化:repo_url_packages 中的 repo.pigsty.io 会在区域为中国时自动替换为 repo.pigsty.cc,解决科学上网问题,此外,现在可以指定下载后的文件名称。
  • 参数强化:pg_databases.extensions 中的 extension 字段现在可以支持字典与扩展名字符串两种模式,字典模式提供 version 支持,允许安装特定版本的扩展。
  • 参数强化:repo_upstream 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 repo_upstream_default 提取对应系统的默认值。
  • 参数强化:repo_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 repo_packages_default 提取对应系统的默认值。
  • 参数强化:infra_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 infra_packages_default 提取对应系统的默认值。
  • 参数强化:node_default_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 node_packages_default 提取对应系统的默认值。
  • 参数强化:pg_packagespg_extensions 中的扩展现在都会从 rpm.ymldeb.yml 中定义的 pg_package_map 执行一次查找与翻译。
  • 参数强化:node_packagespg_extensions 参数中指定的软件包在安装时会升级至最新版本, node_packages 中现在默认值变为 [openssh-server],帮助修复 OpenSSH CVE
  • 参数强化:pg_dbsu_uid 会自动根据操作系统类型调整为 26 (EL)或 543 (Debian),避免了手工调整。
  • 设置了 pgbouncer 默认参数,max_prepared_statements = 128 启用了事物池化模式下的准备语句支持,并设置 server_lifetime 为 600,
  • 修改了 patroni 模板默认参数,统一增大 max_worker_processes +8 可用后端进程,提高 max_wal_sendersmax_replication_slots 至 50,并增大 OLAP 模板临时文件的大小限制为主磁盘的 1/5

版本升级

截止至发布时刻,Pigsty 主要组件的版本升级如下:

Pigsty 重新编译了所有 PostgreSQL 扩展插件,PostgreSQL 扩展插件的最新版本,可用的 333 个扩展插件请参考 扩展列表

新应用

Pigsty 现在提供开箱即用的 Dify 与 Odoo 两款使用 PostgreSQL 软件的 Docker Compose 模板:

  • Dify: AI 智能体工作流编排与 LLMOps,使用 PostgreSQL 作为元数据库,PGVector 作为向量存储。
  • Odoo: 企业级开源 ERP 系统,使用 PostgreSQL 作为底层数据库。

Pigsty 专业版现在提供试点的 Kubernetes 部署支持与 Kafka KRaft 集群部署与监控支持

  • KUBE: 使用 cri-dockerd 或 containerd 部署由 Pigsty 托管的 Kubernetes 集群
  • KAFKA:部署由 Kraft 协议支持的高可用 Kafka 集群

问题修复

  • 修复了 Ubuntu / Debian 系统中,节点重启后可能出现的 postgresql-common 服务自动启动替代默认数据库集群的缺陷
  • 通过 node_packages 中的默认值 [openssh-server],CVE-2024-6387 可以在 Pigsty 安装过程中被自动修复。
  • 修复了 Loki 解析 Nginx 日志标签基数过大导致的内存消耗问题。
  • 修复了 EL8 系统中上游 Ansible 依赖变化导致的 bootstrap 失效问题(python3.11-jmespath 升级至 python3.12-jmespath)

信息来源

1.17 - Pigsty v2.7.0

扩展大爆炸,新增20+强力扩展插件,与多款 Docker 应用

亮点特性

新增了大量强力扩展插件,特别是一些使用 rustpgrx 进行开发的强力扩展:

  • 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

软件版本升级

  • 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)

Docker 应用模板

  • Odoo:开源 ERP 软件与插件
  • Jupyter:使用容器运行 Jupyter Notebook
  • PolarDB:运行“国产数据库” PolarDB,应付信创检查!
  • supabase:更新至最近的 GA 版本
  • bytebase:使用 latest 标签替代特定版本号。
  • pg_exporter:更新了 Docker 镜像的例子。

缺陷修复

  • 修复了 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/pgsty/pigsty/pull/405
  • 不再使用 Promtail & Loki 解析 Infra 节点上的 Nginx 日志细节标签,因为这样会导致标签基数爆炸。
  • 在 Prometheus 配置中使用 alertmanager API v2 替代 v1
  • 在 PGSQL 模块中,使用 /pg/cert/ca.crt 代替 /etc/pki/ca.crt,降低对节点根证书的依赖。

新的贡献者

完整的变更日志:https://github.com/pgsty/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

信息来源

1.18 - Pigsty v2.6.0

PG 16 作为默认大版本,引入 ParadeDB 与 DuckDB 等扩展

亮点特性

软件配置变更

  • 使用 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_packagesinfra_packagespg_packagespg_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

信息来源

1.19 - Pigsty v2.5.1

例行小版本更新,PG16 重要扩展支持

跟进 PostgreSQL v16.1, v15.5, 14.10, 13.13, 12.17, 11.22 小版本例行更新。

现在 PostgreSQL 16 的所有重要扩展已经就位(新增 pg_repacktimescaledb 支持)

  • 软件更新:
    • 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

信息来源

1.20 - Pigsty v2.5.0

Ubuntu/Debian 支持:bullseye, bookworm, jammy, focal
curl https://get.pigsty.cc/latest | bash

亮点特性

  • Ubuntu / Debian 支持: bullseye, bookworm, jammy, focal

  • 使用 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): imgsmlrpg_similaritypg_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

信息来源

1.21 - Pigsty v2.4.1

Supabase/PostgresML 支持与各种新扩展:graphql, jwt, pg_net, vault
  • Supabase 支持:开源的 Firebase 替代,现可使用 Pigsty 本地托管的 PostgreSQL 实例作为数据存储。
  • PostgresML 支持:使用 SQL 完成经典机器学习算法,训练、微调、调用大语言模型(hugging face)。
  • FerretDB v1.10 支持,在 PostgreSQL 上提供 MongoDB API 与协议兼容能力。
  • GraphQL 扩展: pg_graphql:从现有模式中反射出 GraphQL 模式,提供库内 GraphQL 查询能力。
  • JWT 支持扩展:pgjwt 允许您使用 SQL 验证签发 JWT (JSON Web Tokens)。
  • 密钥存储扩展: vault 可以在提供一个安全存储加密密钥的保险柜。
  • 数据恢复扩展:pg_filedump:可用于快速从 PostgreSQL 二进制文件中恢复数据
  • 图数据库扩展:Apache age,为 PostgreSQL 添加 OpenCypher 查询支持,类似 Neo4J
  • 中文分词扩展:zhparser,为中文全文检索提供分词能力,类似 ElasticSearch。
  • 高效位图扩展:pg_roaringbitmap,在 PostgreSQL 中提供 roaring bitmap 的支持,高效计数聚合统计。
  • 向量嵌入替代:pg_embedding,提供了不同于 pgvector 的另一种 HNSW 替代实现。
  • 可信语言扩展:pg_tle,由 AWS 出品的,允许您打包分发管理由可信存储过程语言编写的函数。
  • HTTP 客户端扩展:pgsql-http:使用 SQL 接口,curl API,发起 HTTP 请求,与各类系统交互。
  • 异步 HTTP 扩展: pg_net 允许您使用 SQL 发起非阻塞的 HTTP/HTTPS 请求。
  • 列式存储引擎:hydra 针对分析场景打造的向量化列存储引擎,原地替代 Citus 列存插件。
  • 其他 PGDG 扩展:新收录8个由 PGDG 维护的扩展插件,Pigsty 支持的插件总数达到 150+。
  • PostgreSQL 16 内核支持,监控云端 RDS / PolarDB for PostgreSQL。

亮点特性

  • Supabase 支持:开源的 Firebase 替代,现可使用 Pigsty 托管的 PostgreSQL 实例存储数据。
  • PostgresML 支持:在 PostgreSQL 运行各类模型(hugging face),向量操作,经典机器学习算法。
  • GraphQL 支持扩展: pg_graphql:从现有模式中反射出 GraphQL 模式,提供库内 GraphQL 查询能力。
  • 异步 HTTP 客户端扩展: pg_net 允许您使用 SQL 发起非阻塞的 HTTP/HTTPS 请求
  • JWT 支持扩展:pgjwt 允许您使用 SQL 验证签发 JWT (JSON Web Tokens)
  • 密钥存储扩展: vault 可以在保险柜里存储加密密钥
  • FerretDB 版本升级至 v1.10
  • 新增组件:pg_filedump:可用于快速从 PostgreSQL 二进制文件中恢复数据
  • 减少 EL9 离线软件包的大小,移除非必须依赖项 proj-data*
  • 修复了 Patroni 3.1.1 的错误
efabe7632d8994f3fb58f9838b8f9d7d  pigsty-pkg-v2.5.0.el7.x86_64.tgz # 1.1G
ea78957e8c8434b120d1c8c43d769b56  pigsty-pkg-v2.5.0.el8.x86_64.tgz # 1.4G
4ef280a7d28872814e34521978b851bb  pigsty-pkg-v2.5.0.el9.x86_64.tgz # 1.3G

信息来源

1.22 - Pigsty v2.4.0

PG16,监控 RDS,服务咨询支持,新扩展:中文分词全文检索/图/HTTP/嵌入等

使用 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

信息来源

1.23 - Pigsty v2.3.1

带 HNSW 的 PGVector,PG 16 RC1, 文档翻新,中文文档,例行问题修复

使用 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 and chown watchdog if patroni_watchdog_mode is required
  • pg_dbsu_sudo = limit and patroni_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

信息来源

1.24 - Pigsty v2.3.0

主机 VIP, ferretdb, nocodb, MySQL 存根,CVE 修复

相关文章:《Pigsty v2.3 发布:应用生态丰富

发布注记:https://github.com/pgsty/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.ccdemo.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 名称后缀,默认为空字符串
  • NODE.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

信息来源

1.25 - Pigsty v2.2.0

仪表盘 & 置备重做,UOS 兼容性

相关文章:《Pigsty v2.2 发布 —— 监控系统大升级

发布注记:https://github.com/pgsty/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
  • 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-jmespath 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* 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*
    • postgresql16* wal2json_16* pgvector_16* pg_squeeze_16* postgis34_16* passwordcheck_cracklib_16* pg_cron_16*
    • 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 and bin/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

信息来源

1.26 - Pigsty v2.1.0

支持 PostgreSQL 12 ~ 16beta

相关文章:Pigsty v2.1 发布:向量扩展 / PG12-16 支持

发布注记:https://github.com/pgsty/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 用于快速向节点添加软件源定义。
  • 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 都会被添加到远程机器上(例如椭圆曲线算法生成的密钥文件)

信息来源

1.27 - Pigsty v2.0.2

新增 pgvector 支持,修复 MinIO CVE

https://github.com/pgsty/pigsty/releases/tag/v2.0.2

亮点

使用开箱即用的 pgvector 存储 AI Embedding、索引、检索向量。

变更

  • 新扩展插件 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

信息来源

1.28 - Pigsty v2.0.1

v2 错误修复,安全增强,升级 Grafana 版本

https://github.com/pgsty/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_connectionslog_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 提供的反馈。

信息来源

1.29 - Pigsty v2.0.0

架构大升级,兼容性、安全性、可维护性显著增强

相关文章:

Pigsty v2.0.0 正式发布!

从 v2.0.0 开始,PIGSTY 现在是 “PostgreSQL In Great STYle"的首字母缩写,即"全盛状态的 PostgreSQL”。

curl -fsSL https://get.pigsty.cc/latest | bash
Download directly from GitHub Release
bash -c "$(curl -fsSL https://raw.githubusercontent.com/pgsty/pigsty/master/bin/get)"

# or download tarball directly with curl (EL9)
curl -L https://github.com/pgsty/pigsty/releases/download/v2.0.0/pigsty-v2.0.0.tgz -o ~/pigsty.tgz
curl -L https://github.com/pgsty/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el9.x86_64.tgz  -o /tmp/pkg.tgz
# EL7: https://github.com/pgsty/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el7.x86_64.tgz
# EL8: https://github.com/pgsty/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 用于批处理任务指标。
    • lokipromtail 现在使用 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,或使用 Chrome thisisunsafe
  • 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|europe
  • INFRA.META.os_version:企业版 Linux 发行版本:7,8,9
  • INFRA.CA.ca_cn:CA 通用名称,默认为 pigsty-ca
  • INFRA.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 比率,默认禁用,值为 0
  • NODE.HAPROXY.haproxy_service:要公开的 haproxy 服务列表
  • PGSQL.PG_ID.pg_mode:pgsql 集群模式:pgsql,citus,gpsql
  • PGSQL.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,默认为 SSD
  • PGSQL.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 数据库,默认为 postgres
  • PGSQL.PG_BOOTSTRAP.pg_max_conn:postgres 最大连接数,auto 将使用推荐值
  • PGSQL.PG_BOOTSTRAP.pg_shmem_ratio:postgres 共享内存比率,默认为 0.25,范围 0.1~0.4
  • PGSQL.PG_BOOTSTRAP.pg_rto:恢复时间目标,故障转移的 ttl,默认为 30s
  • PGSQL.PG_BOOTSTRAP.pg_rpo:恢复点目标,默认最多丢失 1MB 数据
  • PGSQL.PG_BOOTSTRAP.pg_pwd_enc:密码加密算法:md5|scram-sha-256
  • PGSQL.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-full
  • PGSQL.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 或 minio
  • PGSQL.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 ip
  • ETCD.etcd_seq:etcd 实例标识符,必需
  • ETCD.etcd_cluster:etcd 集群和组名称,默认为 etcd
  • ETCD.etcd_safeguard:防止清除正在运行的 etcd 实例吗?
  • ETCD.etcd_clean:在初始化期间清除现有的 etcd 吗?
  • ETCD.etcd_data:etcd 数据目录,默认为 /data/etcd
  • ETCD.etcd_port:etcd 客户端端口,默认为 2379
  • ETCD.etcd_peer_port:etcd 对等端口,默认为 2380
  • ETCD.etcd_init:etcd 初始集群状态,新建或已存在
  • ETCD.etcd_election_timeout:etcd 选举超时,默认为 1000ms
  • ETCD.etcd_heartbeat_interval:etcd 心跳间隔,默认为 100ms
  • MINIO.minio_seq:minio 实例标识符,必须参数
  • MINIO.minio_cluster:minio 集群名称,默认为 minio
  • MINIO.minio_clean:初始化时清理 minio 吗?默认为 false
  • MINIO.minio_user:minio 操作系统用户,默认为 minio
  • MINIO.minio_node:minio 节点名模式
  • MINIO.minio_data:minio 数据目录,使用 {x…y} 来指定多个驱动器
  • MINIO.minio_domain:minio 外部域名,默认为 sss.pigsty
  • MINIO.minio_port:minio 服务端口,默认为 9000
  • MINIO.minio_admin_port:minio 控制台端口,默认为 9001
  • MINIO.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 加密,备份,多操作系统发行版适配与自适应参数模版上的贡献!

信息来源

1.30 - Pigsty v1.5.1

Grafana 安全性修复

亮点

重要:修复了 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_databasegrafana_pgurl 被标记为过时 API,将从后续版本移除

New Apps

  • wiki.js : 使用 Postgres 搭建本地维基百科
  • FerretDB: 使用 Postgres 提供 MongoDB API

信息来源

1.31 - Pigsty v1.5.0

Docker 应用程序支持

亮点概述

  • 完善的 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,添加新功能,scaledefault,允许为指标指定一个倍乘因子,以及指定默认值。
  • pg_bgwriter, pg_wal, pg_query, pg_db, pgbouncer_stat 关于时间的指标,单位由默认的毫秒或微秒统一缩放至秒。
  • pg_table 中的相关计数器指标,现在配置有默认值 0,替代原有的 NaN
  • pg_class 指标收集器默认移除,相关指标添加至 pg_tablepg_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

信息来源

1.32 - Pigsty v1.4.1

错误修复 & 英文文档完整翻译

日常错误修复 / Docker 支持 / 英文文档

现在,默认在元节点上启用 docker。您可以使用它启动海量的各类软件

现在提供英文文档。

Bug 修复

信息来源

1.33 - Pigsty v1.4.0

MatrixDB 支持,分离 INFRA/NODES/PGSQL/REDIS 模块

架构

  • 将系统解耦为4大类别:INFRANODESPGSQLREDIS,这使得 pigsty 更加清晰、更易于扩展。
  • 单节点部署 = INFRA + NODES + PGSQL
  • 部署 pgsql 集群 = NODES + PGSQL
  • 部署 redis 集群 = NODES + REDIS
  • 部署其他数据库 = NODES + xxx(例如 MONGOKAFKA…待定)

可访问性

  • 为中国大陆提供 CDN。
  • 使用 bash -c "$(curl -fsSL http://get.pigsty.cc/latest)" 获取最新源代码。
  • 使用新的 download 脚本下载并提取包。

监控增强

  • 将监控系统分为5大类别:INFRANODESREDISPGSQLAPP
  • 默认启用日志记录
    • 现在默认启用 lokipromtail,带有预构建的 loki-rpm
  • 模型和标签
    • 为所有仪表板添加了一个隐藏的 ds prometheus 数据源变量,因此您只需选择一个新的数据源而不是修改 Grafana 数据源和仪表板。
    • 为所有指标添加了一个 ip 标签,并将其用作数据库指标和节点指标之间的连接键。
  • INFRA 监控
    • Infra 主仪表板:INFRA 概览
    • 添加日志仪表板:日志实例
    • PGLOG 分析和 PGLOG 会话现在被视为一个示例 Pigsty APP。
  • NODES 监控应用
    • 如果您完全不关心数据库,现在可以单独使用 Pigsty 作为主机监控软件!
    • 包括4个核心仪表板:节点概览 & 节点集群 & 节点实例 & 节点警报
    • 为节点引入新的身份变量:node_clusternodename
    • 变量 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大类别:INFRANODESREDISPGSQLAPP
  • 默认启用日志记录
    • 现在默认启用 lokipromtail,带有预构建的 loki-rpm
  • 模型和标签
    • 为所有仪表板添加了一个隐藏的 ds prometheus 数据源变量,因此您只需选择一个新的数据源而不是修改 Grafana 数据源和仪表板。
    • 为所有指标添加了一个 ip 标签,并将其用作数据库指标和节点指标之间的连接键。
  • INFRA 监控
    • Infra 主仪表板:INFRA 概览
    • 添加日志仪表板:日志实例
    • PGLOG 分析和 PGLOG 会话现在被视为一个示例 Pigsty APP。
  • NODES 监控应用
    • 如果您完全不关心数据库,现在可以单独使用 Pigsty 作为主机监控软件!
    • 包括4个核心仪表板:节点概览 & 节点集群 & 节点实例 & 节点警报
    • 为节点引入新的身份变量:node_clusternodename
    • 变量 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.ymlinfra-demo.yml 播放书,不会在元节点上创建 cmdb。
MD5 (app.tgz) = f887313767982b31a2b094e5589a75ea
MD5 (matrix.tgz) = 3d063437c482d94bd7e35df1a08bbc84
MD5 (pigsty.tgz) = e143b88ebea1474f9ebaffddc6072c49
MD5 (pkg.tgz) = 73e8f5ce995b1f1760cb63c1904fb91b

信息来源

1.34 - Pigsty 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_serviceregister 角色中从剧本的中间开始时的问题
  • 修复在没有 pg_cluster 变量存在的主机上 nginx 主页渲染问题
  • 在升级到 grafana 8.3.1 时修复样式问题

信息来源

1.35 - Pigsty v1.3.0

PGCAT 重整 & PGSQL 增强 & Redis Beta 支持
  • 【功能增强】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 添加为默认包

信息来源

1.36 - Pigsty v1.2.0

默认 PGSQL 版本升级至 14
  • 【功能增强】默认使用 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_tunepg_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 将使这一过程变得容易得多。它将创建一系列的脚本,帮助您近乎零停机时间地迁移您的集群。

信息来源

1.37 - Pigsty v1.1.1

TimescaleDB 升级与新 Patroni 配置模板
  • 【功能增强】 用 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 

信息来源

1.38 - Pigsty v1.1.0

主页,JupyterLab, PGWEB, Pev2 & pgbadger
  • 【增强功能】 增加 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

信息来源

1.39 - Pigsty 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 以减少开销

信息来源

1.40 - Pigsty v1.0.0

v1 正式版,监控系统重整

v1 正式发布,监控系统全面改进

亮点

  • 监控系统全面改进
    • 在 Grafana 8.0 上新增仪表盘
    • 新的度量定义,增加 PG14 支持
    • 简化的标签系统:静态标签集:(job, cls, ins)
    • 新的警报规则与衍生度量
    • 同时监控多个数据库
    • 实时日志搜索 & csvlog 分析
    • 链接丰富的仪表盘,点击图形元素进行深入|汇总
  • 架构变更
    • 将 citus 和 timescaledb 加入默认安装部分
    • 增加对 PostgreSQL 14beta2 的支持
    • 简化 haproxy 管理页面索引
    • 通过添加新的角色 register 来解耦基础设施和 pgsql
    • 添加新角色 lokipromtail 用于日志记录
    • 为管理员节点上的管理员用户添加新角色 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 脚本 createpgcreatedbcreateuser
    • 添加 cmdb 动态库存脚本:load_conf.pyinventory_cmdbinventory_conf
    • 移除过时的剧本:pgsql-monitorpgsql-servicenode-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_urlgrafana_endpoint

Bug 修复

  • 修复默认时区 Asia/Shanghai (CST) 问题
  • 修复 pgbouncer & patroni 的 nofile 限制
  • 当执行标签 pgbouncer 时,pgbouncer 的用户列表和数据库列表将会被生成

信息来源

1.41 - Pigsty v0.9.1

三步安装流程、PostgreSQL 13.3 与 Grafana 7.5.6

发布亮点

  • PostgreSQL 更新至 13.3,Grafana 更新至 7.5.6。
  • 新增 configure 配置向导。
  • 安装流程收敛为下载、配置、安装三步:
curl -fsSL https://github.com/pgsty/pigsty/releases/download/v0.9.1/pigsty.tgz | gzip -d | tar -xC ~
cd ~/pigsty
./configure
make install

信息来源

1.42 - Pigsty v0.9.0

Pigsty 图形界面,命令行界面,日志集成

v0.9 极大简化了安装流程,进行了大量日志相关改进,开发了命令行工具(Beta),并修复了一系列问题。

详情

新功能

  • 一键安装模式:

    /bin/bash -c "$(curl -fsSL https://pigsty.cc/install)"
  • 开发命令行工具 pigsty-cli 封装常用 Ansible 命令,目前 pigsty-cli 处于 Beta 状态

  • 使用 Loki 与 Promtail 收集日志:

    • 默认收集 Postgres,Pgbouncer,Patroni 日志
    • 新增部署脚本 infra-loki.ymlpgsql-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,避免监控查询出现在日志中。
  • 重构 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 使用的默认端口,默认为9080
  • promtail_status_file 保存 Promtail 状态信息的文件位置
  • promtail_send_url 用于接收日志的 loki 服务 endpoint

信息来源

1.43 - Pigsty v0.8.0

服务置备,定制对外暴露的数据库服务

v0.8 针对 服务(Service) 接入部分进行了彻底的重做。现在除了默认的 primary, replica 服务外,用户可以自行定义新的服务。服务的接口可以支持多种不同的实现,例如 L4 DPKG VIP 可作为 Haproxy 的替代品与 Pigsty 集成。同时,针对用户反馈的一些问题进行了集中处理与改进。

详情

改动内容

v0.8 是供给方案定稿版本,此后供给系统的 API 将保持稳定。

API 变更

原有 viphaproxy 角色的所有配置项,现在迁移至 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_servicespg_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_ctypelc_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

信息来源

1.44 - Pigsty v0.7.0

仅监控部署,监控现有 PostgreSQL 实例

v0.7 针对 接入已有数据库实例 进行了改进,现在用户可以采用 仅监控部署(Monly Deployment) 模式使用 Pigsty。同时新增了专用于管理数据库与用户、以及单独部署监控的剧本,并对数据库与用户的定义进行改进。

详情

Features

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 to name
  • groups field rename to roles
  • options now split into separated configration entries: login, superuser, createdb, createrole, inherit, replication,bypassrls,connlimit
  • expire_at and expire_in options
  • pgbouncer option for user is now false 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 文件。

信息来源

1.45 - Pigsty v0.6.0

架构增强,将 PG 与 Consul 解耦

v0.6 对数据库供给方案进行了修改与调整,根据用户的反馈添加了一系列实用功能与修正。针对监控系统的移植性进行优化,便于与其他外部数据库供给方案对接。

详情

BUG 修复

  • 修复了新版本 Patroni 重启后会重置 PG HBA 的问题
  • 修复了 PG Overview Dashboard 标题中的别字
  • 修复了沙箱集群 pg-test 的默认主库,原来为 pg-test-2,应当为 pg-test-1
  • 修复了过时代码注释

功能改进

  • 改造 Prometheus 与监控供给方式
    • 允许在无基础设施的情况下对已有 PG 集群进行监控部署,便于监控系统与其他供给方案集成。#11
    • 基于 Inventory 渲染所有监控对象的静态列表,用于静态服务发现。#11
    • Prometheus 添加了静态对象模式,用于替代动态服务发现,集中进行身份管理 #11
    • 监控 Exporter 现在添加了 service_registry 选项,Consul 服务注册变为可选项 #13
    • Exporter 现在可以通过拷贝二进制的方式直接安装:exporter_binary_install#14
    • Exporter 现在具有 xxx_enabled 选项,控制是否启用该组件。
  • Haproxy 供给重构与改进 #8
    • 新增了全局 HAProxy 管理界面导航,默认域名 h.pigsty
    • 允许将主库加入只读服务集中,当集群中所有从库宕机时自动承接读流量。 #8
    • 允许位 Haproxy 实例管理界面启用认证 haproxy_admin_auth_enabled
    • 允许通过配置项调整每个服务对应后端的流量权重. #10
  • 访问控制模型改进。#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 覆盖

信息来源

1.46 - Pigsty v0.5.2

剧本重构、VIP/HAProxy 控制与配置整理

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • pigsty.yml 设为默认配置,并重组标准的 sandbox.ymlinfra.ymlpgsql.yml 工作流。
  • 将 VIP 管理从 HAProxy 中拆分,新增管理员认证、流量权重与主库兜底控制。
  • 在主剧本中加入域名服务器步骤,并同步更新相关文档。

v0.5.2 是没有独立 GitHub Release 正文的维护标签,本说明依据标签提交整理。

信息来源

1.47 - Pigsty v0.5.1

仪表盘修复、浙大镜像与文档更新

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 修复 v0.5.0 之后发现的 PostgreSQL 集群与实例仪表盘问题。
  • 默认 PostgreSQL 镜像切换至浙江大学镜像,改善区域内安装速度。
  • 更新 README,并整理 v0.5 系列文档快照。

v0.5.1 是没有独立 GitHub Release 正文的维护标签,本说明依据标签提交整理。

信息来源

1.48 - Pigsty v0.5.0

支持在配置中定义业务数据库/用户

Pigsty 现在有了官方网站啦:pigsty.cc 🎉 !

详情

亮点特性

  • 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: []

数据库模板

权限模型

v0.5 改善了默认的权限模型,主要是针对单实例多租户的场景进行优化,并收紧权限控制。

  • 撤回了普通业务用户对非所属数据库的默认 CONNECT 权限
  • 撤回了非管理员用户对所属数据库的默认 CREATE 权限
  • 撤回了所有用户在 public 模式下的默认创建权限。

供给方式

原先 Pigsty 采用直接拷贝 Grafana 自带的 grafana.db 的方式完成监控系统的初始化。 这种方式虽然简单粗暴管用,但不适合进行精细化的版本控制管理。在 v0.5 中,Pigsty 采用了 Grafana API 完成了监控系统面板供给的工作。 您所需的就是在 grafana_url 中填入带有用户名密码的 Grafana URL。 因此,监控系统可以背方便地添加至已有的 Grafana 中。

信息来源

1.49 - Pigsty v0.4.0

支持 PostgreSQL 13,添加官方文档

第二个公开测试版 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

信息来源

1.50 - Pigsty 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

信息来源

1.51 - Pigsty v0.0.5

离线安装、Consul 角色与 HAProxy 修复

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 新增离线安装模式,支持在无法访问互联网的环境中完成交付。
  • 引入独立 Consul 角色,并更新软件仓库引导逻辑。
  • 加入 psql 启动辅助脚本,拆分 PostgreSQL 脚本任务,并修复 HAProxy 连接重置噪声。

本历史记录依据 v0.0.5 标签及其与 v0.0.4 的源码差异整理。

信息来源

1.52 - Pigsty v0.0.4

Ansible 角色拆分、网络与软件仓库重构

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 将原有单体自动化拆分为 Meta、Grafana、DNS、Nginx 与 Prometheus 等独立角色。
  • 新增静态网络处理,并调整本地软件仓库的上游策略。
  • 补充角色文档,使服务注册模板与新的目录布局保持一致。

本历史记录依据 v0.0.4 标签及其与 v0.0.3 的源码差异整理。

信息来源

1.53 - Pigsty v0.0.3

接口与监控模式改进

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 改进早期 Pigsty 配置接口,并加入监控模式。
  • 新增 Kubernetes 剧本,调整 PostgreSQL 初始化默认值。
  • 简化 Vagrant 引导流程,修复 HAProxy、Patroni 与监控注册中的若干问题。

这是公开发布系列之前的历史标签;本记录依据 v0.0.3 标签源码与对应提交历史整理。

信息来源

1.54 - Pigsty v0.2.0

置备流程重构、etcd DCS 与 HAProxy 2.2 支持

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 重构基础设施、节点、仓库、Patroni、PgBouncer、监控与 PostgreSQL 初始化角色。
  • 新增 etcd DCS、生产/测试清单布局与可配置数据库超级用户支持。
  • 增加 Patroni 暂停处理、HAProxy 2.2 适配及旧版 CentOS 7 修复。

v0.2.0 早于带有完整正文的 GitHub Release;本记录依据标签源码及其与 v0.1.0 的差异整理。

信息来源

1.55 - Pigsty v0.1.0

完成首轮角色化重构并通过仿真环境验证

[!INFO]

这个历史版本只有 Git 标签与源码树,没有单独发布 GitHub Release。

发布亮点

  • 完成首轮从剧本到可复用 Ansible 角色的大规模重构。
  • 建立 PostgreSQL 主从、PgBouncer、监控、HAProxy、Keepalived 与软件仓库的早期工作流。
  • 在生产仿真测试环境中验证重组后的项目结构。

v0.1.0 是早期工程里程碑,并非带有独立正文的 GitHub Release;本说明依据标签与提交历史整理。

信息来源

2 - 文章

从 VONNG 汇集的 Pigsty 观点、教程、实践记录与项目故事。

本栏目收录 VONNG 的 Pigsty 专栏全文,以及其他专栏中 front matter 明确带有 Pigsty 标签的文章;原始页面资源与已有英文译文一并保留。

2.1 - 立足中国,面向全球的 PostgreSQL 发行版

原文发布于 VONNG

大家好,我是冯若航,Pigsty 的作者,独立开源贡献者。 今天我想和大家聊一个话题:如何打造一个立足中国,面向全球的 PostgreSQL 数据库发行版

这个标题听着有点大,但我想说的很简单:PostgreSQL 已经赢了,问题是 —— 我们中国开发者在这场胜利中扮演什么角色? 是旁观者,还是参与者?是跟随者,还是引领者?

数据库内核之争已经尘埃落定,真正的竞争将会发生在数据库发行版上。 而在这个关键的机会窗口里,我们应该凝聚生态合力,打造一个全世界开发者都愿意使用的基础设施,数据库世界中的 Ubuntu / Deepseek。


WHY — 为什么

PostgreSQL 已经成为数据库领域主宰者

PostgreSQL 已经赢了 —— 这个观点有着非常扎实的数据支撑。

Stack Overflow 开发者调查 显示,专业开发者中 PostgreSQL 的使用率达到 58.2%,甩开第二名 MySQL 18.6 个百分点,而且这个比例还在加速增长。 从新开源项目,AI SaaS 到 OpenAI 这样的独角兽,PG 已经成为新项目的标配 “默认” 数据库。

pg-used-data.webp

无论 DB-Engines 的数据库热度指数,还是 JetBrains 的开发者调查 都得出了相似的结论。 如果这些社区调查还不够,我们再看看资本市场的动向。

2025 年,PostgreSQL 生态发生了两起标志性收购案: Databricks 斥资约 10 亿美元收购了 PostgreSQL 初创公司 Neon,而 Snowflake 则以 2.5 亿美元收购了 Crunchy Data。 两大数据平台巨头通过收购杀入 PostgreSQL 的 OLTP 市场——他们选的不是 MySQL,也不是自研新库,而是直接押注 PostgreSQL。

industry.webp

各大云厂商同样在 All in PostgreSQL:AWS 的新品 Aurora DSQL,Azure 的新品 HorizonDB,GCP 的 AlloyDB,这些云上创新产品都是 PostgreSQL 独占。 PG 的胜利不仅仅是技术上的胜利,更是商业上的胜利。全球最聪明的钱,都在往 PostgreSQL 生态里涌。选择 PostgreSQL 就是选择了未来!

中国在PG开源生态中并没有多少参与感

遗憾的是,在 PostgreSQL 全球狂飙突进的过程中,中国开源的存在感却非常弱。 在这幅波澜壮阔的版图上,很难找到几样醒目的 “Made in China”。我们在见证 PG 巨大胜利的同时,却几乎缺席了这场盛宴。

此前的 PostgreSQL 社区内核 Committer 列表里,没有一位中国人。 而在开源项目方面,老冯搜集了由中国公司或者中国开发者主导的 PG 开源项目,结果发现 Star 数最多, 影响力最大的竟然是老冯这个数据库个人开发者的 Pigsty 。我一方面感觉很自豪,另一方面也感觉很荒诞。

china-pg-oss.webp
项目 Star 简介
pigsty 4.3K 开箱即用的PG发行版
PolarDB PG 3.1K 阿里云 PolarDB 开源内核
pgvector.rs 2.1K Rust 编写的PG向量扩展
VectorChord 1.4K 下一代 Rust PG 向量扩展
TBase 1.4K 腾讯云 PG 内核
Cloudberry 1.1K Hashdata 的开源 Greenplum 2.0
IvorySQL 960 瀚高主导的 Oracle 兼容内核
openGauss 751 华为主导的早期 PG 分叉
openHalo 626 易景开源的 MySQL 兼容 PG 内核
zhparser 798 使用 scws 的PG中文分词扩展
duckdb_fdw 393 李红艳开源的 DuckDB 包装器
pg_jieba 392 使用结巴分词的 PG 中文分词扩展
VectorChord-bm25 314 PG 原生的 BM25 排序索引算法
pg_roaringbitmap 263 PG 中的 RoaringBitmap 位图

我这两年参加了几场 国际 PostgreSQL 会议,感受很复杂。 去年 PG 开发者大会里,我碰上了瀚高北美的 Grant Zhou 和 Carry Huang,富士通的 Zhijie Hou,再加上我,就没有别的中国开发者影子了。 今年 还碰上了 TensorChord 的朋友。放在几百人的大会里面,依然是不成比例的极少数。

中国有两三百个数据库产品,很多都是 PG 衍生。但在全球 PostgreSQL 生态里,几乎没有存在感。 我们的人才、我们的资金、我们的精力,都花在了重复造轮子上。当全球同行们正在奋勇创新,在资本市场嘎嘎乱杀的时候。 中国的数据库同行们却在泥潭中挣扎 —— 几百家国产数据库公司,只有四家在盈利,整个行业正在高速缩水凋亡。 这说明什么?说明我们在错误的方向上投入了太多资源,市场正在用脚投票。

我们需要思考如何破局:如何在 PostgreSQL 生态中找到一个切入点,做出像 Deepseek 这样有世界级影响力的东西

有这样的东西吗?有的,朋友们,有的。

数据库发行版大战拉开序幕

数据库内核之争已经尘埃落定,真正的战斗将会发生在数据库发行版上。 —— 这个判断来自对 Linux 发展历程的观察。

1991 年,Linus Torvalds 发布了 Linux 内核。但 Linux 内核本身是不能直接用的, 你需要有人把内核、工具链、软件包、配置脚本打包在一起,形成一个可以安装、可以使用的操作系统。这就是 发行版

1993 Debian 年诞生,94 年 RedHat 诞生。之后服务端操作系统内核很快就收敛到了 Linux 上, 大家都用同一个内核,OS 世界的竞争很快就从内核层面转移到了发行版。

今天的 PostgreSQL,正处于当年 Linux 的位置上。

distro.webp

做过系统管理的朋友都清楚,真正的生产环境中几乎没有有人会从源码编译整个 Linux 内核和软件栈,而是直接选择一个发行版。 因为后者已经帮我们选好了内核版本、驱动与库,准备好了软件仓库和包管理器,带有文档手册与最佳实践,可以 开箱即用

PostgreSQL 内核如今已经足够成熟强大了,如何把内核 + 扩展 + 高可用 + 监控 + 备份 + 安全等要素整合起来,形成一个开箱即用的完整解决方案,这件事成为了关键。 PostgreSQL 内核称王,发行版诸侯争霸。谁会成为数据库世界的 Debian / Ubuntu / RedHat,群雄逐鹿,犹未可知。

pg-distro.webp

事实上,目前在全球范围内,围绕 PostgreSQL 已经出现了一些“准发行版”的雏形。最有名的就是 Supabase。 它把 PostgreSQL 内核与几个扩展和开源生态组件打包起来,加上UI封装成一个后端即服务 (BaaS) 平台。 从本质上看,这就是一个 PostgreSQL 发行版!钉死了 PG 中的 Android 生态位.

一家成立不到五年的 PG 发行版创业公司,估值高达 50 亿美元; 而 PostgreSQL 内核贡献的老大哥 EDB,成立近20年估值才 10~20 亿美元,这足够证明很多事情了。

这对于我们而言既是挑战,更是机会。在这个时间窗口里, 我们完全有机会打造一个由中国团队主导的 PostgreSQL 开源发行版,服务全球用户,抢占新的制高点。 如果我们再错过这一次的机会窗口,我们可能又要在下一个时代继续扮演追随者的角色。


HOW:我是怎么做的?

但在讲故事之前,我先亮个底牌 —— 我不是来画饼的,我已经做出来了

Pigsty,一个 PostgreSQL 发行版。从下载量和网站 UV 看,用户大概小十万,中国一半,海外一半。GitHub Star 在中国 PG 生态项目里排第一。

users.webp

要是拿来和 Supabase 这种50亿美金的巨无霸比呢,差距确实很大,Supabase 的 Star 数量和用户量都是 Pigsty 的 20 倍。

Supabase 其实属于 2C 的 “Android”,而且也被老冯偷了家,目前 Pigsty 是极个别可以直接 自建生产级 Supabase 的开源方案

但这个生态允许错位竞争,可以同时出现多个赢家, 如果看 Linux 原生 PG RDS 发行版 这个细分赛道,Pigsty 拿第一当仁不让。 就算拉上 EDB、Crunchy 这些大厂搞的十几个 K8S 云原生 Operator 一起比,也算是打得有来有回。

star-history.webp

至少我证明了:一个中国开发者,用正确的方法,也可以在 PG 全球生态里占有一席之地,拿到了一张决赛圈的门票。

claude.webp

Claude Opus 4.5: PG 生态发行版格局分析

gemini.png

Gemini 3 Pro: PG 生态发行版格局分析

老冯 2022 年开始全职创业做这个,差不多三年半了。技术储备从 2018 年就开始。 作为开源项目,有一些外部贡献者,但 99% 以上的代码和工作量,是我一个人完成的。 那么问题来了:一个人,怎么做到这些的?其实就是两句话,立足中国,面向世界

立足中国:规模是最好的试炼场

什么是“立足中国”? 它不是一句口号,而是我们手中最有价值的资源 —— 规模与场景

Pigsty 并不是在车库里凭空想出来的,它是在 探探 —— 中国第二大陌生人社交平台上孵化出来的。(PS. 这是个瑞典的创始团队) 在那几年里,我们要面对的是什么?是 250 万全局 QPS 的恐怖流量,是所有核心业务逻辑全跑在数据库存储过程里的极限架构,以及上百套大型物理机集群的高效监控管理。

就连现在独角兽之王 OpenAI 对于 PostgreSQL 的使用规模与深度,也没有达到当初我们所面临的挑战。 当时市面上的监控、高可用方案,在这种规模的冲击下,要么不够看,要么不好用。 没办法,逼着我们自己试,自己造,自己整合。 我们是在几百万 QPS 的高压锅里,在一个又一个故障和报警的锤炼下,把 Pigsty 打磨出来的。

这就是“立足中国”的真正含义: 中国拥有全球罕见的互联网规模和复杂场景。这里的海量用户高并发挑战,就是最好的炼丹炉。 如果一个方案能扛住探探这种级别的压力与复杂度,并解决好这些问题,那它放在全世界的其他场景下基本都是降维打击

—— 立足中国,就是要用中国互联网场景独有的规模场景,打磨出世界先进的生产级方案。

intro.webp

面向全球:成为供应链的上游

那什么叫“面向全球”? 把文档翻译成英文,去海外发帖推广,那算不了什么。 真正的面向全球,是 让你自己成为全球软件供应链不可或缺的一环。而想要走向全球,你需要关注的是开发者的体验与需求。

developers.webp

差不多做到 2023 年,Pigsty 运维层面已经很完善了。 高可用,备份恢复,监控系统,离线部署,IaC 大规模管理全部整合到了一起,可以无需容器在主流 Linux 上一键交付。 但我隐隐觉得哪里不对,老冯一直站在 DBA 的视角,做了很多可靠性、可观测性,质量与易用性上的工作 —— 但我忽视了开发者的核心需求 —— 功能特性

ecosystem.webp

我意识到:扩展才是 PostgreSQL 最大的价值所在。MySQL 想加向量搜索,折腾很久效果还不好。 PG 呢?一个社区开发者写了 pgvector,几个扩展一起赛马,直接把这个赛道卷没了,这就是可扩展架构的威力。

去年我写了一篇文章《PostgreSQL 正在吞噬数据库世界》,发到 Hacker News 火了,传遍整个 PG 社区。 核心观点就是:PG 能拳打 Oracle、脚踢 MySQL,靠的是极致的可扩展性和繁荣的扩展生态。

于是我开始做扩展仓库。一开始想借力,等生态里其他项目做完再集成。 等了几个月发现等不来,就自己干了。先编译十几个,然后几十个,然后一百多个。 做着做着发现:PG 生态里能打的扩展就几百个,官方仓库提供一百出头, 而我凭一己之力把这个数字推到了 437 个

437-ext.webp

这个仓库覆盖 14 个 Linux 发行版、x86 和 ARM 两种架构、6 个 PostgreSQL 大版本。 仓库里有六七万个 RPM 和 DEB 包。很多扩展得改代码才能编译通过,我前后修了几十个。 想借力借不到只能自己干,反而干出了壁垒。最费工夫的苦活,成了最坚固的护城河。 但老冯也不会藏着掖着,敝帚自珍,而是将这个扩展仓库对公众与同行免费开放。

pgext-cloud.webp

让我没有想到的是, 现在不仅仅是 PG 终端用户在用 Pigsty。 国外的数据库发行版项目,甚至是一些商业数据库公司,开始直接使用 Pigsty 的扩展仓库作为他们的上游源。

以前,我们是下载别人的代码,用别人的源。 现在,是一个中国开发者维护的仓库,成为了国际数据库同行的上游基础设施。 我们不再只是旁观者或者消费者,我们成了供应商,我们嵌入到了全球 PG 的供应链里。

upstream-repo.webp

这是真正的出海:不是去别人的地盘抢饭吃,而是让别人做饭的时候,用你的大米。 用这种方式,老冯的发行版开始成为了 PostgreSQL 生态的一块基础设施,成为全球软件供应链的一个节点。

有了从零到一的突破之后,中国的 PG 生态开源软件也能够更容易的走向国际。 在老冯的 Pigsty 仓库中,目前还分发三款来自中国的 PostgreSQL Kernel 分支 —— IvorySQL,PolarDB,OpenHalo,以及一些中国开发者的扩展与工具。

kernel-deliver.webp

邀请

一个人做到现在这个程度,真的很不容易。但如果想要更进一步,打造出一个像 Ubuntu 这样的,全球主流的 PostgreSQL 发行版。 那就绝非一人能成了,需要众人拾柴火焰高。所以今天,我想借这个机会,向在座的各位发出邀请。共同参与到这样的事业中来。

面向用户的邀请

对于用户来说,你可以通过使用 Pigsty 免费获得企业级质量的本地 RDS 服务,免去手搓HA,编译安装配置等诸多烦恼,一步到位完成生产数据库自建,开箱即用。

我们邀请您在新项目中尝试 Pigsty —— 反正一行命令就能部署,不满意可以随时换掉。如果愿意向朋友推荐,写下使用心得,投稿博客或者视频,那对于项目来说也是巨大的贡献。

面向数据库厂商的邀请

对于数据库厂商来说,我想说的是,如果你们交付给客户的还是一个裸的 RPM / DEB 包,现在你可以选择用 Pigsty 交付一套完整的生产级基础设施。 Pigsty 可以成为你们的交付载体。你们专注做内核、做特色功能,Pigsty 帮你们解决周边生态的问题。这是双赢的合作。已经有好几款PG内核分支 通过 Pigsty获得了完整的 RDS 能力。

vendor-invite.webp

作为诚意,原本 AGPLv3 许可证的 Pigsty 本体也将在下个大版本中使用更宽松的开源许可。而像 PG 扩展仓库,PIG 包管理器的的全部代码与基础设施都以 Apache 2.0 许可证开源。

面向开发者的邀请

对于扩展作者来说PGEXT.CLOUD 是一个让你的作品触达全球用户的渠道。

你写了一个 PostgreSQL 扩展,怎么让用户用上?自己编译打包适配十几个不同的 Linux 发行版? 自己去触达全世界的 PG 用户?如果你有这样的烦恼,也许老冯可以帮到你。

结语

最后,我想用一句话来总结今天的演讲:

与其在两百多个国产数据库里内卷,不如一起打造一个全世界都想用的 PostgreSQL 发行版。

PostgreSQL 已经赢了。现在的问题是,我们中国人要不要参与这场胜利,以及以什么姿态参与。我选择的姿态是:拥抱 PostgreSQL,做一个发行版,立足中国,面向全球。

这条路我已经走了 7 年,即使是一个人,我会继续走下去。但我希望不是一个人走,而是有更多的人一起前行。

谢谢大家。

featured.jpg

2.2 - Pigsty v3.6:全能PG发行版的关键一步

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty v3.6 正式发布。历经两个月的精心打磨,这将是 v4.0 之前的最后一个主要版本,进行了大量重构与改进,为打造终极全能 PostgreSQL 发行版奠定了坚实基础。

本版本对 PostgreSQL、MinIO、Etcd 的部署任务进行了深度优化与重构,新增了 Percona PG TDE 内核支持,提供开箱即用的透明加密功能。此外,Supabase 自建体验得到全面优化,彻底移除了幂等剧本中的"删库"功能,并新增全自动 pgsql-pitr 剧本用于一键时间点恢复。

安装流程也进一步简化:从四步走变为三步走(下载、配置、安装),且默认采用在线安装模式,可跳过本地软件仓库的构建过程。


全新内核支持:Percona PG TDE

Percona 的 pg_tde 扩展经过数年长跑,终于正式发布 1.0 GA 版本。许多"企业级" PostgreSQL 发行版以"透明加解密"作为核心卖点,而 pg_tde 可能是第一个足够成熟的开源透明加密扩展,为开源 PostgreSQL 提供了真正意义上的企业级透明加密解决方案。

目前该扩展需要运行在打过补丁的 PostgreSQL 内核上 —— 即 Percona 的 Postgres 发行版。Pigsty 在官宣后即刻完成了支持,只需两行命令即可启用并安装,同时享受 Pigsty 提供的完整 RDS 能力:监控、高可用、PITR、IaC 等,与原生 PG 内核别无二致。

至此,Pigsty 支持的 PostgreSQL 内核数量已达到 10 个

Pigsty 已成为 PostgreSQL 发行版的发行版 —— 一个"元发行版"。各家 PostgreSQL 分支内核均可在 Pigsty 的加持下,转化为具备高可用、监控、IaC、PITR 能力的"企业级数据库服务"。


扩展生态持续强化

除 Percona 透明加密内核外,OrioleDB 也发布了 1.5 beta12 版本,Supabase CEO 透露其即将正式 GA。Pigsty 已第一时间编译了 OrioleDB 补丁版本的 PG 及其扩展。

另一个值得关注的扩展是 pgactive —— 由 AWS 开发并开源的 PG 多活扩展,声称解决了亚秒级高可用切换问题。该扩展依赖缺失的 pgfeutils,编译有一定门槛,Pigsty 已提供开箱即用的二进制包。

可用扩展数量达到 423 个。PG18 beta2、OrioleDB、TimescaleDB、Citus、FerretDB & DocumentDB、DuckDB、Etcd 等均完成例行版本更新。

扩展目录站点也已全面翻新,采用 Next.js 重构,观感大幅提升,新地址:https://pgext.cloud


Supabase 自建体验优化

Pigsty v3.6 提供了更流畅的 Supabase 自建体验,并修复了 Supabase 官方模板中的若干问题:

  • logflare 复制槽不推进
  • 大量打印错误日志
  • Studio 无法查看两项 Analytics 日志

生产级 Supabase 自建只需几行命令即可完成:

此外,Pigsty 现默认使用由 1Panel 提供的 Docker 镜像站点,国内下载速度显著提升。

目前 Pigsty 和 StackGres 是仅有的两个自建 Supabase 方案的开源供应商:Pigsty 基于裸 Linux 系统交付,StackGres 基于 Kubernetes 交付。


PITR 恢复增强

此前版本中,Pigsty 提供 pg-pitr 脚本用于"半自动"辅助 PITR 恢复。本版本新增了全自动的 pgsql-pitr 剧本,实现一键时间点恢复。

该剧本会自动执行以下操作:

  • 暂停高可用切换
  • 关闭 PostgreSQL
  • 生成并执行 pgbackrest PITR 恢复命令至指定目标位点
  • 校验后重新拉起 PostgreSQL
  • 重新启用高可用切换

支持快速重试(原地增量),便于精确定位恢复位点。同时新增了一种新用例:在新启动的实例(或摘下的从库)上执行 PITR 恢复,避免影响现有业务,然后从新实例抽取数据手工导入。


ETCD 管理简化

本版本对 Etcd 模块进行了重构,新增独立的 etcd-rm.yml 剧本与扩缩容 SOP 脚本。

此前扩缩容 etcd 涉及一系列复杂的命令操作,现在只需简单几条命令:

bin/etcd-add              # 创建 etcd 集群,或刷新现有集群状态
bin/etcd-add 10.10.10.11  # 扩容 etcd 集群,新增一个成员
bin/etcd-rm               # 移除整个 etcd 集群
bin/etcd-rm 10.10.10.11   # 将指定成员从集群中移除

etcd.yml 剧本现 不再清理现有 ETCD 集群,清理工作由专门的 roles 与剧本实现,维护变得更加简单明了。


MinIO 模块改进

MinIO 模块进行了重构,新增 Plain HTTP 模式,并调整了默认桶与用户配置。

此前版本默认为 MinIO 启用 HTTPS(通过本地 CA 签发自签名证书),可避免内网流量窃听,但也带来一些烦恼:Pigsty 管理节点之外的客户端(如容器)需要信任该 CA 才能访问 MinIO。

本版本新增开关,允许 MinIO 运行在纯 HTTP 模式下。需注意:pgbackrest 不接受 HTTP 模式的 MinIO,若使用本地 MinIO 存储 PG 备份仍需 HTTPS 模式。HTTP 模式仅适用于纯粹给外部服务使用的场景。

默认桶配置也进行了调整:

原配置 新配置
pgsql, infra, redis pgsql, meta, data

同时为 metadata 桶创建了专用用户 s3user_metas3user_data,并为每个桶创建同名策略。如此设计下,Supabase、Dify 等应用可直接使用这两个桶,无需手动创建。


安装流程简化

安装步骤从四步简化为三步:

原流程 新流程
下载 → 引导 → 配置 → 安装 下载 → 配置 → 安装

“引导"步骤(解压离线软件包或配置上游软件仓库以安装 Ansible)已合并到下载脚本中,执行安装脚本时会自动执行 ./bootstrap

curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty; ./configure; ./install.yml

默认在线安装

默认安装策略发生变化:不再先下载到本地再安装,而是直接从互联网上游安装。

这一改变带来显著好处:

  • 减少出错点:许多用户反馈的安装报错都发生在本地 Repo 下载和 Nginx 服务拉起阶段(如 el9.aarch64 上 PGDG 配置错误导致的 patroni-etcd 安装失败)
  • 提升速度:只下载真正需要安装的包,而非一次性下载所有包
  • 简化配置:无需处理 Nginx 的安全策略和防火墙配置问题

大比例用户在单节点 Linux 上安装 Pigsty,“不需要"本地软件仓库提供的多节点一致性。需要本地仓库的用户可通过简单配置(repo_enablednode_repo_modules)重新启用,或直接使用默认启用本地仓库的 rich / full 模板。


全新文档站

全新文档站点已上线:https://pigsty.cc/docs/

该站点采用 Next.js 与 Fumadocs 现代前端技术栈打造,感谢兰天游与 Claude Code 的强力助攻。英文版已基本完工,中文版正在翻译建设中。欢迎通过 GitHub PR 或 Issue 参与贡献。


其他改进

  • tuned 模块优化:针对现代硬件与 NVMe 磁盘进行优化,移除过时配置参数,新增 NVMe / 虚拟化 SSD 的调度/预读参数优化
  • MCP Toolbox 集成:集成了 Google 新发布的 MCP Toolbox(数据库 MCP 工具箱),预置模板 SQL 解决部分数据库安全性问题
  • 配置模板调整:所有配置模板调整为 单节点 模式,便于快速上手

下一步:v4.0 与 DBA Agent

PostgreSQL 18 将于今年 9 月发布,Pigsty 计划在 PG 18 发布后正式发布 v4.0 版本,主要改进方向:

领域 计划
CLI 工具 pig 完整封装 Ansible 剧本功能,接口初步定型
监控系统 VictoriaMetrics / VictoriaLogs 替代 Prometheus / Loki
日志收集 vector 替代过时的 promtail
门户组件 考虑使用 Caddy 替代 Nginx(待定)

v4.x 的主旋律将是 DBA Agent。Pigsty 已具备 DBA Agent 所需的完整上下文,核心正是这套 PG 最强监控系统。待文档中沉淀的领域知识足够丰富,为 Pig 命令行工具套上 MCP,一个能打的全自动驾驶数据库 DBA Agent 便将诞生。



v3.6.0

Pigsty v3.6.0 版本发布,全新文档站与 PITR 增强!

curl https://repo.pigsty.cc/get | bash -s v3.6.0

亮点特性

  • 全新文档站:https://pigsty.cc/docs/
  • 新增 pgsql-pitr 剧本与备份/恢复教程,改善 PITR 体验
  • 新增内核支持:Percona PG TDE (PG17)
  • 优化 Supabase 自建体验,更新至最新版本,并解决了一系列官方模板的问题
  • 简化安装步骤,默认使用在线安装,更加高效简单,bootstrap 过程(安装ansible)嵌入安装脚本中

设计改进

  • 改善了 Etcd 模块的实现,新增独立的 etcd-rm.yml 剧本与扩缩容 SOP 脚本
  • 改善了 MinIO 模块的实现,支持 HTTP 模式,创建不同属性的三个桶供开箱即用
  • 重新调整梳理了所有配置模板,使用更为便利
  • 针对中国大陆使用速度更快的 Docker Registry 镜像站
  • 优化了 tuned 操作系统参数模板,针对现代硬件与 NVMe 磁盘优化
  • 新增扩展 pgactive 用于多主复制与亚秒级故障切换
  • 调整 pg_fs_main / pg_fs_backup 默认值,简化文件目录结构设计

问题修复

  • 修复了 pgbouncer 配置文件的错误 by @housei-zzy
  • 修复了 OrioleDB 在 Debian 平台上的问题
  • 修复了 tuned shm 配置参数的问题
  • 离线软件包直接使用 PGDG 源,避免使用断开同步的镜像站点
  • 修复了 IvorySQL libxcrypt 依赖的问题
  • 替换了破损与缓慢的 EPEL 软件仓库站点
  • 修复了 haproxy_enabled 标记位的功能

基础设施软件包更新

新增 Victoria Metrics / Victoria Logs 相关包:

  • genai-toolbox 0.9.0 (new)
  • victoriametrics 1.120.0 -> 1.121.0 (重构)
  • vmutils 1.121.0 (重命名 victoria-metrics-utils)
  • grafana-victoriametrics-ds 0.15.1 -> 0.17.0
  • victorialogs 1.24.0 -> 1.25.1 (重构)
  • vslogcli 1.24.0 -> 1.25.1
  • vlagent 1.25.1 (新增)
  • grafana-victorialogs-ds 0.16.3 -> 0.18.1
  • prometheus 3.4.1 -> 3.5.0
  • grafana 12.0.0 -> 12.0.2
  • vector 0.47.0 -> 0.48.0
  • grafana-infinity-ds 3.2.1 -> 3.3.0
  • keepalived_exporter 1.7.0
  • blackbox_exporter 0.26.0 -> 0.27.0
  • redis_exporter 1.72.1 -> 1.77.0
  • rclone 1.69.3 -> 1.70.3

数据库软件包更新

  • PostgreSQL 18 Beta2 更新
  • pg_exporter 1.0.1,更新至最新依赖并提供 Docker 镜像
  • pig 0.6.0,更新了最新扩展与仓库列表,带有 pig install 子命令
  • vip-manager 3.0.0 -> 4.0.0
  • ferretdb 2.2.0 -> 2.3.1
  • dblab 0.32.0 -> 0.33.0
  • duckdb 1.3.1 -> 1.3.2
  • etcd 3.6.1 -> 3.6.3
  • ferretdb 2.2.0 -> 2.4.0
  • juicefs 1.2.3 -> 1.3.0
  • tigerbeetle 0.16.41 -> 0.16.50
  • pev2 1.15.0 -> 1.16.0

PG 扩展包更新

  • OrioleDB 1.5 beta12
  • OriolePG 17.11
  • plv8 3.2.3 -> 3.2.4
  • postgresql_anonymizer 2.1.1 -> 2.3.0
  • pgvectorscale 0.7.1 -> 0.8.0
  • wrappers 0.5.0 -> 0.5.3
  • supautils 2.9.1 -> 2.10.0
  • citus 13.0.3 -> 13.1.0
  • timescaledb 2.20.0 -> 2.21.1
  • vchord 0.3.0 -> 0.4.3
  • pgactive 2.1.5 (new)
  • documentdb 0.103.0 -> 0.105.0
  • pg_search 0.17.0

API 变更

  • pg_fs_backup:重命名为 pg_fs_backup,默认值为 /data/backups
  • pg_rm_bkup:重命名为 pg_rm_backup,默认值为 true
  • pg_fs_main:现在默认值调整为 /data/postgres
  • nginx_cert_validity:新增参数,用于控制 Nginx 自签名证书的有效期,默认为 397d
  • minio_buckets:默认值调整为创建名为 pgsqlmetadata 的三个桶。
  • minio_users:移除 dba 用户,新增 s3user_metas3user_data 用户,分别对应 metadata 桶。
  • minio_https:新增参数,允许配置 MinIO 使用 HTTP 模式。
  • minio_provision:新增参数,允许跳过 MinIO 置备阶段(跳过桶和用户的创建)。
  • minio_safeguard:新增参数,启用后会在执行 minio-rm.yml 时中止操作。
  • minio_rm_data:新增参数,控制在执行 minio-rm.yml 时是否删除 minio 数据目录。
  • minio_rm_pkg:新增参数,控制在执行 minio-rm.yml 时是否卸载 minio 软件包。
  • etcd_learner:新增参数,允许 etcd 以学习者身份初始化。
  • etcd_rm_data:新增参数,控制在执行 etcd-rm.yml 时是否删除 etcd 数据目录。
  • etcd_rm_pkg:新增参数,控制在执行 etcd-rm.yml 时是否卸载 etcd 软件包。

校验和

df64ac0c2b5aab39dd29698a640daf2e  pigsty-v3.6.0.tgz
cea861e2b4ec7ff5318e1b3c30b470cb  pigsty-pkg-v3.6.0.d12.aarch64.tgz
2f253af87e19550057c0e7fca876d37c  pigsty-pkg-v3.6.0.d12.x86_64.tgz
0158145b9bbf0e4a120b8bfa8b44f857  pigsty-pkg-v3.6.0.el8.aarch64.tgz
07330d687d04d26e7d569c8755426c5a  pigsty-pkg-v3.6.0.el8.x86_64.tgz
311df5a342b39e3288ebb8d14d81e0d1  pigsty-pkg-v3.6.0.el9.aarch64.tgz
92aad54cc1822b06d3e04a870ae14e29  pigsty-pkg-v3.6.0.el9.x86_64.tgz
c4fadf1645c8bbe3e83d5a01497fa9ca  pigsty-pkg-v3.6.0.u22.aarch64.tgz
5477ed6be96f156a43acd740df8a9b9b  pigsty-pkg-v3.6.0.u22.x86_64.tgz
196169afc1be02f93fcc599d42d005ca  pigsty-pkg-v3.6.0.u24.aarch64.tgz
dbe5c1e8a242a62fe6f6e1f6e6b6c281  pigsty-pkg-v3.6.0.u24.x86_64.tgz

更多版本信息请参考 GitHub 发布页面


v3.6.1

Pigsty v3.6.1 版本发布,PostgreSQL 小版本更新!

curl https://repo.pigsty.cc/get | bash -s v3.6.1

亮点特性

  • PostgreSQL 17.6, 16.10, 15.14, 14.19, 13.22, 以及 18 Beta 3 支持
  • 在中国大陆地区使用 Pigsty 提供的 PGDG APT/YUM 镜像解决更新断供问题
  • 新的网站首页:https://pigsty.cc
  • 增加了 el10, debian 13 的实现存根,以及 el10 的 Terraform 镜像

基础设施软件包更新

  • Grafana 12.1.0
  • pg_exporter 1.0.2
  • pig 0.6.1
  • vector 0.49.0
  • redis_exporter 1.75.0
  • mongo_exporter 0.47.0
  • victoriametrics 1.123.0
  • victorialogs: 1.28.0
  • grafana-victoriametrics-ds 0.18.3
  • grafana-victorialogs-ds 0.19.3
  • grafana-infinity-ds 3.4.1
  • etcd 3.6.4
  • ferretdb 2.5.0
  • tigerbeetle 0.16.54
  • genai-toolbox 0.12.0

数据库软件包更新

  • pg_search 0.17.3

API 变更

  • node_kernel_modules 默认值中移除 br_filter 内核模块。
  • 在添加 PGDG YUM 源时使用操作大版本号,不再使用小版本号。

校验和

045977aff647acbfa77f0df32d863739  pigsty-pkg-v3.6.1.d12.aarch64.tgz
636b15c2d87830f2353680732e1af9d2  pigsty-pkg-v3.6.1.d12.x86_64.tgz
700a9f6d0db9c686d371bf1c05b54221  pigsty-pkg-v3.6.1.el8.aarch64.tgz
2aff03f911dd7be363ba38a392b71a16  pigsty-pkg-v3.6.1.el8.x86_64.tgz
ce07261b02b02b36a307dab83e460437  pigsty-pkg-v3.6.1.el9.aarch64.tgz
d598d62a47bbba2e811059a53fe3b2b5  pigsty-pkg-v3.6.1.el9.x86_64.tgz
13fd68752e59f5fd2a9217e5bcad0acd  pigsty-pkg-v3.6.1.u22.aarch64.tgz
c25ccfb98840c01eb7a6e18803de55bb  pigsty-pkg-v3.6.1.u22.x86_64.tgz
0d71e58feebe5299df75610607bf448c  pigsty-pkg-v3.6.1.u24.aarch64.tgz
4fbbab1f8465166f494110c5ec448937  pigsty-pkg-v3.6.1.u24.x86_64.tgz
083d8680fa48e9fec3c3fcf481d25d2f  pigsty-v3.6.1.tgz

更多版本信息请参考 GitHub 发布页面


2.3 - Pigsty:喜提上海开源创新菁英奖

原文发布于 VONNG

上海开源信息技术协会最近搞了个优秀开源项目评选,以及优秀开源社区贡献者评选。老冯投了两个,都中了。第一个是 Pigsty,当选了优秀开源项目:

图片

第二个是老冯自己,评了个优秀开源社区贡献者

图片

感谢上海开源信息技术协会,ITPUB,各位专家评委的认可。

这次比较可惜,周六在上海的颁奖活动真好和在济南的 PG 高峰论坛时间冲突了,所以没有参加,不过这俩奖状给寄到家里了。

老冯不喜欢那种费时间拉票的奖项,但这种花点时间填一下就能参与的奖还是很乐意参加的。拿个奖心里也是挺高兴的,哈哈。


另外最近 ITPUB 搞的新媒体评选,老冯的公众号还顺手搂了一个《最佳文章影响奖》https://zt.itpub.net/topic/peanit/

图片

老冯最近的公众号发展的还不错,总关注数量达到了 44355,主要是常读用户比例有 22%,9904,这还真是不少。在这里老冯也要感谢各位读者朋友的关注与支持哈🙏。

图片图片

Pigsty 的发展势头也还行,目前在 GitHub 上的 Star 数量达到了 4K 的里程碑。增长的速度跟一些竞品比还是算快的。

图片图片图片

在 PostgreSQL 生态开源项目排行榜中,Pigsty 也进了前两页,算是一个国际知名的开源项目了。在中国人主导的 PG 生态开源项目里目前是第一名。

Pigsty 文档站的流量也还不错,pigsty.cc 年 UV 差不多大概十万,大概一半来自海外。

图片

Pigsty 国内站点 pigsty.cc 和 Cloudflare 上的海外站点 pigsty.io 都有不少访问。另外最近还新搞了一个 pgsty.com,用 Next 重新糊了一遍。

图片

让我感到欣慰的是,写了这么多博客文章,还是有不少效果的,用 GPT 搜一些 PostgreSQL 相关的东西,Pigsty 的网站和博客经常成为权威参考来源了。

图片

总的来说,这算是做 Pigsty 的第五个年头了,今年的发展总算是走上了正轨。耐心做好有价值的事情,美好的事情自然会发生。

做了这么久的 PostgreSQL 数据库发行版,终于赶上了 AI 时代的数据库二次崛起。拿到了一张 数据库发行版大乱斗决赛的门票。这对一个一人公司来说,还真是挺不容易的。

好在,今年也有好几个用户决定成为我的客户。顺利的话,年底可以招几个实习生扩扩容了。

图片

最后,再次感谢各位读者与用户朋友,你们的关注,鼓励与支持是我前进的不竭动力源泉。

Pigsty 是什么?

Pigsty 是一个开箱即用的 PostgreSQL 数据库发行版,是数据库的自动驾驶软件,可以让你在本地一键用云 RDS 1/10 不到的成本,在没有专业 DBA 的情况下,拉起企业级 PostgreSQL 数据库服务,带有高可用,PITR,监控系统,IaC,以及 421 个 PG 生态的扩展插件,直接运行在 10 个主流 Linux 发行版上而无需容器或 Kubernetes 支持。

图片图片

发布版本:微信公众号

2.4 - Pigsty v3.5:4K Star,PG18支持,421个扩展

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty v3.5 正式发布。项目在 GitHub 上达成 4000+ Star 里程碑,对于一个数据库基础设施项目而言,这是一个难得的成就。

本版本带来全新文档网站、OrioleDB 和 OpenHalo 内核全平台支持、Supabase 自建优化、监控系统与架构优化、PostgreSQL 18 Beta 支持、例行 PG 小版本更新,以及 Apple ARM Vagrant 支持。


Pigsty 是什么?

Pigsty 是一个开箱即用的 PostgreSQL 数据库发行版,可视为数据库的"自动驾驶软件"。它能让用户以云 RDS 十分之一不到的成本,在无需专业 DBA 的情况下,快速拉起企业级 PostgreSQL 数据库服务 —— 具备高可用、PITR、监控系统、IaC 能力,以及 421 个 PG 生态扩展插件,直接运行在 10 个主流 Linux 发行版上,无需容器或 Kubernetes。


PostgreSQL 18 支持

PostgreSQL 18 Beta1 已发布,正式版本将于今年 9 月推出。PG 18 带来了 AIO、OAuth 等诸多强力新特性,现已可在 Pigsty 中尝鲜(但切勿用于生产环境)。同时提供 17.5、16.9、15.13、14.18、13.21 例行小版本更新支持。

Pigsty 提供了全新的 pg18 配置模板,可直接用于拉起基于 PostgreSQL 18 Beta1 内核的高可用 RDS。pg_exporter 也刚发布 1.0 版本,完整收录了 PG 18 的新监控指标。用户还可使用 pig 包管理器一键安装 PG 18 与 PGDG 中的相应扩展。


Supabase 自建优化

Pigsty 提供的"企业级" Supabase 自建能力广受欢迎 —— Supabase 自建教程的页面流量甚至超过了 Landing Page。本版本进一步优化了 Supabase 自建流程。

pgsodium 密钥管理集成:现可指定根密钥或提供密钥获取脚本,供 Supabase 依赖的 pgsodium 扩展使用,提供数据加密能力,并可从根密钥派生出一系列子密钥。

logflare 复制槽问题修复:Supabase Analytics logflare 组件存在一个缺陷 —— 当系统表没有更新写入时,它不会更新 WAL 消费进度,导致复制槽持续保留数据。Pigsty 通过预置的定时任务 supa-kick 每分钟执行"假更新"来触发进度推进,避免磁盘被撑爆。

同时跟进了 Supabase 相关扩展版本与 Docker 镜像版本。


OpenHalo 与 OrioleDB 全平台可用

OpenHalo 内核在 PG 14 基础上提供 MySQL 兼容性,而 OrioleDB 内核则提供云原生的无膨胀版本 PG。在 v3.4 中仅提供了 RPM 包,现已在全部十个受支持的 Linux 系统上完整可用。

OrioleDB 已被 Supabase 收购,近日发布了第 11 个 Beta 版本。虽然尚未成为 Supabase 默认使用的 PG 内核分支,但 Pigsty 已提前做好准备 —— 确保 Supabase 一旦决定从原生 PG 切换到 OrioleDB,可以无缝跟进。


421 个扩展插件

可用扩展数量达到 421 个,并对大量扩展进行了版本更新。值得关注的新扩展:

pgsentinel:可观测性扩展,提供类似 Oracle Active Session History 的功能,可记录每个会话的统计信息及等待事件。详见:https://pigsty.cc/ext/e/pgsentinel/

spat:一个有趣的实验性扩展,在 PG 中提供类似 Redis 的接口,使用共享内存实现类似 Redis 的性能表现。目前处于 Alpha 阶段,切勿用于生产。

全新的扩展百科网站已上线,比原版本更美观、更全面:


全新文档站点

Pigsty 文档站基于 Next.js 进行了重制,从静态页面渲染迈入现代前端时代。新站点地址:https://pigsty.cc

不仅形式上全面翻新,内容上也针对 3.5 版本进行了完整重写与梳理,清理修复了大量过时信息。目前仅提供英文版本,简体中文支持即将推出。


架构优化

Pigsty v3.5 对 PGSQL 实现进行了深度优化:

  • 合并减少任务数量
  • 微调可用任务标签
  • 统一模板文件命名
  • 优化现代 NVMe 环境下的系统与数据库参数默认值
  • 调整 roles 分工

重要变更:彻底移除了 pgsql.yml 剧本的删库功能。从 v3.5 起,删库操作仅能通过 pgsql-rm.yml 专用剧本执行,不再需要各种"安全阀"和"保险栓"。

重构后的 PGSQL 剧本任务:

重构后的 pgsql-rm.yml 剧本任务:


命令行优化

pig 命令行工具新增 do 子命令,可替代原来 pigsty/bin 目录下的包装脚本,以统一、标准化的方式执行各类任务。

目前处于试点阶段,API 尚未最终固定,计划经过一段时间打磨后正式发布文档。


监控优化

Grafana 12.0 发布,带来了不少 Breaking Changes,监控系统也相应进行了改进。

针对来自 Oracle DBA 用户提出的 AWR 需求进行了分析:其中大部分指标 PG 和 Pigsty 已经提供,唯一的例外是 等待事件

PG 内核本身只提供当前活动的等待状态,但没有历史等待事件记录。这只能通过插件实现 —— pg_wait_samplingpgsentinel 都提供了此功能,监控面板也已支持等待事件分析。


Apple Vagrant 支持

Pigsty 提供 Vagrant / Terraform 沙箱模板,允许用户在本地/云端轻松拉起所需的虚拟机资源。此前 Vagrant / VirtualBox 对 Apple ARM 架构支持存在各种问题,经过重新测试,Vagrant + VirtualBox 组合现已在 Apple Silicon 上丝滑运行。

虽然并非所有 Vagrant Box 都提供了 ARM64 on VirtualBox 支持,但主要的 EL9 和 Ubuntu 24.04 已支持。这意味着用户可以在 Apple MacBook(无论是 Intel 还是 M 系列 ARM 架构)上顺畅拉起虚拟机并运行 Pigsty。


下一步规划

下一个版本可能是 v3.6 或 v4.0。Pigsty v4.0 预计随 PostgreSQL 18 正式版一同发布(9 月)。

计划中的改进

领域 规划
操作系统 新增 EL 10 支持,编译打包所有扩展
日志收集 promtail 替换为 vector
安装流程 简化为三步走(Install / Configure / Deploy)
许可证 考虑推出 Apache 许可的轻量化版本


v3.5.0

Pigsty v3.5.0 版本发布,支持 PostgreSQL 18 Beta!

curl https://repo.pigsty.cc/get | bash -s v3.5.0

亮点特性

  • 支持 PG 18 (Beta),扩展更新,总数达到 421 个
  • OrioleDB 与 OpenHalo 内核在全平台上可用
  • 可使用 pig do 子命令代替 bin 脚本
  • Supabase 自建加强,解决若干遗留问题,例如复制延迟与密钥分发
  • 代码重构与架构优化,优化了 Postgres 与 Pgbouncer 默认参数
  • 更新了 Grafana 12, pg_exporter 1.0 与相关插件,翻修面板

PostgreSQL 18 支持

  • 支持 PostgreSQL 18
  • 通过 pg_exporter 1.0.0 支持 PG18 监控指标
  • 通过 pig 0.4.1 支持 PG18 安装 Alias
  • 提供 pg18 配置模板

代码重构

  • PGSQL 重构,将 PG 监控抽离为单独的 pg_monitor 角色,移除 clean 逻辑
  • 去除冗余重复的任务,合并同类项,精简配置。移除 dir/utils 任务块
  • 所有扩展默认安装至 extensions 模式中(与 supabase 安全实践保持一致)
  • 重命名模板文件,移除所有 .j2 后缀
  • 为所有模板中的 monitor 函数添加 SET 命令清空 search_path,遵循 Supabase 安全最佳实践
  • 调整 pgbouncer 默认参数,增大默认链接池大小,设置链接池清理查询
  • 新增参数 pgbouncer_ignore_param,允许配置 pgbouncer 忽略的参数列表
  • 新增任务 pg_key 用于生成 pgsodium 所需的服务端密钥
  • 针对 PG 17 默认启用 sync_replication_slots
  • 重新调整了子任务标签,使其更符合配置小节的拆分逻辑

模块重构

  • 重构 pg_remove 模块
    • 重命名参数:pg_rm_data, pg_rm_bkup, pg_rm_pkg 用于控制删除的内容
    • 重新调整角色代码结构,使用更清楚的标签进行划分
  • 新增 pg_monitor 模块
    • pgbouncer_exporter 现在不再和 pg_exporter 共享配置文件
    • 新增了 TimescaleDB,Citus,pg_wait_event 的监控指标
    • 使用 pg_exporter 1.0.0,更新了 PG16/17/18 相关监控指标
    • 使用更为紧凑,全新设计的指标收集器配置文件

Supabase 加强

感谢来自 @lawso017 的贡献!

  • 将 Supabase 容器镜像与数据库模式更新至最新版本
  • 现在默认支持 pgsodium 服务端密钥加载
  • 通过 supa-kick 定时任务解决 logflare 无法及时更新复制进度的问题
  • 为 monitor 模式中的函数添加 set search_path 子句以遵循安全最佳实践

CLI 与监控更新

  • CLI 新增 pig do 命令,允许通过命令行工具替代 bin/ 中的 Shell 脚本
  • 更新 Grafana 大版本至 12.0.0,更新相关插件/数据源软件包
  • 更新 Postgres 数据源 uid 命名方式(以适应新的 uid 长度限制与字符限制)
  • 新增了 Static Datasource
  • 更新了现有 Dashboard,修复若干遗留问题

基础设施软件包更新

  • pig 0.4.2
  • duckdb 1.3.0
  • etcd 3.6.0
  • vector 0.47.0
  • minio 20250422221226
  • mcli 20250416181326
  • pev 1.5.0
  • rclone 1.69.3
  • mtail 3.0.8 (new)

可观测性软件包更新

  • grafana 12.0.0
  • grafana-victorialogs-ds 0.16.3
  • grafana-victoriametrics-ds 0.15.1
  • grafana-infinity-ds 3.2.1
  • grafana_plugins 12.0.0
  • prometheus 3.4.0
  • pushgateway 1.11.1
  • nginx_exporter 1.4.2
  • pg_exporter 1.0.0
  • pgbackrest_exporter 0.20.0
  • redis_exporter 1.72.1
  • keepalived_exporter 1.6.2
  • victoriametrics 1.117.1
  • victoria_logs 1.22.2

数据库软件包更新

  • PostgreSQL 17.5, 16.9, 15.13, 14.18, 13.21
  • PostgreSQL 18beta1 支持
  • pgbouncer 1.24.1
  • pgbackrest 2.55
  • pgbadger 13.1

PG 扩展包更新

  • spat 0.1.0a4 新扩展
  • pgsentinel 1.1.0 新扩展
  • pgdd 0.6.0 (pgrx 0.14.1) 新扩展
  • convert 0.0.4 (pgrx 0.14.1) 新扩展
  • pg_tokenizer.rs 0.1.0 (pgrx 0.13.1)
  • pg_render 0.1.2 (pgrx 0.12.8)
  • pgx_ulid 0.2.0 (pgrx 0.12.7)
  • pg_idkit 0.3.0 (pgrx 0.14.1)
  • pg_ivm 1.11.0
  • orioledb 1.4.0 beta11 新增 debian/ubuntu 支持
  • openhalo 14.10 新增 debian/ubuntu 支持
  • omnigres 20250507 (在 d12/u22 编译最新版本失败)
  • citus 12.0.3
  • timescaledb 2.20.0 (移除 PG14 支持)
  • supautils 2.9.2
  • pg_envvar 1.0.1
  • pgcollection 1.0.0
  • aggs_for_vecs 1.4.0
  • pg_tracing 0.1.3
  • pgmq 1.5.1
  • tzf-pg 0.2.0 (pgrx 0.14.1)
  • pg_search 0.15.18 (pgrx 0.14.1)
  • anon 2.1.1 (pgrx 0.14.1)
  • pg_parquet 0.4.0 (0.14.1)
  • pg_cardano 1.0.5 (pgrx 0.12) -> 0.14.1
  • pglite_fusion 0.0.5 (pgrx 0.12.8) -> 14.1
  • vchord_bm25 0.2.1 (pgrx 0.13.1)
  • vchord 0.3.0 (pgrx 0.13.1)
  • pg_vectorize 0.22.1 (pgrx 0.13.1)
  • wrappers 0.4.6 (pgrx 0.12.9)
  • timescaledb-toolkit 1.21.0 (pgrx 0.12.9)
  • pgvectorscale 0.7.1 (pgrx 0.12.9)
  • pg_session_jwt 0.3.1 (pgrx 0.12.6) -> 0.12.9
  • pg_timetable 5.13.0
  • ferretdb 2.2.0
  • documentdb 0.103.0 (新增 aarch64 支持)
  • pgml 2.10.0 (pgrx 0.12.9)
  • sqlite_fdw 2.5.0 (fix pg17 deb)
  • tzf 0.2.2 0.14.1 (rename src)
  • pg_vectorize 0.22.2 (pgrx 0.13.1)
  • wrappers 0.5.0 (pgrx 0.12.9)

校验和

ab91bc05c54b88c455bf66533c1d8d43  pigsty-v3.5.0.tgz
4c9fabc2d1f0ed733145af2b6aff2f48  pigsty-pkg-v3.5.0.d12.x86_64.tgz
796d47de12673b2eb9882e527c3b6ba0  pigsty-pkg-v3.5.0.el8.x86_64.tgz
a53ef2cede1363f11e9faaaa43718fdc  pigsty-pkg-v3.5.0.el9.x86_64.tgz
36da28f97a845fdc0b7bbde2d3812a67  pigsty-pkg-v3.5.0.u22.x86_64.tgz
8551b3e04b38af382163e6857778437d  pigsty-pkg-v3.5.0.u24.x86_64.tgz

更多版本信息请参考 GitHub 发布页面

2.5 - 影视飓风达芬奇千万级数据库演化及实践

原文发布于 VONNG

原作者:龚锐

老冯喜欢摄影,很早就关注了影视飓风。但俺也没有想到有一天还会出现这种交集:开源 PostgreSQL RDS 软件 Pigsty 有一天会被影视飓风用在影视行业里,用于支持达芬奇这种行业软件。

影视飓风达芬奇千万级数据库演化及实践 一文中,影视飓风的专家们分享了他们是如何使用 Pigsty 来解决达芬奇的各种问题。比如高可用,高级权限管控,误删回滚,读写分离,以及简化维护。


本文将介绍影视飓风达芬奇项目数据库建设的过程中遇到的问题和解决方案

01

OVERVIEW

达芬奇概述

图片 达芬奇(DaVinci Resolve)是由 Blackmagic Design 开发的一款专业的视频编辑、调色、特效和音频处理软件,被电影、影视、广告等各类视频制作场景下广泛应用。
图片

达芬奇的项目库(Project Libraries)用于协作工作流程中,它允许多个用户在同一个网络中同时访问和操作项目,支持团队的实时协作。这对制作复杂的影视项目时尤为有用,在后期制作中,剪辑、调色、音频等各类工种可以同时处理不同部分的工作。可以通过官方应用得出该功能就是**依赖 PostgreSQL 数据库实现**的。
图片

02

EVOLUTION PATH

数据库演进路径

图片图片

2019 年 - 达芬奇官方应用(DaVinci Resolve Project Server)

随着业务体量的不断增加,达芬奇官方应用的单体架构渐渐暴露出诸多不足,如容易造成单点故障、无官方实现的自动备份、权限管控难度大、维护不便等问题。

2023 年 4 月 - Docker 容器化

Docker 带来的弊端也立马显现出来,具体可以阅读这篇文章。我们在使用 Docker 方案半年后,迅速评估转舵更换方案,迭代为目前的高可用集群。\

2024 年 1 月 - 高可用集群

经过对比选型后,采用了开源的 [Pigsty](/zh/blog/article/v3.4/) 方案。集群配置为一主两从,当主节点故障时,其中一个从节点将成为主节点,并将故障节点降级隔离。底层虚拟机采用双服务器集群避免硬件或网络造成的中断,当有故障时可在毫秒级内完成自动迁移,用户体感仅为闪断。
图片

高可用集群架构图

图片

集群监控 Dashboard

03

DIFFICULTY

技术难点

图片
对于达芬奇这种“黑盒应用”来说,我们无法改变软件自身逻辑,仅能从数据库方面进行优化。或许达芬奇在设计之初为了避免数据库架构的复杂性和潜在的同步问题,它舍弃了很多高级的数据库功能,比如无法在协作模式使用连接池、不能仅开放只读权限等。这对我们的优化及管理带来了很大挑战。

04

PITR

时间点恢复

图片
针对误操作、误删等场景,目前实现了恢复至过去一周内的任意时间点的能力。剪辑师仅需告知操作时间点,BDA 同学可在几分钟内将数据库滚回至恢复专用数据库中将该项目提取出来。

05

PERMISSION

权限治理

图片
通过 LDAP 组件对接影视飓风 SSO 统一登录平台的账户体系及角色身份,虽然由于软件限制无法做到一键单点登录,但与 SSO 账号密码一致,避免了用户维护多套账号。

除 DBA 账户外,常规角色为最小化权限,仅可连接数据库、新建数据、修改数据、删除数据等必要功能。

用户操作均有安全审计记录,这也是企业安全场景下必不可少的一环,可留存用户对数据库的访问、操作记录,异常操作后可追溯,保护了数据安全。
图片

用户列表 &权限

06

EXPERIENCE

踩坑经验

图片

**现象:在 2024 年 5 月 8 日 11:35 分开始有多位后期同学反馈达芬奇数据库连接中断情况。**定位 &处理:

  • [11:36] 查看节点状态,发现全部离线,LDAP 等相关依赖组件一切正常

  • [11:43]查看日志后发现抛出大量 etcd 容量满及停止服务相关告警

  • [11:46]为了在最短时间内恢复业务使用,我们先尝试使用手动清理碎片的形式释放空间

  • [11:50]重启 etcd 和 HAProxy

  • [11:52]节点上线,业务恢复

由于 etcd 基础服务集群容量配额写满导致集群管控平面失效,但未对数据平面造成影响

etcd 是一个分布式的、可靠的键-值存储,用于存放系统中最为关键的数据,Pigsty 使用 etcd 作为 Patroni 的 DCS(分布式配置存储)服务,用于存储 PostgreSQL 集群的高可用状态信息。

******根因:**未开启 etcd 自动压实功能,且默认仅为 2GB 容量。

07

LAUNCH

上线收益

图片
  • 数据零丢失

  • 99.99% 服务可用性

  • 通过时间点恢复回滚近十次误操作

- End -

老冯评论

老冯喜欢摄影,很早就关注了影视飓风。但俺也没有想到有一天还会出现这种交集:开源 PostgreSQL RDS 软件 Pigsty 有一天会被影视飓风用在影视行业里,用于支持达芬奇这种行业软件。

影视飓风达芬奇千万级数据库演化及实践 一文中,影视飓风的专家们分享了他们是如何使用 Pigsty 来解决达芬奇的各种问题。比如高可用,高级权限管控,误删回滚,读写分离,以及简化维护。

达芬奇官方单体应用内置了一个 PostgreSQL 数据库,用于本地存储项目和数据库信息。这个数据库通常是在单机模式下运行,并且是自动配置好的,不需要用户手动设置或配置。但如果要团队协作,那么还是要专门拉起一个共享的 PostgreSQL 数据库实例来使用。

当我看到影视行业的专家们竟然还会专门开一门课来介绍 “达芬奇的 PostgreSQL 权威配置指南” 时,我确实是吃了一惊:https://medium.com/@sethgoldin/the-definitive-guide-to-postgresql-for-davinci-resolve-c3fcb36a1561

图片

但这确实是一个需要自建本地 RDS 的有趣场景。因为用一个远程的云厂商 PG RDS,响应时间对影视编辑团队协同的场景来说实在是太高了,而 Pigsty 这样的本地 PG RDS 自建方案可以恰到好处的解决这些问题 —— 即使没有专业 DBA,也可以自建高水准的本地 PG 数据库服务,从搞了近十次 PITR 误删回滚恢复来看,他们玩的还是很溜的。

正如微软 CEO 纳德拉所说,你喜欢的软件应用在本质上都是数据库套壳SaaS 已死?AI 时代,软件从数据库开始)。对于达芬奇这种“黑盒应用”来说,用户确实没有办法改变软件本身的逻辑。但可以通过使用更好的 PostgreSQL RDS,来为现有软件添加这些强大的能力 —— 更好的业务连续性与数据持久性,回滚到过去一周任意时间点的魔法,以及精细化的权限管理。


发布版本:微信公众号转载页

2.6 - Pigsty v3.4:备份恢复增强,本地化排序,自动证书

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

经过一个月的密集开发,Pigsty v3.4 正式发布。本版本进行了显著的架构优化,解决了用户和客户高度关注的几个核心问题:

  • 将一套集群的物理备份 PITR 恢复到另一套集群
  • pgBackRest 备份组件的监控指标与面板
  • 自建应用时自动申请 HTTPS 证书
  • 本地化排序规则与字符集的最佳实践
  • Oracle 兼容的 IvorySQL 现已全平台可用
  • 图数据库扩展 Apache AGE 现已全平台可用

此外,基于 Cursor Vibe Coding 打造了全新的价值主张/特性介绍页面:https://pigsty.cc/about/values/


自动申请证书

不少用户因自建 Dify、Odoo、Supabase 而使用 Pigsty。用户反馈证书申请步骤有些繁琐,需要手动调用 certbot,希望将其自动化。

本版本对 Nginx 配置进行了增强:当用户在某个 Nginx Server 上定义 certbot 字段时,可使用 make cert 命令一键完成证书申请与应用,无需其他配置与命令。

Dify、Odoo、Supabase 等应用自建模板均已采用此功能。安装完成后,make cert 即可自动更新或新申请所需证书。若配置 certbot_sign = true,则在安装过程中自动申请证书。

v3.4 中 Nginx 的可配置项更加丰富:可使用 config 向 nginx 注入配置,使用 enforce 强制重定向 HTTPS。自建网站在绝大多数场景下可做到完全不碰传统 Nginx 配置文件。


本地化排序最佳实践

许多程序员对 Locale/Collation 规则不太了解,但这确实是一个相当重要的配置。使用不当的 Collation 不仅可能带来数倍性能损失,还可能导致数据不一致甚至数据丢失 —— 索引与排序规则紧密相关,Collation 绝非无关紧要的配置。

推荐阅读:

最佳实践:始终使用 CC.UTF-8 作为 Locale 排序规则。

  • C:兼容性最好,所有系统都支持,但缺少 Unicode 字符集知识,除 ASCII 外的字符大小写功能失灵
  • C.UTF-8:在 C 基础上实现 Unicode 语义,更符合用户直觉,但并非所有系统默认支持
  • PostgreSQL 17 新特性:内置对这两种 Collation 的支持,不再依赖操作系统的 libc

Pigsty v3.4 反映了这种最佳实践:

  • 所有 Locale 相关参数默认值统一使用 C(主要是 pg_lc_ctypesen_US.UTF-8 变为 C),确保在任何系统上都能运行
  • 自动配置时,若检测到 PG >= 17 或系统明确支持 C.utf8,将 Locale 配置为 C.UTF-8 以获得更好的 Unicode 语义

除非数据库密集工作在特定语言排序场景,否则此默认值即为最佳实践。可使用 PostgreSQL COLLATION 语法在查询/索引/列上指定其他排序规则,PG + ICU 共支持 841 种排序规则。


时间点恢复增强

时间点恢复是关系型数据库的核心功能。此前 Pigsty 通过 pg-pitr 辅助用户执行半自动 PITR。v3.4 对 PITR 支持进行了显著改进,现可方便地从集中式备份仓库中选择任意备份进行恢复。

在 PG 集群上定义 pg_pitr 参数时,Pigsty 会自动生成 /pg/bin/pg-restore 命令及 /pg/conf/pitr.conf 配置文件。

执行 pg-restore 命令时,Pigsty 会自动暂停 Patroni 集群、关闭 PG、开始原地增量 PITR、恢复到指定位点后拉起 PG。重要改进:使用集中式备份仓库时,可用其他集群的备份覆盖当前集群。

备份监控方面,v3.4 引入了 pgbackrest_exporter 用于收集备份监控指标,PGSQL PITR 监控面板也会显示当前备份状态。此前用户只能通过 PGCAT Instance 查询当前状态,而无历史记录,本次改进对分析备份状态大有帮助。


扩展插件更新

经过持续一年的扩展生态扩张,Pigsty 已收录 PG 生态中几乎所有主流扩展,数量达到 405 个。扩展突飞猛进的阶段已基本结束,近期版本将重心放回架构与基础设施,扩展以巩固为主。

v3.4 新增扩展 pgspider_ext,利用各种 FDW 实现多数据源查询。同时有 28 个扩展更新至最新版本,并修复了若干扩展的版本与 Bug。

Apache AGE 图数据库扩展:该项目的开发者似乎被裁员,基本进入无维护状态。作为发行版,Pigsty 尽力为其提供支持 —— 根据 Debian 上的 Patch 重新编译了 AGE 1.5.0 的 PG 13-17 扩展,补上了缺少 EL RPM 的遗憾。


多内核支持更新

Pigsty v3.4 更新了 PolarDB、IvorySQL、Babelfish 最新版本支持。

继 PolarDB 之后,IvorySQL 成为第二个在 Pigsty 支持的十大 Linux 发行版上全平台可用的 PostgreSQL 内核。除扩展插件外,IvorySQL 4.4 的体验基本与 PostgreSQL 17.4 一致。

使用 IvorySQL(Oracle 兼容模式)只需修改四个参数:

pg_mode: ivory                                                 # 使用 IvorySQL 兼容模式
pg_packages: [ ivorysql, pgsql-common ]                        # 安装 IvorySQL 软件包
pg_libs: 'liboracle_parser, pg_stat_statements, auto_explain'  # 加载 Oracle 兼容扩展
repo_extra_packages: [ ivorysql ]                              # 下载 IvorySQL 软件包

同时更新了 Supabase 模板至最新版本,将 Citus 更新至 13.0.2。下一步将关注专注 OLTP 性能的 OrioleDB 以及提供 MySQL 协议兼容性的 OpenHalo 内核。


基础设施强化

v3.4 更新了许多 Infra 软件包版本,新增组件:

组件 说明
JuiceFS 将 S3/MinIO 挂载为本地文件系统
Restic 类似 pgBackRest 但用于文件备份
TimescaleDB EventStreamer 抽取 TimescaleDB 超表数据变更流

这些组件现已默认下载,可直接安装使用。

另一变化:以下软件包新增到默认下载列表:

docker-ce docker-compose-plugin ferretdb2 duckdb restic juicefs vray grafana-infinity-ds

Docker 使用量确实很大,主要用于运行 pgAdmin 等软件,因此将其纳入默认下载。


v3.5 特性展望

v3.5 计划功能:

领域 规划
CLI pig 命令行完整封装 Pigsty Playbook
配置 Vibe Config Wizard 配置向导与 MCP Server
Docker Debian 12 x86/ARM Pigsty Docker 镜像
内核 OrioleDB 与 OpenHalo 支持


v3.4.0

Pigsty v3.4.0 版本发布,MySQL 兼容性与全面增强!

curl https://repo.pigsty.cc/get | bash -s v3.4.0

新功能

  • 增加了新的 pgBackRest 备份监控指标和仪表板
  • 增强了 Nginx 服务器配置选项,支持自动 Certbot 签发
  • 现在优先使用 PostgreSQL 内置的 C/C.UTF-8 区域设置
  • IvorySQL 4.4 现在在所有平台上完全支持(RPM/DEB 在 x86/ARM 上)
  • 增加了新的软件包:Juicefs、Restic、TimescaleDB EventStreamer
  • Apache AGE 图数据库扩展现在在 EL 上完全支持 PostgreSQL 13–17
  • 改进了 app.yml playbook:无需额外配置即可启动标准 Docker 应用
  • 升级 Supabase、Dify 和 Odoo 应用模板到最新版本
  • 增加 electric 应用模板,本地优先的 PostgreSQL 同步引擎

基础设施包

  • +restic 0.17.3
  • +juicefs 1.2.3
  • +timescaledb-event-streamer 0.12.0
  • Prometheus 3.2.1
  • AlertManager 0.28.1
  • blackbox_exporter 0.26.0
  • node_exporter 1.9.0
  • mysqld_exporter 0.17.2
  • kafka_exporter 1.9.0
  • redis_exporter 1.69.0
  • pgbackrest_exporter 0.19.0-2
  • DuckDB 1.2.1
  • etcd 3.5.20
  • FerretDB 2.0.0
  • tigerbeetle 0.16.31
  • vector 0.45.0
  • VictoriaMetrics 1.113.0
  • VictoriaLogs 1.17.0
  • rclone 1.69.1
  • pev2 1.14.0
  • grafana-victorialogs-ds 0.16.0
  • grafana-victoriametrics-ds 0.14.0
  • grafana-infinity-ds 3.0.0

PostgreSQL 相关

  • Patroni 4.0.5
  • PolarDB 15.12.3.0-e1e6d85b
  • IvorySQL 4.4
  • pgbackrest 2.54.2
  • pev2 1.14
  • WiltonDB 13.17

PostgreSQL 扩展

  • pgspider_ext 1.3.0(新扩展)
  • apache age 13–17 el rpm (1.5.0)
  • timescaledb 2.18.2 → 2.19.0
  • citus 13.0.1 → 13.0.2
  • documentdb 1.101-0 → 1.102-0
  • pg_analytics 0.3.4 → 0.3.7
  • pg_search 0.15.2 → 0.15.8
  • pg_ivm 1.9 → 1.10
  • emaj 4.4.0 → 4.6.0
  • pgsql_tweaks 0.10.0 → 0.11.0
  • pgvectorscale 0.4.0 → 0.6.0 (pgrx 0.12.5)
  • pg_session_jwt 0.1.2 → 0.2.0 (pgrx 0.12.6)
  • wrappers 0.4.4 → 0.4.5 (pgrx 0.12.9)
  • pg_parquet 0.2.0 → 0.3.1 (pgrx 0.13.1)
  • vchord 0.2.1 → 0.2.2 (pgrx 0.13.1)
  • pg_tle 1.2.0 → 1.5.0
  • supautils 2.5.0 → 2.6.0
  • sslutils 1.3 → 1.4
  • pg_profile 4.7 → 4.8
  • pg_snakeoil 1.3 → 1.4
  • pg_jsonschema 0.3.2 → 0.3.3
  • pg_incremental 1.1.1 → 1.2.0
  • pg_stat_monitor 2.1.0 → 2.1.1

接口变更

  • 增加了新的 Docker 参数:docker_datadocker_storage_driver#521@waitingsong 提供)
  • 增加了新的基础设施参数:alertmanager_port,让您指定 AlertManager 端口
  • 增加了新的基础设施参数:certbot_sign,在 nginx 初始化期间申请证书?(默认为 false)
  • 增加了新的基础设施参数:certbot_email,指定通过 Certbot 请求证书时使用的邮箱
  • 增加了新的基础设施参数:certbot_options,指定 Certbot 的额外参数
  • 更新 IvorySQL,从 IvorySQL 4.4 开始将其默认二进制文件放在 /usr/ivory-4
  • pg_lc_ctype 和其他区域相关参数的默认值从 en_US.UTF-8 更改为 C
  • 对于 PostgreSQL 17,如果使用 UTF8 编码与 CC.UTF-8 区域,PostgreSQL 的内置本地化规则现在优先
  • configure 自动检测 PG 版本和环境是否都支持 C.utf8,并相应调整区域相关选项
  • 将默认 IvorySQL 二进制路径设置为 /usr/ivory-4
  • 更新 pg_packages 的默认值为 pgsql-main patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
  • 更新 repo_packages 的默认值为 [node-bootstrap, infra-package, infra-addons, node-package1, node-package2, pgsql-utility, extra-modules]
  • /etc/profile.d/node.sh 中删除 LANGLC_ALL 环境变量设置
  • 现在使用 bento/rockylinux-8bento/rockylinux-9 作为 EL 的 Vagrant box 镜像
  • 增加了新别名 extra_modules,包含额外的可选模块
  • 更新 PostgreSQL 别名:postgresqlpgsql-mainpgsql-corepgsql-full
  • GitLab 仓库现在包含在可用模块中
  • Docker 模块已合并到基础设施模块中
  • node.yml playbook 现在包含 node_pip 任务,在每个节点上配置 pip 镜像
  • pgsql.yml playbook 现在包含 pgbackrest_exporter 任务,用于收集备份指标
  • Makefile 现在允许使用 META/PKG 环境变量
  • 增加 /pg/spool 目录作为 pgBackRest 的临时存储
  • 默认禁用 pgBackRest 的 link-all 选项
  • 默认为 MinIO 仓库启用块级增量备份

错误修复

  • 修复 pg-backup 中的退出状态码(#532@waitingsong 提供)
  • pg-tune-hugepage 中,限制 PostgreSQL 仅使用大页面(#527@waitingsong 提供)
  • 修复 pg-role 任务中的逻辑错误
  • 纠正大页面配置参数的类型转换
  • 修复 slim 模板中 node_repo_modules 的默认值问题

校验和

768bea3bfc5d492f4c033cb019a81d3a  pigsty-v3.4.0.tgz
7c3d47ef488a9c7961ca6579dc9543d6  pigsty-pkg-v3.4.0.d12.aarch64.tgz
b5d76aefb1e1caa7890b3a37f6a14ea5  pigsty-pkg-v3.4.0.d12.x86_64.tgz
42dacf2f544ca9a02148aeea91f3153a  pigsty-pkg-v3.4.0.el8.aarch64.tgz
d0a694f6cd6a7f2111b0971a60c49ad0  pigsty-pkg-v3.4.0.el8.x86_64.tgz
7caa82254c1b0750e89f78a54bf065f8  pigsty-pkg-v3.4.0.el9.aarch64.tgz
8f817e5fad708b20ee217eb2e12b99cb  pigsty-pkg-v3.4.0.el9.x86_64.tgz
8b2fcaa6ef6fd8d2726f6eafbb488aaf  pigsty-pkg-v3.4.0.u22.aarch64.tgz
83291db7871557566ab6524beb792636  pigsty-pkg-v3.4.0.u22.x86_64.tgz
c927238f0343cde82a4a9ab230ecd2ac  pigsty-pkg-v3.4.0.u24.aarch64.tgz
14cbcb90693ed5de8116648a1f2c3e34  pigsty-pkg-v3.4.0.u24.x86_64.tgz

更多版本信息请参考 GitHub 发布页面


v3.4.1

Pigsty v3.4.1 版本发布,新增 openHalo 与 OrioleDB 内核支持!

curl https://repo.pigsty.cc/get | bash -s v3.4.1

亮点特性

  • 在 EL 系统上增加了对 MySQL 协议兼容 PostgreSQL 内核的支持:openHalo
  • 在 EL 系统上增加了对 OLTP 增强 PostgreSQL 内核的支持:orioledb
  • 优化了 pgAdmin 9.2 应用模板,具有自动服务器列表更新和 pgpass 密码填充功能
  • 将 PG 默认最大连接数增加到 250、500、1000
  • 从 EL8 中删除了有依赖错误的 mysql_fdw 扩展

基础设施更新

  • pig 0.3.4
  • etcd 3.5.21
  • restic 0.18.0
  • ferretdb 2.1.0
  • tigerbeetle 0.16.34
  • pg_exporter 0.8.1
  • node_exporter 1.9.1
  • grafana 11.6.0
  • zfs_exporter 3.8.1
  • mongodb_exporter 0.44.0
  • victoriametrics 1.114.0
  • minio 20250403145628
  • mcli 20250403170756

扩展更新

  • 将 pg_search 升级到 0.15.13
  • 将 citus 升级到 13.0.3
  • 将 timescaledb 升级到 2.19.1
  • 将 pgcollection RPM 升级到 1.0.0
  • 将 pg_vectorize RPM 升级到 0.22.1
  • 将 pglite_fusion RPM 升级到 0.0.4
  • 将 aggs_for_vecs RPM 升级到 1.4.0
  • 将 pg_tracing RPM 升级到 0.1.3
  • 将 pgmq RPM 升级到 1.5.1

校验和

471c82e5f050510bd3cc04d61f098560  pigsty-v3.4.1.tgz
4ce17cc1b549cf8bd22686646b1c33d2  pigsty-pkg-v3.4.1.d12.aarch64.tgz
c80391c6f93c9f4cad8079698e910972  pigsty-pkg-v3.4.1.d12.x86_64.tgz
811bf89d1087512a4f8801242ca8bed5  pigsty-pkg-v3.4.1.el9.x86_64.tgz
9fe2e6482b14a3e60863eeae64a78945  pigsty-pkg-v3.4.1.u22.x86_64.tgz

更多版本信息请参考 GitHub 发布页面

2.7 - Pigsty v3.3:扩展突破400,丝滑建站,应用模板

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

经过两个月的精心打磨,Pigsty v3.3 正式发布。作为开源的"开箱即用" PostgreSQL 发行版,Pigsty 旨在凝聚 PG 生态的合力,为本地自建提供与云上 RDS 媲美的免运维便捷体验。

本版本聚焦三个关键领域:扩展插件建站体验应用模板,大幅增强了开发、运维、部署等多方面的能力。


可用扩展突破 400+

PostgreSQL 以其丰富的扩展机制著称,孕育了庞大的数据库生态。Pigsty 将 PostgreSQL 的插件扩展能力发挥到极致。

一年前《PostgreSQL正在吞噬数据库世界》一文发布时,Pigsty 可用扩展约 150 个,主要来自 PG 自带(70)和 PGDG 官方仓库。

如今 Pigsty v3.3 将可用扩展数量推至 404 个!用户几乎可以即插即用任何想要的 PostgreSQL 插件,更重要的是能像搭积木一样组合这些扩展

值得关注的新扩展

扩展 说明
PGDocumentDB 微软开源,赋予 PostgreSQL 文档数据库能力
PGCollection AWS 出品,高性能内存优化集合数据类型
pg_tracing DataDog 开源,分布式调用链追踪
pg_curl 支持数十种网络协议发起请求
pgpdf 直接读取存储 PDF,SQL 全文检索 PDF 内容
Omni 系列 Omnigres 开发的 30+ 扩展,用于 PG 中进行 Web 应用开发

Pigsty 与 Omnigres 达成深度合作伙伴关系:Pigsty 整合分发 Omnigres 扩展,Omnigres 作为下游将 Pigsty 扩展仓库中的扩展交付给其用户,实现互惠共赢。


FerretDB 2.0:PostgreSQL 变身 MongoDB

与 FerretDB 团队合作,交付基于 PostgreSQL 的 MongoDB 方案。FerretDB 2.0 使用微软开源的 DocumentDB 作为后端实现,提供更好的性能与更完善的功能。

可将 PG 变为核心功能完备的 MongoDB 5.0,使用 MongoDB 客户端与线缆协议访问 PostgreSQL 中的数据。


DuckDB 缝合大赛持续进行

Pigsty v3.3 第一时间跟进了 pg_duckdb 0.3.1、pg_mooncake 0.1.2、pg_analytics 0.5.4 最新版本,从不同维度为 PostgreSQL 添加比肩 ClickHouse 的分析能力。

在 ClickHouse 自家榜单 ClickBench 上,PG 扩展 mooncake 已成功挤进 Top 10 T1 梯队。在激烈的竞争角逐下,PostgreSQL 生态很快会出现比肩向量数据库生态中 pgvector 的 OLAP 玩家。


pig 与扩展仓库

如此多扩展插件的安装管理成为难题,Pigsty 的解决方案是 pig 命令行工具与扩展仓库。一行命令即可在 PostgreSQL 上拥有 400 个扩展合体的超能力 —— 即使不用 Pigsty 也没问题。

虽然独一无二的扩展库可作为 Pigsty 的核心竞争优势,但更希望为 PostgreSQL 生态做出更多贡献。因此 pig 包管理器与 PostgreSQL 扩展仓库基于 Apache 2.0 宽松协议开源,对公众与同行开放。

已有多家 PostgreSQL 厂商基于 Pigsty 扩展仓库安装扩展,成为 Pigsty 的下游。这是一种扎实参与全球软件供应链的方式。


建站体验:Nginx IaC 与免费 HTTPS 证书

Pigsty 不仅是 PostgreSQL 发行版,还是完整的监控基础设施、Etcd、MinIO、Redis、Docker 部署管理方案,甚至可作为 Web 建站工具。

Pigsty 提供全功能的 Nginx 配置方案和证书申请 SOP,其网站和软件仓库就是使用 Pigsty 本身搭建的。

只需在配置文件中定义 Nginx Server,Pigsty 即可自动创建所需配置并申请 HTTPS 证书。

Pigsty v3.2 已将 certbot 整合并默认安装,可一行命令完成 HTTPS 证书申请与续签。可用 Nginx 代理各种服务,使用不同域名区分,统一收口到 80/443 端口对外服务 —— 只需打开入站 80/443 TCP 端口即可。


应用模板:Docker 软件一键交付

许多软件都会用到 PostgreSQL,此前 Pigsty 提供 Docker Compose 模板,但用户仍需手动拷贝目录、修改 .env 配置、手工拉起。

Pigsty v3.3 提供全新剧本 app.yml,将基于 PostgreSQL 的 Docker 软件交付压缩为临门一脚的一行命令。

Odoo ERP 系统

Dify AI 工作流编排

Supabase 自建

从裸机到完整的生产应用服务,只需几条命令、几分钟等待。


pig 命令行能力增强

pig v0.3 新增 pig build 子命令,允许快速搭建 PG 扩展构建环境。

curl https://repo.pigsty.cc/pig | bash # 安装 pig
pig build repo        # 添加上游仓库
pig build tool        # 安装构建工具
pig build rust        # 配置 rust/pgrx 工具链(可选)
pig build spec        # 下载构建规范
pig build get citus   # 下载某个扩展源码包
pig build ext citus   # 构建某个扩展

Pigsty 维护的 200+ 扩展均通过此方式构建。即使操作系统不在 Pigsty 支持的十大发行版中,也可轻松 DIY 扩展 RPM/DEB 包。


全新网站设计

从 v3.3 开始,Pigsty 国际站 (pigsty.io) 与中文站 (pigsty.cc) 正式分离,使用独立域名、文档、Demo、仓库。

基于 Next.js 模板打造全新首页。借助 GPT o1-pro 和 Cursor 的帮助,快速完成现代 Landing Page 开发。

在托管方式上尝试了多种方案:Vercel、Cloudflare Pages、阿里云、腾讯云 EdgeOne 等。最终结论:海外全放 Cloudflare,国内用云服务器。

建站流程已高度自动化,十分钟内可在任意区域拉起 Pigsty 文档+仓库基础设施站点。

PG 扩展目录已整合到文档站 pigsty.cc/ext 中,并提供中文版本。小工具可自动扫描 Pigsty 与 PGDG 仓库扩展包版本并生成数据库记录、信息页,用户可直接从网页浏览并下载扩展 RPM/DEB 包。


多内核支持更新

v3.3 跟进了 IvorySQL 4.2(PG 17 兼容版本),解决了 pgbackrest 备份无法用于 IvorySQL 的问题。IvorySQL 运行体验现与标准 PG 内核一致。

同时推动 PolarDB 团队提供了 Debian 及 ARM64 平台的 DEB 包。PolarDB 现可在 Pigsty 支持的 10 大操作系统发行版上丝滑运行。

使用 PolarDB 内核的场景:若有"国产化"要求,PolarDB 是最简单直接、物美价廉的方案,Pigsty 能将 PolarDB 内核 RPM/DEB 封装成强大的 RDS 服务。



v3.3.0

Pigsty v3.3.0 版本发布,可用扩展总数增加到 404 个!

curl https://repo.pigsty.cc/get | bash -s v3.3.0

亮点特性

  • 可用扩展总数增加到 404 个!
  • PostgreSQL 二月小版本更新:17.4、16.8、15.12、14.17、13.20
  • 新功能:app.yml 脚本,用于自动安装 Odoo、Supabase、Dify 等应用。
  • 新功能:在 infra_portal 中进一步自定义 Nginx 配置。
  • 新功能:增加 Certbot 支持,快速申请免费 HTTPS 证书。
  • 新功能:pg_default_extensions 现在支持纯文本扩展列表。
  • 新功能:默认仓库现在包含 mongo、redis、groonga、haproxy 等。
  • 新参数:node_aliases,为节点添加命令别名。
  • 修复:解决 Bootstrap 脚本中的默认 EPEL 仓库地址问题。
  • 改进:为 Debian Security 仓库添加阿里云镜像。
  • 改进:IvorySQL 内核的 pgBackRest 备份支持。
  • 改进:PolarDB 的 ARM64 和 Debian/Ubuntu 支持。

工具改进

  • pg_exporter 0.8.0 现在支持 pgbouncer 1.24 中的新指标。
  • 新功能:gitdockersystemctl 等常用命令的自动补全 #506 #507@waitingsong 提供。
  • 改进:优化 pgbouncer 配置模板中的 ignore_startup_parameters #488@waitingsong 提供。

网站与文档

  • 新主页设计:Pigsty 的网站现在拥有全新的外观。
  • 扩展目录:RPM/DEB 二进制包的详细信息和下载链接。
  • 扩展构建:pig CLI 现在自动设置 PostgreSQL 扩展构建环境。

更多版本信息请参考 GitHub 发布页面

2.8 - Pigsty@2024:今年没啥财运,但事儿整的还不赖

原文发布于 VONNG

去年有大师给我算了一卦曰:明年你没财运,后年的财运一般,然后连着十年就起飞了。起飞不起飞我不知道,反正今年确实算的很准 —— 确实没啥财运。好在 —— 今年的事儿整的还不赖,哈哈。

图片

开源

GitHub 是全球一亿开发者的精神家园,全球最大的♂同性交友网站。与去年相比,今年我在 GitHub 上挣到了大概 3700 颗 Star,在全球 Star Ranking 上的排名从 483 提升 26 名至 457 位。

图片

同时,在劳模活跃榜上,今年我以 2868 个提交成为中国地区活跃度第 16 的用户,以及 3058 个 Contribution 成为国区榜 20 的用户。年底还拿了个 “开源中国 2024 年度突出贡献专家”荣誉称号。

图片

当然,这些贡献基本都围绕着 PostgreSQL 生态。主要是关于我的开箱即用的 PostgreSQL 数据库发行版 —— Pigsty 展开的。


项目

在 2024 年,Pigsty 发布了 9 个版本,特别是 v3 的发布,基本标志着这个项目已经进入了非常成熟稳定的阶段。

图片

这一年里,Pigsty 明确了自己的定位,要站在数据库(PostgreSQL 吞噬数据库世界)与云计算(下云)与两个核心趋势的交汇点上。抢占本地优先开源 RDS PG 标准(非 K8S)的生态位。

图片

Pigsty 提出了六条核心价值主张,其中首当其冲的就是 可扩展的 PostgreSQL。在年初我发表的 《PostgreSQL 正在吞噬数据库世界》一文中,我提出了扩展插件是 PG 成功的秘诀,得到了全球社区的广泛认可。而知行合一的表现就是,既然我认为扩展至关重要,是发行版的核心价值主张。那就应该去解决这个问题。

在这一点上,我还是可以比较骄傲的说,我对 PG 扩展生态做了相当显著的贡献。在过去一年里,我在编译打包维护了 PG 生态中 150 个扩展插件,超过了官方仓库维护的 100 个。并且修复了无数扩展问题,让 PG 生态开箱即用的扩展总数达到了惊人的 340 个,目前在整个 PG 生态中,没有能望其项背的竞争对手。

图片

目前来看,我觉得 PG 生态很有可能在 OLAP 大数据/实时数仓领域再次出现一个类似 PGVECTOR 向量插件这样的爆款。但不同于上次 PGVECTOR 冒头时我只能求助 PGDG Devrim 放入 PG 仓库,现在的 Pigsty 已经成了这些扩展插件分发的一个重要渠道了。

目前我已经说动了两家友商 AutoBase 和 Omnigres 使用 Pigsty 的扩展仓库作为上游,目前还在游说其他几家,总的来说我觉得问题不大,只要保持目前的态势,不难打造出一个 PG 扩展分发事实标准来。


除了扩展,Pigsty 还在另一个方向上,Pigsty 开始围绕 PostgreSQL 摊大饼,那就是 Fork 内核。Pigsty 目前支持了 Oracle 兼容的 IvorySQL,SQL Server 兼容的 WiltonDB,国产数据库 PolarDB (PG / Oracle),以及开源 Firebase,出海创业当红炸子鸡 Supabase。

马上 Neon 和 OrioleDB 也要加入进来 —— Pigsty 能为这些 PG 分支/衍生内核提供完善的高可用,备份,连接池,扩展插件。将简单的 RPM 改造成一个开箱即用的云数据库服务。这意味着只要你是 PostgreSQL 生态的内核公司(没有瞎魔改),那么你就能从 Pigsty 的工作中享受到免费红利。从而打造一个互惠共赢的生态。


指标与数据

从运营指标上看,Pigsty 从年初的 2200 Star 到年底的 3645,虽然比不了去年的 3 倍增长,但也有可观的 50% 增长,收获了 1400 多 Star。

图片

当然 Star 是一方面,主要是在全球 PostgreSQL 生态也开始有了知名度,目前在 OSS Rank 上 PG 生态开源项目排行榜中从去年的第 37 位提升到了 23 位,挤进第一页指日可待。

图片

从 Google Analytics 上来看,今年 Pigsty 网站的总访问用户达到 10 万+ (pigsty.cc 加 pigsty.io ),相比去年的 5 万 UV 翻倍。

图片

这个尖刺来自《PostgreSQL 正在吞噬数据库世界》,英文版引爆了 PG 社区,带来了大量的流量。\

而且来自海外的关注度与流量出现显著增长,去年海外用户占比大约占 20%,而今年则几乎翻倍来到了 40%

图片

商业化

今年下半年,我开始进行了一些商业化方向的尝试。老实说,这不是我喜欢干的事情。我喜欢搞纯粹的研发,产品设计,写文章营销也还行,但销售真是要了血命。所以,我的商业化策略很简单:

—— 没有销售

在网站上放个页面,你要想买直接找我来买就好了。

图片

虽然没有销售,也没有吆喝,但就这样还是卖出了几单,基本上也就挣了个工资钱。但是知足常乐,反正我干的是自己喜欢的事,挣了钱的目标不就是为了干自己喜欢干的事么?

当然比起客户,用户侧的发展就要繁荣多了。这一年里,有许多新增的用户案例,比较知名的有 B 站,影视飓风,还有一些奇绩校友企业,一些科研院所军工部队单位都有用例,制造业,化工,新能源,各行各业基本都覆盖到了,毕竟数据库这东西太基础太万能,哪里都能用得上。特别是最近两年对 向量 pgvector 的需求激增,这带动了 PG 和 Pigsty 的显著增长。

总的来说,适当的商业化确实能解决一些现金流上的问题,有了现金流也就不用在乎融不融资了,可以开心长久地干自己喜欢的事情。\


自媒体副业

今年,自媒体算是一个副业。写公众号纯粹是为了传达自己的理念,另外就是 —— 这个时代吧,任何公司组织,都必须想办法搞流量 —— 要么去买,要么自己上,那我就只能自己上了。

关注用户数量从年初的一万八正好翻倍来到了三万六。两个专栏《数据库老司机》 和 《云计算泥石流》都有了一些口碑,在数据库领域的关注量大概是做到 Top1 了。

图片

今年虽然有很多软文生意找上门,但我还是保持住了节操 —— 我可以骄傲的宣称本号不接软文,所以我写文章的时候可以肆无忌惮地输出自己的观点,完全不顾及数据库厂商/社区和云厂商的脸面,哈哈,嘴炮很过瘾,没少得罪人,但也有了许多老铁读者与铁杆支持者。

图片

总的来说,搞的还不错,海外平台上 Medium 有了几百个订阅,X 上关注破了一万一,接近千万展现,佛系运营,也算还行吧。

图片

总结

总的来说,2024 年,全职创业的第三年。一人公司,没啥功耗,时间自由,可以做自己喜欢的事情(这里要再次感谢媳妇的大力支持),基本上是一个比较满意的状态。明年,大师说我也没啥财运,宜广结善缘,则后年腾飞矣。俺希望大师没有骗我,总之,努力干吧。


发布版本:微信公众号

2.9 - Pigsty v3.2:命令行工具pig,完备ARM支持,Supabase & Grafana 加强

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty 迎来了 2024 年的最后一次发布 v3.2。本次发布带来了命令行工具 pig,以及完善的 ARM 扩展支持,两者合体,为用户带来 10 大主流 Linux 系统上丝滑的 PostgreSQL 交付能力。

本次发布例行修复了一系列问题,同时跟进了 Supabase 发布周的密集变化,并为 Grafana 扩展插件与数据源提供了 RPM/DEB 包。


Pig 命令行工具

Pigsty v3.2 默认提供命令行工具 pig,可以用来进一步简化 Pigsty 的安装部署配置过程。但 pig 并非仅仅是 Pigsty 的命令行工具,它还是一个可以独立使用的全功能 PostgreSQL 包管理器。

在安装 PostgreSQL 扩展插件时,面对各种发行版、各种芯片架构,总是困难重重:大把时间耗费在过时的 README、晦涩的配置脚本和随机的 GitHub 分支中翻找;又或者受困于国内网络环境,仓库缺失、镜像被墙,下载速度堪忧。

pig 正式登场,为打包解决所有难题。这是一个全新的、基于 Go 的包管理器,能够统一处理 PostgreSQL 及其不断扩展的扩展库,而无需陷入调试泥潭。

Pig 本身是用 Go 编写的轻量级二进制,无依赖、易安装:只需一行命令即可完成安装。它尊重操作系统的包管理传统,不重新发明轮子,基于 yum/dnf/apt 实现包管理。

Pig 专注于跨发行版的和谐 —— 无论是在 Debian、Ubuntu 还是 Red Hat 衍生版上,都可以获得单一、流畅的安装和更新 PostgreSQL 及任何扩展的方法,无需从源代码编译或处理半成品仓库。

如果说 PostgreSQL 的未来是无法阻挡的可扩展性,Pig 就是帮助解锁这种能力的工具。毕竟,没有人会抱怨 PostgreSQL 实例拥有太多扩展 —— 不用的时候没有任何影响,需要时就在手边,随取随用。


ARM 扩展仓库

Pig 的幕后支撑是一个充满稀缺扩展与新发布扩展的补充扩展仓库,因此总可以轻松获取优质扩展 —— 经过测试、精心策划并准备就绪。

在最近一个月内,Pigsty 已经为 ARM64 系统架构完成了完整的支持。对五大主流 Linux 发行版(EL8、EL9、Debian12、Ubuntu 22/24)提供了 完整 的 ARM 支持。所谓完整,是指在 AMD64 上使用的配置文件可以一模一样用在 ARM64 架构的系统上。当然存在零星例外:极个别扩展目前缺少 ARM 支持,将在后续逐一解决。

Pigsty Extension Repo 集合了 340+ 精选 PostgreSQL 扩展,编译成方便使用的 .rpm.deb 包,支持多版本、多架构:

扩展类别 支持情况
TimescaleDB 时序套件 完整支持
Supabase 相关扩展 全套到位
DuckDB 分析扩展 已就绪
社区新扩展 持续收录

Pigsty 搭建了一个跨发行版的流水线,将社区自研的新扩展、历久弥新的老模块,以及官方 PGDG 包整合在一起,让它们能在 Debian、Ubuntu、Red Hat 系列等各大系统上一键无缝安装。

关键设计原则:不造轮子,而是直接基于每个发行版原生的包管理器(YUM、APT、DNF 等),保持与官方 PGDG 仓库的版本对齐。

从底层看,这个仓库是更大范围的 Pigsty PostgreSQL 发行版一部分,但也可以在自己的环境中独立使用,无需全部接纳 Pigsty。所有内容都是免费、开源的,整合起来非常轻松。已有多家 PostgreSQL 厂商将其作为额外的上游用于安装扩展。

针对 ARM64 平台的完整支持为更多芯片架构支持提供了信心。例如 IBM LinuxOne Cloud 提供的开源项目 s390x 大型机支持,Pigsty 也在评估这一方向的可能性。


Supabase 例行跟进

Pigsty 之前推出的 Supabase 自建教程 能让用户在一台机器上迅速拉起自建的 Supabase 服务。对于密集使用 Supabase 的创业群体引起了一定反响,因此持续在 Supabase 的最新版本上做跟进。

Supabase 在 2024 年的最后一个月里发布了一系列重要更新,Pigsty v3.2 也跟进了这些变化,为用户提供最新的 Supabase 版本。

Supabase 最近的一个重要动作是收购 OrioleDB —— 一个专注于提升 PostgreSQL OLTP 性能的内核分支。目前这项功能在 Supabase 中被标记为 Beta,作为用户的可选项存在。Pigsty 正在准备 OrioleDB 的 RPM/DEB 包,确保即使以后 Supabase 使用它作为主干,Pigsty 也能提供支持。

凭借这个契机,Pigsty 也准备进一步将扩展能力普及到更多的 PostgreSQL 分支上:

内核 兼容性
IvorySQL 3/4 Oracle 兼容
WiltonDB SQL Server 兼容
PolarDB PG 阿里云开源
OrioleDB OLTP 优化

Grafana 的可扩展性

Grafana 是非常流行的开源监控和可视化工具,拥有许多扩展插件:各类数据可视化面板与数据源。但这些扩展插件的安装和管理一直是个问题 —— Grafana 自己的 CLI 工具确实可以用于安装插件,不过国内用户必须科学上网才能使用,带来了很大的不便。

在 v3.2 中,常用的 Grafana 扩展面板与数据源插件都制作成了 RPM/DEB 包,方便开箱即用:

架构无关扩展 (grafana-plugins)

类别 插件
面板 volkovlabs-echarts, image, form, table, variable
面板 knightss27-weathermap, marcusolsson-dynamictext
面板 marcusolsson-treemap, calendar, hourly-heatmap
数据源 marcusolsson-static, json, volkovlabs-rss, grapi

架构相关扩展

此外,针对那些架构相关(包含 x86、ARM 二进制)的数据源扩展制作了独立的 RPM/DEB 包。例如 Grafana 新推出的 Infinity 数据源插件:可以使用任意 REST/GraphQL API,使用 CSV/TSV/XML/HTML 作为数据源,这极大扩展了 Grafana 的数据接入能力。

与此同时,还针对 VictoriaMetrics 和 VictoriaLogs 的 Grafana 数据源插件制作了 RPM/DEB 包,方便用户在 Grafana 中使用这两个开源的时序数据库和日志数据库。


下一步的发展规划

目前 Pigsty 本身已经达到了相当成熟的状态。接下来一段时间的工作重心,将放在 pig 这个工具以及扩展仓库的维护上。

当前是一个难得的机会窗口:用户与开发者开始意识到 PostgreSQL 扩展的重要性,但 PostgreSQL 生态还没有扩展分发的事实标准。Pigsty 致力于让 pig 成为一个有影响力的 PostgreSQL 扩展插件分发标准。

当然,Pigsty 本身一直也缺少一个足够好用的 CLI 工具,接下来将把散落在各个 Ansible 剧本中的功能整合到 pig 中,让用户可以更方便地管理 Pigsty 与 PostgreSQL。



v3.2.0 发行注记

亮点特性

  • Pigsty 命令行工具:pig 0.2.0,可用于管理扩展插件。
  • 提供五大发行版上 340 个扩展 的 ARM64 扩展支持
  • Supabase 发布周最新版本更新,全发行版均可自建。
  • Grafana 更新至 11.4 ,新增 infinity 数据源。

软件包变化

  • 新增扩展

  • 更新扩展

    • pgvectorscale 0.4.0 -> 0.5.1
    • pg_parquet 0.1.0 -> 0.1.1
    • pg_polyline 0.0.1
    • pg_cardano 1.0.2 -> 1.0.3
    • pg_vectorize 0.20.0
    • pg_duckdb 0.1.0 -> 0.2.0
    • pg_search 0.13.0 -> 0.13.1
    • aggs_for_vecs 1.3.1 -> 1.3.2
    • pgoutput 被标记为新的 PostgreSQL Contrib 扩展
  • 基础设施

    • 新增 promscale 0.17.0
    • 新增 grafana-plugins 11.4
    • 新增 grafana-infinity-plugins
    • 新增 grafana-victoriametrics-ds
    • 新增 grafana-victorialogs-ds
    • vip-manager 2.8.0 -> 3.0.0
    • vector 0.42.0 -> 0.43.0
    • grafana 11.3 -> 11.4
    • prometheus 3.0.0 -> 3.0.1 (软件包名从 prometheus2 变更为 prometheus)
    • nginx_exporter 1.3.0 -> 1.4.0
    • mongodb_exporter 0.41.2 -> 0.43.0
    • VictoriaMetrics 1.106.1 -> 1.107.0
    • VictoriaLogs 1.0.0 -> 1.3.2
    • pg_timetable 5.9.0 -> 5.10.0
    • tigerbeetle 0.16.13 -> 0.16.17
    • pg_export 0.7.0 -> 0.7.1
  • 缺陷修复

    • el8.aarch64 添加 python3-cdiff 修复 patroni 依赖错漏问题
    • el9.aarch64 添加 timescaledb-tools ,修复官方仓库缺失问题
    • el9.aarch64 添加 pg_filedump ,修复官方仓库缺失问题
  • 移除扩展

    • pg_mooncake 因为与 pg_duckdb 冲突而被移除。
    • pg_top 因为出现太多版本出现缺失,因质量问题而淘汰。
    • hunspell_pt_pt 因为与 PG 官方字典文件冲突而被淘汰。
    • pg_timeit 因为无法在 AARCH64 架构上使用而被淘汰。
    • pgdd 因为缺乏维护,PG 17 与 pgrx 版本老旧而被标记为弃用。
    • old_snapshotadminpack 被标记为 PG 17 不可用。
    • pgml 被设置为默认不下载不安装。

API变化

  • repo_url_packages 参数现在默认值为空数组,因为所有软件包现在都通过操作系统包管理器进行安装。
  • grafana_plugin_cache 参数弃用,现在 Grafana 插件通过操作系统包管理器进行安装
  • grafana_plugin_list 参数弃用,现在 Grafana 插件通过操作系统包管理器进行安装
  • 原名为 prod 的 36 节点仿真模板现在重命名为 simu
  • 原本在 node_id/vars 针对每个发行版代码生成的配置,现在同样针对 aarch64 生成。
  • infra_packages 中默认添加命令行管理工具 pig
  • configure 命令同样会修改自动生成配置文件中 pgsql-xxx 别名的版本号。
  • adminpack 在 PG 17 中被移除,因此从 Pigsty 默认扩展中被移除。

问题修复

  • 修复了 pgbouncer 仪表盘选择器问题 #474
  • pg-pitr 新增 --arg value 参数解析支持 by @waitingsong
  • 修复 Redis 日志信息 typo by @waitingsong

软件包校验和

8fdc6a60820909b0a2464b0e2b90a3a6  pigsty-v3.2.0.tgz
d2b85676235c9b9f2f8a0ad96c5b15fd  pigsty-pkg-v3.2.0.el9.aarch64.tgz
649f79e1d94ec1845931c73f663ae545  pigsty-pkg-v3.2.0.el9.x86_64.tgz
c42da231067f25104b71a065b4a50e68  pigsty-pkg-v3.2.0.d12.aarch64.tgz
ebb818f98f058f932b57d093d310f5c2  pigsty-pkg-v3.2.0.d12.x86_64.tgz
24c0be1d8436f3c64627c12f82665a17  pigsty-pkg-v3.2.0.u22.aarch64.tgz
0b9be0e137661e440cd4f171226d321d  pigsty-pkg-v3.2.0.u22.x86_64.tgz

2.10 - Pigsty v3.1:Supabase一键自建,PG17上位,ARM与Ubuntu24支持,MinIO改进

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

随着前天 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 的口号是:“花个周末写写,随便扩容至百万”。在试用之后,我觉得此言不虚。 这是一个低代码的一站式后端平台,能让你几乎告别大部分后端开发的工作,只需要懂数据库设计与前端即可快速出活了!

supa-price.png

小微规模(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-selfhosting.png

这两天我会准备一些关于 自建 Supabase 最佳实践 的教程,敬请期待。


PostgreSQL 17

在《PG12过保,PG17上位》中,我们已经详细介绍了 PostgreSQL 17 的新特性与改进。

其中最令人欣慰的莫过于白给的性能优化了:PostgreSQL 17 据说在写入性能上有了显著提升。我找了一台物理机测试了一下,确实不错。 相比与三年前针对 PostgreSQL 14 的测试结果《PostgreSQL到底有多强》,写入确实有不小的提升。

例如,以前 PG 14 在标准配置下,PG 的 WAL 写入吞吐量在 110 MB/s 附近,这是软件的瓶颈,不是硬件的。 而在 PG 17 下,这个数字能达到 180 MB/s。当然,把安全开关都关掉后性能还能翻几番,但体面评测就不玩那些作弊手段了

perf.png

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 版本可用性,以及一些使用说明,方便用户找到自己需要的扩展。

ext-repo.png

Pigsty 的扩展仓库基于原生的操作系统包管理器,公开共享,你不一定非要使用 Pigsty 才能按照这些扩展。 你完全可以在现有系统,Dockerfile中添加此仓库并通过 yum/apt install 的方式安装这些扩展。 目前我很欣慰的是有一个比较流行的开源集群部署项目 postgresql-cluster 已经默认用起了这个仓库,作为安装流程的一部分,向用户提供并分发扩展插件。

postgresql-cluster.png

当然,更多细节,在《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 还有一些缺陷,例如 citustopn 扩展在整个系统上是缺位的,而 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 配置文件,将固定的包别名翻译为操作系统上具体的软件包列表。

config.png

比如,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 虽然仍然不能在线修改磁盘/节点数量,但可以通过添加存储池 - 迁移 - 淘汰旧存储池的方式实现平滑扩容了。

minio.png

在 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专家定这个价还公开,让我们怎么办。

price.png

所以这次我也重新调整了一下定价体系,基本锚定业界平均定价水平。反正这也是你情我愿的双向选择,欢迎有兴趣的朋友们选购专业服务,打钱支持!新人新办法,老客老价格。


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://pgext.cloud/zh
  • 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)

2.11 - Pigsty v3.0:海量扩展,插拔内核,RDS服务

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号


亮点特性

扩展大爆炸

Pigsty v3 提供了史无前例的 340 个可用扩展插件。 包括 121 个扩展 RPM包133DEB包,数量已经超过了 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 四大类。

其他新特性

  • 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/cachebin/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.ymldeb.yml 中定义的 repo_upstream_default 提取对应系统的默认值。
  • 参数强化:repo_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 repo_packages_default 提取对应系统的默认值。
  • 参数强化:infra_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 infra_packages_default 提取对应系统的默认值。
  • 参数强化:node_default_packages 参数如果没有显式覆盖定义,将从 rpm.ymldeb.yml 中定义的 node_packages_default 提取对应系统的默认值。
  • 参数强化:pg_packagespg_extensions 中的扩展现在都会从 rpm.ymldeb.yml 中定义的 pg_package_map 执行一次查找与翻译。
  • 参数强化:node_packagespg_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_sendersmax_replication_slots 至 50,并增大 OLAP 模板临时文件的大小限制为主磁盘的 1/5

版本升级

截止至发布时刻,Pigsty 主要组件的版本升级如下:

Pigsty 重新编译了所有 PostgreSQL 扩展插件,PostgreSQL 扩展插件的最新版本,请参考 扩展列表


新应用

Pigsty 现在提供开箱即用的 Dify 与 Odoo Docker Compose 模板:

  • Dify: AI智能体工作流编排与 LLMOps
  • Odoo: 企业级开源 ERP 系统

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)

2.12 - 使用Pigsty自建Dify:AI工作流平台

原文发布于 VONNG

Dify 是一个生成式 AI 应用创新引擎,开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,帮助用户轻松构建和运营生成式 AI 原生应用。

当然,像这样的一个 AI 工作流编排软件,在底下也少不得用到数据库 —— Dify 便是用 PostgreSQL 存储数据的,当然还有 Redis 缓存,与一个专用的向量数据库。Docker 镜像拉起来本地玩玩可以,生产环境部署的话,数据库肯定不能这么搞,高可用,备份,监控啥都没有。 好在 Pigsty 就提供了开箱即用的生产级高可用 PostgreSQL 集群,也正好提供了 Dify 需要用到的 Redis 与 S3 (MinIO) 服务,也提供了 Nginx 可以对外暴露 Web 服务,堪称 Dify 最佳拍档。

docker-compose.png

有了 Pigsty,你只需要用 docker compose 拉起无状态的蓝圈部分就好了,状态放在由外部服务由 Pigsty 管理。

这里我不得不吐槽一下 Dify 模板的设计,元数据都已经用 PostgreSQL 存储了,你直接加个 pgvector 不就能拿来当向量数据库了?更让人想吐槽的是 pgvector 竟然还是一个单独的镜像与容器,你直接用一个带 pgvector 的 PG 镜像不就行了? Dify “支持” 了一堆花里胡哨的向量数据库,但你既然已经选定了 PostgreSQL 了,向量数据库默认也用 pgvector 就是自然而然地选择了。同理,我觉得 Dify 官方应该考虑一下把 Redis 去掉,Celery 任务队列又不是不能用 PostgreSQL 作为后端存储,弄那么多数据库纯属吃饱了撑着。如无必要,勿增实体。

所以 Pigsty 提供的 Dify Docker Compose 模板 也对官方的样例做了一些修改,把 dbredis 两个数据库镜像给去掉了,使用由 Pigsty 管理的实例,向量数据库固定使用 pgvector,复用同一个 PostgreSQL 实例。

最后上面那个架构就被简化为无状态的:dify-apidify-webdify-worker 三个无状态容器,可以随意创建销毁。当然还有两个可选的 ssrf_proxynginx,用于提供代理与些许安全特性。 还有一点状态尾巴是 文件系统卷,存放私钥之类的东西,定期备份一下就好了,也可以使用 MinIO 替代。

参考资料:


Pigsty的准备工作

我们用 单机安装 的 Pigsty 为例,假设你有一台 IP 地址为 10.10.10.10 的机器,已经 安装好了单机 Pigsty

当然,我们需要在 Pigsty 配置文件 pigsty.yml 中定义一下我们所需的数据库集群。 这里定义了一个名为 pg-meta 的集群,其中有一个名为 dbuser_dify 的超级业务用户(它这个实现的有点挫,在 Migration 脚本里面执行了 CREATE EXTENSION ),一个安装了 pgvector 扩展插件的数据库 dify,以及一条特定的防火墙规则,允许用户通过密码从任何地方访问数据库(你也可以将其限制为docker的网段 172.0.0.0/8 之类更精确的范围)。

同时,上面还定义了一个单实例的标准 Redis 集群 redis-dify,设置了密码 redis.dify

pg-meta:
  hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
  vars:
    pg_cluster: pg-meta
    pg_users: [ { name: dbuser_dify ,password: DBUser.Dify  ,superuser: true ,pgbouncer: true ,roles: [ dbrole_admin ] } ]
    pg_databases: [ { name: dify, owner: dbuser_dify, extensions: [ { name: pgvector } ] } ]
    pg_hba_rules: [ { user: dbuser_dify , db: all ,addr: world ,auth: pwd ,title: 'allow dify user world pwd access' } ]

redis-dify:
  hosts: { 10.10.10.10: { redis_node: 1 , redis_instances: { 6379: { } } } }
  vars: { redis_cluster: redis-dify ,redis_password: 'redis.dify' ,redis_max_memory: 64MB }

这里出于演示目的,我们全部使用单实例配置,你可以参考 Pigsty 文档部署 高可用 的 PG 集群与 Redis 集群。总之,在定义完成后,使用以下命令创建 PG 和 Redis 。

bin/pgsql-add  pg-meta                # create the dify database cluster
bin/redis-add  redis-dify             # create redis cluster

当然,您也可以在现有的 PostgreSQL 集群,例如 pg-meta 上新定义业务用户与业务数据库,并通过以下命令创建:

bin/pgsql-user pg-meta dbuser_dify    # create dify biz user
bin/pgsql-db   pg-meta dify           # create dify biz database

您应该可以通过以下的连接串,访问到 PostgreSQL 与 Redis,当然连接信息请根据实际情况进行修改。

psql postgres://dbuser_dify:[email protected]:5432/dify -c 'SELECT 1'
redis-cli -u redis://[email protected]:6379/0 ping

当你确认这两个连接串可用后,大功告成,你可以开始部署 Dify 了。

这里出于演示方便的原因,使用IP直连的土办法,如果是多节点的高可用 PG 集群,请参考 接入 一节。

当然,上面的部分是假设你已经是 Pigsty 用户,了解如何部署 PostgreSQL 与 Redis 集群。你可以直接跳过下一节,查看 Dify 如何配置


从零开始的一些说明

如果您已经了解如何配置使用 Pigsty,可以略过本节。

从零安装 Pigsty 需要 准备 一台符合要求的机器节点: Linux / x86_64,静态 IP,使用带有免密 sudo 权限的用户,执行以下命令:

curl -fsSL https://repo.pigsty.cc/get | bash

然后依次完成以下步骤:

cd ~/pigsty      # 下载源码包解压后进入 Pigsty 源码目录,完成后续 准备、配置、安装 三个步骤
./bootstrap      # 【可选项】用于确保 Ansible 正常安装,如果 /tmp/pkg.tgz 离线包则使用它
./configure      # 【可选项】执行环境检测,并生成相应的推荐配置文件,如果知道如何配置可以跳过

# …… 这里请修改自动生成的配置 pigsty.yml ,将上面的集群定义填入 all.children 部分内

./install.yml    # 根据生成的配置文件开始在当前节点上执行安装,使用离线安装包大概需要10分钟完成

您应当将上面的 PostgreSQL 集群与 Redis 集群定义填入 pigsty.yml 文件中,然后执行 install.yml 完成安装。

Redis安装问题

Pigsty 默认不会安装 Redis,所以您需要使用 redis.yml 剧本显式完成 Redis 安装:

./redis.yml

Docker安装问题

Pigsty 默认不会在当前节点安装 Docker,所以您需要使用 docker.yml 剧本安装 Docker。

./docker.yml

Docker Hub 被墙问题

请注意,对于中国大陆用户来说,Docker Hub 与各镜像站点目前出于封锁状态,需要 “科学上网” 才能拉取 Dify 所需的镜像,您可以考虑 docker save|load,或者为 Docker Daemon 配置代理。

要为 Docker Daemon 配置代理,您需要在 proxy_env 中指定 http_proxyhttps_proxy 环境变量,该参数会在 docker_config 任务中被写入 /etc/docker/daemon.json 中:

{
  "proxies": {
    "http-proxy": "http://192.168.x.x:8118",
    "https-proxy": "http://192.168.x.x:8118",
    "no-proxy": "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
  }
}

当然您也可以直接在配置文件中填入您的 HTTP/HTTPS 代理地址,并使用 systemctl restart docker 重启生效。

$ docker compose pull
[+] Pulling 5/5
✔ worker Skipped - Image is already being pulled by api
✔ web Pulled
✔ api Pulled
✔ ssrf_proxy Pulled
✔ nginx Pulled

配置代理后,镜像都可以成功拉取了。当然您也可以使用其他可用的镜像站点,例如 quay.io 等。


Dify的配置工作

Dify 的配置参数一如往常地放在 .env 文件中,内容如下所示:

所有参数都顾名思义,已经填入了在 Pigsty默认沙箱环境 中可以直接工作的默认值,数据库连接信息请根据您的真实配置,与上面 PG / Redis 集群配置保持一致即可。 我们建议你随便改一下这个 SECRET_KEY 字段,可以使用 openssl rand -base64 42 生成一个强密钥。

# meta parameter
DIFY_PORT=8001 # expose dify nginx service with port 8001 by default
LOG_LEVEL=INFO # The log level for the application. Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
SECRET_KEY=sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U # A secret key for signing and encryption, gen with `openssl rand -base64 42`

# postgres credential
PG_USERNAME=dbuser_dify
PG_PASSWORD=DBUser.Dify
PG_HOST=10.10.10.10
PG_PORT=5432
PG_DATABASE=dify

# redis credential
REDIS_HOST=10.10.10.10
REDIS_PORT=6379
REDIS_USERNAME=''
REDIS_PASSWORD=redis.dify

# minio/s3 [OPTIONAL] when STORAGE_TYPE=s3
STORAGE_TYPE=local
S3_ENDPOINT='https://sss.pigsty'
S3_BUCKET_NAME='infra'
S3_ACCESS_KEY='dba'
S3_SECRET_KEY='S3User.DBA'
S3_REGION='us-east-1'

填好连接信息后,我们就可以使用 Docker Compose 拉起 Dify 服务了:

cd pigsty/app/dify && make up

使用Nginx暴露Web服务

Dify 的 Docker Compose 模板里面已经包含了一个 Nginx Server,占据了宿主机的 80 端口。如果你的这台机器就是拿来专门跑 Dify 的那没问题。如果你用的是 Pigsty 单机安装,那么这台宿主机上的 80 端口已经被 Pigsty 部署的 Nginx Web Portal 占据了。

所以,Pigsty 提供的模板中,DIFY_PORT 默认使用了 8001,并通过宿主机上 Pigsty 部署的 Nginx 转发至此端口。当然我们也提供选项B,你也可以直接在 /etc/nginx/conf.d/dify.conf 里使用样例配置,直接指向 Dify 的 webapi 端口。

pigsty.yml 配置文件中的 infra_portal 参数中新增一行 Dify 的配置

infra_portal:                     # domain names and upstream servers
  home         : { domain: h.pigsty }
  grafana      : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" , websocket: true }
  prometheus   : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
  alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
  blackbox     : { endpoint: "${admin_ip}:9115" }
  loki         : { endpoint: "${admin_ip}:3100" }
  
  dify         : { domain: dify.pigsty ,endpoint: "10.10.10.10:8001", websocket: true }

执行以下剧本,重新生成 Nginx 配置、证书并应用:

./infra.yml -t nginx

当然如果要通过域名访问,你要把自己的域名 dify.pigsty 添加到域名服务器,或者简单地写入:/etc/hostsC:\Windows\System32\drivers\etc\hosts 之类的静态域名解析文件。

然后,你就可以从浏览器中,通过 http://dify.pigsty 访问 Dify IDE 了。

2.13 - Pigsty v2.7:集异璧之大成

原文发布于 VONNG

GitHub Release | 发布注记

Pigsty v2.7:集异璧之大成

2024-05-20,Pigsty v2.7 发布了。在这个版本中收录的可用扩展插件数量,达到了惊人的 255 个,成功让 PostgreSQL 的 全能性 又达到了一个全新高度!

同时,我们提供了一些新的 Docker 应用模板,例如开源的企业 ERP 软件全家桶 —— OdooJupyter 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 的存储过程语言支持之丰富,实在是让人惊叹!

pl

再比如说 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_analyticspg_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

v0.7 changelog

当然,还有其他一些 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 生态中,没有一个发行版或者服务提供商,能达到我们的收录的这个扩展数量:

extensions

在 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-intro.png

Odoo 插件非常多,功能强大远超我想象,堪称企业应用全家桶大王。

作为开源免费的软件,Odoo 靠高级扩展插件收钱,这个订阅价格也不算贵。要是一分都不想花,Odoo 社区也提供了这些高级扩展插件的免费开源平替版本… —— 高级付费插件(比如财务模块)也有社区开源版!

odoo-module.png

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 时间点回复过程的上下文。

pitr.png

后面,我们会专门出一期教程,介绍如何利用 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 的,但是不会有离线软件包,只能通过联网安装的模式进行首次部署。

Pigsty 开源版 Pigsty 基础版 Pigsty 专业版 Pigsty 企业版
开源免费! 50,000 ¥ / 年 150,000 ¥ / 年 400,000 ¥ / 年
自给自足的开源老司机 或 5,000 ¥/月 或 15,000 ¥/月 或 40,000 ¥/月
PG 支持:16 PG 支持:15,16 PG 支持:12 - 16 PG 支持:9.0 - 16
OS 支持:三系主力版本 OS 支持:五系最新小版本 OS 支持:五系全部小版本 OS 支持:按需定制
EL 8.9 / Debian 12 / Ubuntu 22.04 EL 7.9/8.9/9.3,Ubuntu 20.04/22.04,Debian 11/12 EL 7.x/8.x/9.x,Ubuntu 20.x/22.x,Debian 11.x/12.x EL,Debian,Ubuntu,云上 Linux,国产 OS 与 ARM
功能:核心模块 功能:所有模块 功能:所有模块 功能:所有模块
SLA:无 SLA:工作日时效内响应 SLA:5 x 8 (<4h) SLA:7 x 24 (紧急 on-call)
社区公益支持答疑 提供基础咨询服务 提供专业咨询服务 提供企业级咨询服务

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 发布注记

亮点特性

新增了大量强力扩展插件,特别是一些使用 rustpgrx 进行开发的强力扩展:

  • 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,降低对节点根证书的依赖。

新的贡献者

完整的变更日志: 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

发布版本:微信公众号

2.14 - Pigsty v2.6:PG 踢馆 OLAP

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

二月的最后一天里,Pigsty v2.6 正式发布了 🎉。这个版本正式使用 PostgreSQL 16 作为默认的大版本,并引入了一系列全新的扩展,包括 ParadeDB 与 DuckDB ,让 PostgreSQL 的 OLAP 分析能力提高到一个全新的水准,喊一声 HTAP 标杆,数据库全能王当之无愧。

此外,我们还全面翻新了 Pigsty 官方网站、文档与博客,提出了更为凝练的六条核心价值主张。在全球范围内,我们使用了由 Cloudflare 支持的全新域名 pigsty.io 。作为默认的官方站地址与仓库地址。原有的 pigsty.cc 域名、网站、仓库继续在国内作为镜像提供服务。

最后,我们还正式推出了明码标价的 Pigsty 专业版与服务订阅,为那些需要更强支持力度的用户提供进阶功能与兜底选项。


分析性能史诗级加强

TPC-H 和 Clickbench 是分析领域的权威评测,Clickbench 上有许多 OLAP 数据库性能的横向对比,可以作为量化参考依据。例如在这个最有代表性的例子中,我们可以看到许多知名的数据库组件的相对性能表现(耗时越短越好):

olap.jpg

c6a.4xlarge, 500gb gp2 / 10亿条记录

在这张图表上我们标注出了 PostgreSQL 与生态扩展插件的性能表现。原生未经过调优的 PostgreSQL 耗时(x1000),调优后可以达到(x47),同时,PG生态还有三个与分析有关系的扩展:列存 Hydrax42),时序扩展 TimescaleDBx103),以及分布式扩展 Citusx262)。但与专注于 OLAP 的第一梯队组件:Umbra,ClickHouse,Databend,SelectDB(x3~x4)相比仍然有十几倍的性能差距。然而最近出现的 ParadeDBDuckDB 的出现改变了这一点!

ParadeDB 提供的 PG 原生扩展 pg_analytics 实现了第二梯队(x10)的性能表现,与第一梯队的 OLAP 数据库只有 3~4 倍的性能差距。比起额外的好处来说:ACID,数据新鲜性,无需 ETL,额外学习成本,维护独立的新服务,(更别提它还提供了 ElasticSearch 质量的全文检索能力),这种性能差距通常是可以接受的。

DuckDBx3.2)则把 OLAP 拔高到了一个全新高度 —— 抛开 Umbra 这种学术类研究数据库的用例,DuckDB 也许是 OLAP 实战性能最快的分析数据库。虽然说它并不是 PG 的扩展插件,但它是一个嵌入式组件,而 DuckDB FDW 以及 pg_quack 这样的项目能让 PostgreSQL 充分利用到 DuckDB 带来的完整分析性能红利!

duck.jpg

来自 ParadeDB 创始人与 DuckdbFDW 作者的感谢致意


全新的价值主张

价值主张是数据库发行版的灵魂,在这个版本中,我们提出了 六条核心价值,如下图所示:

value1.jpg

这张图列出了 PostgreSQL 要解决的六个核心问题:Postgres 的可扩展性,基础设施的可靠性,图形化的可观测性,服务的可用性,工具的可维护性,以及扩展模块和三方组件可组合性。

value2.jpg

Pigsty 的六条缩写正好构成 PIGSTY 首字母缩写 —— 除了 PostgreSQL in Great STYle 之外,这六点价值主张提供了另外一种缩写解释:

Postgres, Infras, Graphics, Service, Toolbox, Yours.

你的图形化 Postgres 基础设施服务工具箱。

同时我们还重新设计了 Logo,从戴墨镜的装象猪头变成了六边形组合,配色正好是这些关键组件的颜色(PG蓝,ETCD青,Grafana橙,Ansible黑,Redis/MinIO 红,Nginx绿),是上图大六边形的一个浓缩精简版本。原来的墨镜小猪将作为 Pigsty 项目的吉祥物继续存在。

mascot.jpg

全新的网站

在这个版本中,我们重新翻修了老网站。使用了最新版本的 Docsy 作为文档框架,并更新调整了大量内容。我们放弃了花哨繁而不实的设计,直接把将 Pigsty 的价值主张与核心特性放在 Landing Page 上。

web1.jpg

而真正的内容,都在文档目录里,我们重新梳理设计了文档的目录结构

web2.jpg

当然,抛下了纯 Markdown 的执念后,我们也可以在文档内容中使用一些好看的样式与花活。

web3.jpg

除了文档外,我们也整理了一下最近的文章纳入 Pigsty 博客。重新划分为六个专栏:云计算泥石流,数据库老司机,以及 PostgreSQL 的生态、开发、管理、内核四个板块。

web4.jpg

与此同时, 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 里已经测试的很充分了)。

pg16.jpg

同理,我们也将开源版本的支持范围进一步收窄,缩小到 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 关系没有那么紧密的模块,在后续可能会作为专业版的内容提供。

pro.jpg

在后面,Pigsty 开源版将专注于做好一件事 —— 提供可靠,高可用,可扩展的本地 PostgreSQL RDS 服务,当然像 Docker 模板这样的实用特性可能还是会留开源版中。

并不是说这些功能在开源版 Pigsty 里就没有了,我相信开源老师傅还是可以很轻松的仅仅通过修改配置文件就把它们重新弄出来,但这些功能不会成为开源版本的默认组成部分了。


商业订阅服务

开源是用爱发电的情怀事业,但要想让这条路走得更长,还需要商业的利益来浇灌。在这个版本中,我们正式推出了商业版本的 Pigsty,为有需要的用户提供更丰富的支持选项。

除了提供额外功能模块支持,Pigsty 专业订阅 还提供了咨询答疑与兜底服务。并且支持更为宽泛的操作系统与数据库版本,如下表所示:

svc.jpg

尽管 Pigsty 本身的宗旨便是让用户拥有开箱即用的数据库服务,甚至还带有硬件故障自愈的 HA 和为软件/人为失误兜底的时间点恢复PITR。也许你拉起了它,一年、两年、三年都没有遇到任何问题 —— 从概率上讲这蛮正常的。

但数据库出了问题,通常都是大问题。用不好数据库,也容易发展成大问题。所以我们也会为付费用户提供专家咨询与服务,作为最终的疑难杂症兜底。(例子:我们抢救过一个烤糊的,没有备份的 Gitlab 数据库)。与此同时,我们也可以提供专业 PostgreSQL DBA 的咨询服务。提供备份、安全、合规建议,管理开发最佳实践,性能评估与优化,设计建议与答疑解惑。

sub.jpg

许多时候,化腐朽为神奇,能带来几个数量级改善的秘密就是专家的一句话。对于以可扩展性作为灵魂,扩展生态极度繁荣的 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

亮点特性

软件配置变更

  • 使用 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_packagesinfra_packagespg_packagespg_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

2.15 - Pigsty v2.5:Ubuntu & PG16

原文发布于 VONNG

GitHub Release | 发布注记

Pigsty v2.5:Ubuntu & PG16

时值 1024 程序员节,Pigsty v2.5.0 发布了 🎉,这个版本添加了对 UbuntuDebian 系操作系统的支持,加上原有的 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 数据库服务。更多介绍请访问 pigsty.cc

intro

Ubuntu/Debian 支持

在《临水照花看 Ubuntu 与 Debian:Pigsty v2.5》中,我们已经预告了对 Ubuntu / Debian 系操作系统的支持(以下简称 Deb 支持)。从两年前 0.x 版本的时代,就有用户提出想要 Ubuntu 和 Debian 操作系统支持了,所以我觉得这是一件非常正确且重要的事情。

作为一个选择构建于 裸操作系统上 的数据库发行版,支持一种新操作系统并不像容器化数据库打个镜像那么简单。有许多的适配工作需要去做。首当其冲的就是包不齐的问题,好比 Prometheus 就没有官方提供的 DEB 源,不得不自己维护打包并提供一个软件仓库。

apt-yum-repo

Pigsty 维护的 APT/YUM 源

包管理的巨大差别,要求你针对 DEB 系重写整个 bootstrap / 构建本地软件源的逻辑。发行版的 FHS,习惯规约差异需要你一个一个去适配处理。你要解决的不仅是 PostgreSQL 内核和一百多个扩展的完整性兼容性问题,还有 etcd / minio / redis / grafana / prometheus / haproxy 等各种组件的问题。好在 Pigsty 克服了这些问题,让 Ubuntu / Debian 也有了和 EL 7-9 一样完整的丝滑体验。

one-click-install

一键安装 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-config

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 工作流都在数据库中完成!

postgresml

第二个值得一提的扩展插件是 pointcloud[1]。因为地理空间扩展 PostGIS 的存在,PostgreSQL 一直是自动驾驶/电车公司的心头好。而 PointCloud 则将 PostgreSQL 与 PostGIS 的力量推广到一个新的边界。激光雷达会不断扫描周围并生成所谓 “点云” 数据。pointcloud 插件提供了 PcPoint & PcPatch 两种数据类型与四十个功能函数,允许您对超高维度的点集进行高效存储、检索与运算。这个插件在 PGDG APT 源中原生提供,而 Pigsty 将其移植到了 EL 系统上,让所有系统的用户都可以用上。

pointcloud

imgsmlr[2] 则是一个以图搜图的插件。尽管现在已经有许多 AI 模型可以将图片编码成高维向量,使用 pgvector 进行语义搜索以图搜图。但 imgsmlr 最有趣的地方在于,它不需要任何外部依赖,可以直接在数据库内完成所有功能。用作者的说法是:我做这个插件的目的不是提供最先进的图像搜索方法,而是告诉你们如何编写一个 PostgreSQL 扩展,来干甚至是图像处理这种非典型的数据库任务。

imgsmlr

首先将 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,唯一的区别是用二字组替代三字组实现模糊检索,对中日韩语言的全文检索支持效果更好。

pg-similarity

除此之外,我们还将 Supabase 的支持更新到最新版本:20231013070755。您可以在 EL8/EL9 系统上使用 Pigsty 提供的 PostgreSQL 数据库来自托管 Supabase。

算上 PostgreSQL 自带的扩展,Pigsty 2.5 支持的扩展插件已经达到了 150+。尽管有这么多的插件,但请注意,它们全都是 选装项。Pigsty 为所有 PostgreSQL 大版本都提供了 pg_repackwal2jsonpasswordcheck_cracklib (EL)这几个重要的扩展,默认安装的三方扩展只有在线治理膨胀的 pg_repack。其他的扩展如果不安装,对现有系统不会产生任何额外的影响和负担。


监控系统调整

Pigsty v2.5 在监控系统上也进行了调整,将两年没升级的 pg_exporter 更新至了 v0.6.0,新增了 TLS 支持,修复了两个依赖组件的安全问题,打好了 ARM64 软件包并使用最新的指标定义文件。同时,在 pg_query 指标收集器中添加了与共享缓冲区 I/O 有关的四个指标,进一步丰富了 PGSQL Query 中提供的信息。

首先是新增的监控面板:PGSQL Patroni,提供了一个集群高可用状态的完整视图。对于分析历史服务健康状态,主从切换原因都大有帮助。

patroni-dashboard

然后是 PGSQL Exporter,提供了 PG Exporter 和 Pgbouncer Exporter 自我监控的详细指标与日志。可以用于优化调整监控系统本身的性能。

exporter-dashboard

在各种监控大盘的组件导航面板中,都可以点击 Patroni Exporter 的指示块直接跳转到这些组件的详情页中:

component-nav

PGSQL Query 监控面板现在分为五栏:Overview 概览,核心指标 QPS/RT,对时间微分指标,对调用次数的微分指标,百分比指标。遵循了宏观查询优化的方法论进行优化。

减少资源消耗:降低资源饱和的风险,优化 CPU/内存/IO,通常以查询总耗时/总 IO 作为优化目标。使用 dM/dt:指标 M 基于时间的微分,即每秒的增量。

改善用户体验:最常见的优化目标,在 OLTP 系统中,通常以降低查询平均响应时间作为优化目标。使用 dM/dc:指标 M 基于调用次数的微分,即每次调用的增量。

平衡工作负载:确保不同查询组之间的资源使用/性能表现的比例关系得当。使用 M%,即某一类查询指标占总数的比例。

PGSQL 首屏是最核心的查询性能指标:QPS 与 RT —— 以及它们的 1 分钟,5 分钟,15 分钟均值,抖动情况与分布范围。

query-qps-rt

接下来,便是用于优化用户体验的 dM/dc 类指标,这里的 M 指标包括:

  • 每次查询平均返回的行数
  • 每次查询的平均执行时长
  • 每次查询平均产生的 WAL 大小
  • 每次查询平均耗费的 I/O 时间
  • 每次查询平均读写的缓冲区块大小
  • 每次平均访问/写脏的缓冲区块大小
query-dmc

随后是用于 减少资源消耗dM/dt 类指标,这里的 M 指标基本同上,不同之处在于它是针对时间的微分而不是针对调用次数的微分:

query-dmt

最后一栏中,我们展示了用于平衡工作负载的 %M 类指标。用于揭示这个特定查询组在整个工作负载中的比例与相对位置,标黑加粗显示,点击特定查询可以原地跳转查看另一组查询的性能表现,非常方便。

query-percent

除了上面三个 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 了。


发布注记

PGSQL x Pigsty:数据库全能王来了

如何用 Pigsty 监控现有 PostgreSQL (RDS/PolarDB/自建)?

Pigsty 特性与快速上手

EL 系操作系统发行版哪家强?

临水照花看 Ubuntu 与 Debian:Pigsty v2.5

PostgreSQL:世界上最成功的数据库

Pigsty 2.4:PG16 支持,RDS 监控与新扩展!

Pigsty v2.3.1:HNSW 版 PGVECTOR 来了!

Pigsty v2.3 发布:应用生态丰富

Pigsty v2.2 发布 —— 监控系统大升级

Pigsty v2.1 发布:向量扩展 / PG12-16 支持

Pigsty v2.0.2 更好的开源 RDS 替代:Pigsty

Pigsty v2.0 发布,炮打 RDS

Pigsty v2 正式发布:更好的 RDS PG 开源替代

Pigsty v1.5.1 发布

Pigsty v1.5 发布与新特性

Pigsty v1.4 正式发布!

Pigsty v1.4 前瞻

Pigsty v1.3.1 安装教程

开箱即用的 Redis 发行版 —— Pigsty v1.3

Pigsty v1.2 发布

Pigsty v1.1 发布/新功能介绍

Pigsty v1 正式发布:开箱即用的 PostgreSQL 开源发行版

References


v2.5.0

curl https://get.pigsty.cc/latest | bash

亮点特性

  • Ubuntu / Debian 支持:bullseye,bookworm,jammy,focal

  • 使用 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): imgsmlrpg_similaritypg_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_repacktimescaledb 支持)

  • 软件更新:

    • 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

发布版本:微信公众号

2.16 - PGSQL x Pigsty: 数据库全能王来了

原文发布于 VONNG

Pigsty v2.4.1已于 9 月 24 日正式发布。核心关注点是:如何聚拢PostgreSQL 生态里游离的超能力,发挥出 1 + 1 远大于 2 的协同增幅效果。

我们引入了 12 个由自己编译打包、整合维护的全新扩展,并加入了三个强力组件的原生支持: SuapbasePostgresMLFerretDB。让 Pigsty 收录的扩展数量已经达到了破纪录的 150 个,全部开箱即用!

图片

在这些新增/现有扩展的加持下,PostgreSQL —— 这个世界上最先进的开源关系型数据库,已经堪称是 数据库全能王 了。

图片

Supabase 是一个有着 57K Star 的明星项目,基于 PostgreSQL 提供 Firebase 的开源替代。而 PostgresML 则是在 Postgres 里搞大模型训练调用/经典机器学习算法的当红炸子鸡。FerretDB 则提供基于 PG 的 MongoDB 兼容性:Pigsty 与这些社区都建立了良好的合作关系。

Supabase

我先前一直倡导一种基于 PostgreSQL 进行低代码开发的理念 —— 你只要设计好数据库模式,其实大部分后端代码编写是可以自动化生成的。

像 PostgREST 这样的工具可以自动从中反射生成定义良好,文档详实的 RESTful API。也有像 PostGraphile 这样的工具可以自动反射出 GraphQL API,最后,使用 Kong 这样的 API 网关套一层,解决好认证、日志、限流的问题。用户完全可以在一行后端代码都不写的情况下,完成一个完整业务应用的开发。

Pigsty 确实也整合并提供了这些趁手的工具,但而 supabase 不仅实现了上面这个愿景,更是将其实现到了一个全新的高度。

图片

Supabase 帮全栈应用开发者补完了从数据库到前端之间的鸿沟:一键完成各种认证接入(邮件密码/手机号/魔法连接/社交网站登陆等等);自动生成数据库 REST API 与 GraphQL API,通过 Websocket 发送数据库变更的实时通知,提供完整的文件上传下载/断点续传/图片变换/CDN 分发功能,以及在全球分发管理 CDN 边缘 TS 函数,还提供一个优雅的管理控制台 GUI 与命令行工具管理所有一切。

Suapbase 的所有的功能都围绕 PostgreSQL 这个核心,并通过 Kong API 网关对外暴露。有了 Supabase,用户不需要再操心经典“后端”的实现细节,只需要做好数据库模型设计,与前端 API 调用就够了。

图片

supabase 组件架构图

Supabase 封装了一部分 PostgreSQL 数据库管理的工作,包括一个单实例的 PostgreSQL 内核,加上自行维护的 pg_graphql, pg_net,vault,pgjwt 等扩展插件,充分利用了触发器,全文检索,密钥存储功能。提供了基础的 PITR 备份支持,还不错的安全管理最佳实践,与一个数据库管控 GUI 工具:Supabase Studio,可以说,对于一个起步阶段的应用来说是没问题的。

图片

当然对于一个严肃的生产应用来说,数据库这部分还有许多问题有待解决:Supabase 的 Postgres 中仍然缺少 PostgreSQL 生态里的许多功能扩展,单实例+PITR 的设计也不足以克服硬件失效带来的可用性冲击。在可靠性,安全性,性能,可观测性上也都还有许多薄弱环节。

但是不用担心,Pigsty 会帮助 Supabase 解决这些问题 —— 您现在可以使用由 Pigsty 所创建托管都故障自愈的多节点高可用 PostgreSQL 集群来承载 Supabase 上层的无状态服务部分。开源生态的魅力就在这里 —— 每个人干好自己最擅长的事情,而所有人都可以从中受益!

图片

一键拉起 Supabase 所需的数据库

您只需要使用默认的 supabase 模板,即可一键部署 Supabase 所需要的数据库集群,您不需要操心用户、扩展、模式、HBA 这些细节。只需要在.env配置文件模板中填入数据库连接串,然后 docker compose up,你的 supabase 就立即进入可用状态了!

PostgresML

另一个 2.4 带来的的重大更新是 PostgresML。AI 时代带火了向量数据库,这个方向上pgvector 已经交出了一份足够令人满意的答卷。但是存储嵌入只是 AI 生态对数据库需求的一部分,AI 的灵魂还是模型。PostgresML 则弥补了这一点缺憾:现在您可以在数据库中用 SQL 调用经典机器学习算法,以及直接调用 —— Hugging Face 上的模型,进行训练,微调,与预测。

图片

PostgresML 是用 RUST 编写的扩展,在一些运算密集型任务上使用 RUST linalg / BLAS 线性代数库取得了相比 Python 8x - 40x 的性能表现。更重要的是:它为 Python3 机器学习/AI 工具链提供了 SQL Binding。以前您需要自行处理模型的选用,下载,部署与管理问题。而现在您不需要再了解这些繁琐的细节了!直接用拿着模型名字调函数就够了!

图片

PostgresML 可以直接下载 Hugging Face 上的模型,对输入进行 Embedding,生成向量,并使用 pgvector 进行存储。让整个语义搜索的工作流在数据库内部完成闭环!原地完成数据准备、训练微调、预测输出、结果存储。

图片

尽管 PostgresML 提供了官方 Docker 镜像,但它与各种 Postgrs 衍生镜像有着同样的问题 —— 难以利用好 PostgreSQL 生态系统的合力。您没有办法轻易为其加装想要的扩展并与其组合使用,以及,单机容器实例对于生产应用实在是过于简陋了。

Pigsty 可以帮您解决这个问题,您可以在拥有地理、时序、图、向量、全文检索、GraphQL,HA / PITR / IaC / Monitor 等能力的同时,一键加装 PostgresML 扩展。PGML 与其他扩展的唯一区别就是,需要一些额外的 python / pip / virtualenv 环境的简单配置。但我相信这两行命令肯定也难不倒你。\

FerretDB

FerretDB 是另一个非常有趣的项目,之前的名字叫 “MangoDB”,因为有碰瓷 “MongoDB” 的嫌疑,所以在 1.0 版本改成了现在的名字。但这不影响它的效果 —— 在 PostgreSQL 上提供 MongoDB Wire Protocol 支持,让 PG 假扮成一个 MongoDB!上次做这种事的插件是 AWS 的 Babelfish,让 PostgreSQL 兼容 SQL Service 的线缆协议假扮成 MSSQL。

图片

PostgreSQL 的 JSON功能 已经非常完善了:二进制存储 JSONB,GIN 任意字段索引,各种 JSON 处理函数,JSON PATH 和 JSON Schema,它早已是一个功能完备,性能强大的文档数据库了。PostgreSQL 生态里还有 mongo_fdw 这样的组件,允许用户用 SQL 来访问现有的 MongoDB 数据。

但是提供替代的功能,和直接仿真还是不一样的。FerretDB 就可以为使用 MongoDB 驱动的应用程序提供一个丝滑迁移到 PostgreSQL 的过渡方案。MongoDB 中的主要特性:文档数据模型、运算符/函数,索引、增删改查,聚合等等都没啥问题。不过您要是用到了一些高级特性,那就不一定照顾的到了。

Pigsty 在 1.x 中就提供了基于 Docker 的 FerretDB 模板,在 v2.3 中更是提供了原生的部署支持。在 v2.4.1 中,FerretDB 更新到了 v1.10 版本。它作为一个选装项,是丰富 PostgreSQL 生态大有裨益。Pigsty 社区已经与 FerretDB 社区成为了合作伙伴,后续将进行深度的合作与适配支持。

zhparser

PostgreSQL 的 JSON 特性可以对标 MongoDB,而在全文检索能力上也有对标 ElasticSearch 的东西 —— TSQuery 与 TSVector。不同于 MySQ L 凑数的 ngram “全文检索” 实现(PG 对应物叫 pg_trgm),PostgreSQL 自带了各种语言的分词算法,开箱即用。唯一让人遗憾的就是,许多西文都天然会使用空格进行分词,但中文分词的问题要麻烦的多,针对西文的自带分词算法并不好使。

图片

zhparser 的出现解决了这个问题。zhparser 使用 scws 项目进行中文分词,默认词库中标注了大量汉语词性,便于用户在创建分词配置时进行深度的定制。Pigsty 为 scwszhparser 维护了 RPM 包,让用户可以开箱即用,体验完整的中文全文检索能力。

更有趣的是,向量数据库的语义搜索,也可以与这里的全文检索组合使用,向用户返回更具有可解释性的结果。

图片

Apache AGE

另一个在 v2.4 引入的 PostgreSQL 强力扩展插件是 Apache AGE,AGE 是 “A Graph Extension” 的缩写 —— “一个图数据库扩展”。AGE 最初是另一个 PostgreSQL 上的图数据库扩展 AgensGraph 的分叉,并在 2020 年进入 Apache 基金会,2022 毕业为顶级项目。

AGE 的功能就是为 PostgreSQL 添加图数据库的能力。尽管 PostgreSQL 本身已经提供了类似的机制 —— 递归查询。但是 AGE 把原汁原味的 Cypher 图查询语言添加到了 PG 里,而且还能完全兼容现有的 PostgreSQL ACID 能力。并允许你您混合执行 Cypher 查询与 SQL 查询进行数据分析。

图片

对于图数据库来说,Cypher 语言提供的 MATCH 非常有表达力。例如上面 4 行 Cypher 查询如果用 PostgreSQL 的标准建模方式与递归查询能力,其实也是可以实现的,但显然要啰嗦上许多。

图片

PG GraphQL

说起图来,除了 Neo4J 这类“图数据库”,还有一个与数据库有点关系的东西 —— GraphQL:这是与 REST API 对应的一种 API 设计新范式。

GraphQL 为 API 提供了一种声明式的查询语言:用户声明自己想要什么东西,并获取可预期的结果;一次请求可以拿到多种所需的资源,避免重复调用手动拼接;自带的类型系统、IDE 工具让 API 的使用更加简便。

这也是 supabase 超能力的一个重要来源 —— pg_graphql。这是一个使用 RUST 开发的 PG 插件,由 suapbase 团队维护。想要在托管 PostgreSQL 实例上运行 Supabase,首先要解决的就是这些 Supabase 专有扩展的问题。Pigsty 已经帮用户把这部分做了:不过只支持 EL 8/9 上的 PG 14/15。

图片

为 PostgreSQL 添加 GraphQL API 支持这件事,早在 七八年前就有人做过了,比如 postgraphql,就可以反射 PG 内部的模式,并自动生成查询数据库的 GraphQL API。

然而,还没有一个工具能像 pg_graphql 这样,直接在 PostgreSQL 数据库内部,通过内建函数的方式,提供了原生的 GraphQL 查询支持!这意味着你不需要维护任何额外的组件,就可以使用全新的语言来访问 PostgreSQL 的数据了。

PG NET/HTTP

用 SQL 接口发送接收 HTTP 请求并不是一个新鲜事儿,Oracle 的 UTL_HTTP 包就是干这个的。PostgreSQL 也可以通过各种语言的存储过程来发送 HTTP 请求。但 pgsql-httppg_net 则利用原生的 curl API,提供了 SQL 直接可用的 HTTP 接口,发送同步/异步请求,并处理响应数据,这显然比写存储过程要优雅多了!

图片

您可以直接使用 SQL 构建 HTTP 请求,拼接首部,使用 pgcrypto 对请求进行签名。同步/异步发送 HTTP 请求,并使用 JSON 特性来解析处理结果,这项特性有着近乎无限的想象空间 —— 可以玩出许多“骚操作”。比如,如果你的咖啡机可以响应 HTTP 请求,那么调用 API 就能让你的数据库煮咖啡的能力了。

你可以在数据库内写爬虫,查询天气,拉取账单,也可以用这个能力来实现一些更有生产价值的功能,比如任务执行完毕后发送通知,或者当表/行出现增删改时通过 HTTP 请求与外部进行通信同步:或者实现类似于 Infra as CMDB SQL 的效果。

PG FileDump

pg_filedump 是 v2.4.1 引入的另一个“扩展”。它实际上是一个 PG 版本相关的二进制程序:可以用来从 PostgreSQL 数据页面中抽取数据。当您的数据库或者磁盘爆炸又没有备份的话,它会成为一棵救命稻草。

引入它的契机正是因为最近我们接了一个比较离谱的 PG 数据恢复的活儿,只有一些残余的二进制文件可供抽取还原。而 pg_filedump 就是这样一个趁手的工具。使用起来也很直接,用 -D 告诉 pg_filedump 如何解释表二进制文件里每一行的二进制数据就可以了。关于它的用法,后面我们准备了一篇关于底层数据恢复的案例,将于最近几天发出。

图片

尽管 pg_filedump 还存在一些局限性:例如对于复杂的 JSON/数组数据处理还有缺陷。但作为一个应急工具来说,已经足够好用了。我们针对 PG 12 - 16 提供了此扩展。我们希望您永远也不要用到这个扩展,但我们也希望:当您需要它的时候,它已经在那里了。

Hydra / Citus

Hydra 是一个列式存储扩展,旨在为 PostgreSQL 提供高性能的向量化列存储扩展。PostgreSQL 生态其实已经有一些列式存储扩展,例如 Citus 自带的 columnar,以及 TimescaleDB 针对时序数据的压缩列存引擎。不过看起来 hydra 在这个领域又达到了新的高度:在它给出的样例场景中(500G count),它可以达到令人震惊的加速比:从四五分钟到亚秒级。

图片

Hydra Fork 自 Citus 的列存插件 columnar,但进行了许多改进优化,例如矢量化执行,查询并性化,并进行了一系列针对性的调优。hydra 目前已经 1.0 GA,Pigsty 针对 PG13 - 15 提供了它的 RPM 包,放在 Pigsty 官方 yum 源中。

不过目前 Pigsty 的离线软件包里默认并没有收录它,因为它与 Citus 的 columnar 有同名冲突。Hydra 的列存插件号称可以原地替换掉 Citus 的列存实现,所以您依然可以方便地通过简单配置,一键安装替换。

图片

这里顺带一提,除了上面介绍的几个新增扩展外,Pigsty 本身也早已经支持了许多经典扩展,例如 Citus 就是最重要的扩展之一。Citus 可以将经典的主从 PG 集群原地改造为一个水平分片的分布式数据库集群,提供 scale out 与并行加速的能力。

Citus 被微软收购后变为 Azure 上的 Hyperscale for PostgreSQL 数据库,且使用 AGPLv3 协议完全开源。原本企业版的能力(例如在线分片平衡)也完全开源可用了,对于分布式 SQL 的支持程度要比许多基于中间件的方案还要靠谱得多。

图片

Pigsty 很早便提供了对 Citus 的第一等支持:您可以方便地一键搭建由 Patroni 管理的高可用 Citus 水平分布式集群组,享受灵活的动态扩缩容与分布式 HTAP 查询能力。

Embedding / Vector

向量数据库大火,PG 生态的 PGVECTOR 就是我们提进 PGDG 官方仓库的,所以我们之前也写了一些专题文章进行介绍(《PGVECTOR 与 AI 大模型》)。不过 PostgreSQL 生态的向量数据库扩展,可不是只有 pgvector 一个选手,另一个有些许竞争力的向量扩展是 pg_embedding

pg_embedding 由 PostgreSQL 当红炸子鸡创业公司 neon 维护,主打的卖点是性能:HNSW 索引比 IVFFLAT 有一些显著的优势。不过 PGVector 在最近的版本 v0.5 之后也提供了 HNSW 索引,所以这里的利弊权衡就比较微妙了。

图片

不同于 pgvector 使用独立的新类型 vectorpg_embedding 是建立在 PostgreSQL 现有的浮点数组类型之上的:向量的数据类型是 PostgreSQL 原生的 real[]。这种做法有利有弊:好处是不需要一个新类型,坏处是它指定死了浮点数的精度(Float4),不利于后面添加降低精度/量化之类的功能实现。但总之,我们也将其收录到了 Pigsty 的扩展列表中,供用户选用与评估。

图片

此外,还有几个向量扩展插件,例如使用 RUST 重写的 pgvector.rs,以及刚冒出来的 Latern。前者功能已经被 PGVector 完整覆盖,后者则是 pg_embedding 的拙劣分支换皮,因此并未收入 Pigsty 中。

经典的时空扩展

除了上面介绍的几个新增扩展外,Pigsty 本身也早已经支持了许多经典扩展,例如 PostGISTimescaleDB。便是为 PostgreSQL 提供了地理空间时序事件处理的能力,堪称 PG 的杀手级扩展。每一个的分量都配得上一个专用数据库的称号,但它们却愿意选择成为 PG 生态的扩展,而不是自立门户。\

PostGIS 的能力不用过多介绍,做 GIS 的人都懂。MySQL,Mongo 这些数据库确实跟进了一些 ST_XX 空间函数,但是在 PostGIS 依然有着碾压性的优势:它已经成为了地理空间信息处理的事实标准了。

图片

TimescaleDB 为 PostgreSQL 提供了一系列非常实用的功能:强大的写入能力,完整的 SQL 能力,时间桶聚集函数,持续聚集,数据生命周期管理:设置分区/分级/压缩/降采样/保留策略,列存储/分布式实现,覆盖了时序相关数据的方方面面。\

图片

在 benchant 提供的时序数据库测评中,TimescaleDB 是唯一上榜的“扩展”,排在专用时序数据库 IoTDB 与 QuestDB 之后。尽管在性能单项上与榜一大哥有差距,但数据库领域比拼的从来都是综合实力 —— 它的背后,还站着整个 PostgreSQL 生态系统。

图片

专用数据库并非不好:专用组件在自己领域中的实力毋庸置疑。但正如向量数据库领域正在发生的事一样:那些使用多种专⻔数据库客户会不断遇到这类典型问题:数据冗余、大量不必要的数据搬运工作、分布式组件之间的缺乏数据一致性、额外的专业技能劳动力成本、额外的软件许可成本、有限的查询语言能力、可编程性和可扩展性、有限的工具集成、以及与真正数据库相比更差的数据完整性和可用性。

图片

其他扩展

Pigsty 提供了 150+ 扩展插件(包括 PG 自带的一些 Contrib 插件),一次性同时把所有 150 个扩展安装上去是可行的,尽管这可能是一种相当疯狂的做法。

好在所有的扩展插件都是可选项,您完全完全可以按需定制,选择自己想要启用哪些扩展插件。Pigsty 确保所有这些扩展都可以一键从 Yum 安装,正确地 CREATE EXTENSION 不出错。对于重要的核心扩展来说,Pigsty 更是通过各种测试确保它们可以稳定运行并协同工作。

图片

Pigsty 会为您默认安装一些重要的扩展:PostGIS,TimescaleDB,Citus,PGVector,PG Repack,wal2json。但并不是所有默认安装的扩展都会被激活:Pigsty 为您“自作主张”默认启用了 pg_stat_statements (查询监控),pg_repack (膨胀维护)以及 timescaledb(时序支持),您完全可以通过配置将其禁用。

图片

除了上面介绍的插件之外,PG 生态还有许多许多未被 PGDG 与 Pigsty 收录的扩展。如果您有一些想用的扩展没有被收录,欢迎在 Pigsty 仓库中提 Issue,或者使用 Pigsty 提供的编译基础设施自行打包、分发使用。

The Linux of Database

可以说,在上面这些扩展的加持之下,PostgreSQL 已经从一个强大的关系型数据库,变成一个怪兽级的多模态数据库全能王:自主可控自动驾驶时序地理空间 AI 向量分布式文档图谱全文检索可编程超融合联邦流批一体 HTAP Serverless 全栈式平台数据库

PostgreSQL 是一专多长的全栈数据库,天生就是 HTAP,超融合数据库,基本单一组件便足以覆盖中小型企业绝大多数的数据库需求:在关系型 OLTP 上对标 Oracle/MySQL,有 JSONB/GIN 对标 MongoDB,有 PostGIS 对标地理空间数据库,有 TimescaleDB 来对标时序/流数据库,有 Citus/Hydra 来对标分布式/列存储/HTAP 数据库,有全文检索来对标 ElasticSearch,有 AGE/EdgeDB 来对标图数据库,有 pgvector 来对标专用向量数据库。这些惊人的多模态能力,正是源自 PG 的扩展能力。

图片

PostgreSQL 的可扩展机制与插件系统,让它不再仅仅是一个单线程演化的数据库内核,而可以有无数并行发展的支线,像量子计算一样同时探索各种方向上的可能性。每一个数据处理的细分垂直领域 PG 都不会缺席。就好比最近向量数据库领域大火,别的数据库都还没反应过来,PG 生态立刻就涌现出好几个相关插件,以迅雷不及掩耳之势抢占了这一块生态位。更有趣的是,扩展完全是按需启用的可选项**,并不会影响内核主干的稳定性**。

我认为在当下,数据库领域即将迎来 Linux 时刻 —— PostgreSQL 成为数据库领域的 Linux 内核。你并不难找到某个专业数据库在某个专业领域比 PostgreSQL 干的更漂亮:但没有一个其他数据库能够与所有扩展加持下的 PostgreSQL 比拼综合实力,包括 Oracle:是的,开源免费本身也是一种实力!

在一个相当可观的规模内,PostgreSQL 都可以独立扮演多面手的角色,一个数据库当多种组件使。更美妙的是,这些扩展的能力可以融合在一起,发挥 1+1 远大于 2 的效果来。单一数据组件选型可以极大地削减项目额外复杂度,节省大量成本与开发时间。如果真有那么一样技术可以满足你的各种数据需求,那么使用它就是最佳选择,而不是试图用多个组件来重新实现它。

而 Pigsty 的愿景,就是凝聚这些 PostgreSQL 生态的合力,并让所有这些能力,都对用户唾手可及。当然,那就是另一篇要说的故事了。

图片

发布版本:微信公众号

2.17 - 如何用Pigsty监控现有PostgreSQL (RDS/PolarDB/自建)?

原文发布于 VONNG

Pigsty 是一个开箱即用的 PostgreSQL 发行版,与本地优先的 RDS 开源替代。但它也可以单独作为一个 PostgreSQL/主机监控系统来使用。本文以阿里云为例,介绍了用一台 ECS 安装部署 Pigsty,并用于监控云上的 PolarDBRDS for PostgreSQL,为现有数据库带来极致的观测能力。

嵌入媒体

快速上手

使用 Pigsty 教程分为四个步骤:

1.申请用于部署 Pigsty 的 ECS 服务器 2.在 ECS 服务器上完整单机安装 Pigsty3.配置 PolarDB / RDS 的监控用户、模式、视图、黑白名单 4.将 RDS / PolarDB for PG 接入 Pigsty 监控系统中

只要您有阿里云账号,使用按量付费模式(需要账户余额¥100 以上),费用大致为 ¥4 / 小时,一小时内收工。

Why Pigsty

在讲 How 之前先说 Why。为什么要用一个额外的监控系统来做这件事?难道各家云厂商不是已经提供 RDS 监控了吗?没有错,只不过各家云厂商的 RDS PostgreSQL 的监控实在太简单了:这种程度的监控,对于回答数据库活着还是死了这件事也许足够了,但对于稍微高级一丁点儿的管理工作:性能优化,故障诊断都无能为力。

图片图片

Pigsty 的监控系统便是为了解决这个问题而生的。Pigsty 提供了基于开源的 Grafana / Prometheus 现代可观测性技术栈做监控的最佳实践。整套系统同样被设计为一键拉起,开箱即用的 INFRA 模块。Pigsty 所管理的任何组件都会被自动纳入监控之中,包括主机节点,负载均衡 HAProxy,数据库 Postgres,连接池 Pgbouncer,元数据库 ETCD,KV 缓存 Redis,对象存储 MinIO,……,以及整套监控基础设施本身。大量的 Grafana 监控面板与预置告警规则会让你的系统观测能力有质的提升。

图片

Pigsty 提供的监控面板概览\

无论是故障分析还是慢查询优化、无论是水位评估还是资源规划,Pigsty 为您提供全面的数据支撑,真正做到数据驱动。在 Pigsty 中,超过三千类监控指标被用于描述整个系统的方方面面,并被进一步加工、聚合、处理、分析、提炼并以符合直觉的可视化模式呈现在您的面前。从全局大盘总览,到某个数据库实例中单个对象(表,索引,函数)的增删改查详情都能一览无余。您可以随意上卷下钻横向跳转,浏览系统现状与历史趋势,并预测未来的演变。

图片

对于现有的 PostgreSQL 数据库特别是 RDS 云数据库来说,虽然 Pigsty 拿不到主机监控数据,也没有高可用/连接池等组件的监控数据,也缺少原生的数据库日志。但能利用好 PostgreSQL 本身的监控指标,已经有着足够强大的力量了。

您可以查阅公开 Demo:https://demo.pigsty.cc 来了解 Pigsty 监控系统提供的能力。

使用 Terraform 申请 ECS 服务器

单机安装 Pigsty 需要一台 x86_64 ECS 云服务器,EL 7-9 操作系统(建议使用 Rocky 8.6/9.1),规格最小 1C2G。您可以直接在控制台上申请资源,或者使用 Pigsty 提供的 Terraform 模板一键完成资源申请与置备。默认配置会使用固定的 10.10.10.10 IP 地址与密码 PigstyDemo4,并分配一个公网 IP 以供访问。

图片图片

在 ECS 上完整安装单机版 Pigsty

登陆 ECS 后,可以通过以下命令完成 Pigsty 的单机安装

bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"   # 下载 Pigsty
cd ~/pigsty; ./bootstrap;                              # 提示下载离线软件包
./configure                                            # 配置 Pigsty
vi pigsty.yml  # 定制一些配置,比如修改各种密码
./install.yml  # 完成完整的单机安装,使用离线包完整安装约10分钟

Pigsty 的详细安装过程请参阅安装文档,整个过程耗时约十几分钟。

安装完成后,您可以通过 ECS 公网 IP 地址上的 3000 端口访问监控系统 Grafana,监控界面中会显示出完整的自我监控。例如本例中:http://59.110.161.154:3000/,默认用户名和密码为 admin / pigsty

图片

我们建议您使用域名/https 访问 Pigsty 的 Web 界面,注意在生产环境使用时,我们强烈建议您修改默认密码,并谨慎对公网暴露界面。

图片

配置 PolarDB / RDS PG 监控

PolarDB 的配置细节在此不再赘述,关键是要有一个给监控用户使用的连接串,可以从 ECS 上访问 PolarDB 主库 / 从库,并确保相关监控用户具有足够的读取权限,以及相关监控扩展已经完成安装。

  • 创建集群,确保 PolarDB 与 ECS 在同一个可用区/子网内,可以从 ECS 访问 PolarDB。
  • 创建集群账号:管理用户 dbuser_dba,高权限账号,用来对集群进行进一步的配置。
  • 添加集群访问白名单:将 ECS 内网 IP 地址 10.10.10.10 添加到集群白名单中。
  • 创建一个业务数据库,这里以 test 为例。

配置好数据库集群的账号、白名单、数据库之后,使用高权限管理用户连接至新创建的数据库

$ psql postgres://dbuser_dba:[email protected]:1921/postgres

使用高权限用户创建专用监控用户,当然您也可以在控制台创建。

图片

强烈建议安装 pg_stat_statements 扩展,它可以提供非常重要的关于查询的


将现有 PG 数据库接入监控

为了将 RDS for PostgreSQL 实例与 PolarDB 实例纳入监控,您需要将这些目标实例的身份信息与连接信息告诉 Pigsty。编辑 pigsty.yml 配置文件,在 all.children.infra.vars.pg_exporters 定义这些待监控的远程数据库实例,这是一个字典,Key 为唯一分配的本地监控组件端口号,Value 为目标实例的配置信息。

图片

这里,我们接入了一个一主一从的 PolarDB 集群,并将其命名为 pg-polar,一个基础版(单节点)的 RDS for PostgreSQL 实例并命名为 pg-rds,以及一个高可用版本并带有一个只读节点的 RDS 集群 pg-rdsha。其配置如下所示,并不是所有参数都是必须的,通常来说,只有 pg_clusterpg_seq,与 pg_hostpg_port,如果不是 5432) 是需要修改的,其他参数可以按需指定覆盖。

定义好这些配置选项后,您可以使用以下命令,将其纳入到 Pigsty 的监控系统中:

    bin/pgmon-add pg-polar
    bin/pgmon-add pg-rds
    bin/pgmon-add pg-rdsha

然后,您就可以在 Pigsty 监控系统中看到这三个新集群了。

图片

点击浅灰蓝色的集群名/实例名,即可跳转到对应集群/实例 PGRDS 监控面板上:

图片图片

点击浅灰蓝色的集群名/实例名,即可跳转到对应集群/实例 PGRDS 监控面板上:

首屏包含了最为关键的信息,集群实例成员,存活状态,数据库列表与导航,13 个核心监控指标。点击都可以展开更详细的信息。\

图片

在 PGRDS Cluster 与 PGRDS Instance 之间,可以方便地在图表元素上点击跳转,快速上卷下钻。

图片

同时,您依然可以复用 Overview / Database 层次的所有监控面板,查阅数据库内部的详细细节,比如每一类查询的 QPS / RT,或者每个表上的增删改查:

图片图片图片图片

Pigsty 的监控系统还允许您直接访问数据库的 Catalog (可选),从系统视图中查阅统计数据。例如锁等待 / TopSQL 等。

图片图片

更多监控系统的细节就不在此展开了,欢迎访问 Pigsty 文档Demo 在线体验。点击“查看原文”可访问 Bilibili 视频版教程。

如果您对 Pigsty 与 PostgreSQL 感兴趣,也欢迎微信搜索 pigsty-cc 添加 Pigsty 小助手,加入 PGSQL x Pigsty 交流群中。


发布版本:微信公众号

2.18 - Pigsty v2.4:监控云数据库

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

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

2.19 - Pigsty v2.3:丰富应用生态

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

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 的能力

ferretdb

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 权限即可。

ferretdb-monitoring

配置完成后,使用 ./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

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 来改变这一行为。

vip-config

L2 VIP 会自动被纳入监控中。当 MASTER 宕机后, BACKUP 会立即进行接管。

vip-failover

监控系统改进

Pigsty v2.2 基于 Grafana 10 对监控系统进行了彻底的翻新重制。v2.3 在 v2.2 的基础上进行了更多优化。

例如,新增的 NODE VIP 监控面板用于展示一个 VIP 的状态:所属集群/成员,网络RT,KA的状态等等等等。

node-vip-dashboard

上图展示了一个 L2 VIP 自动故障转移的现场监控:绑定在 3 节点集群 MinIO 上。当原本的 Master (.27)宕机后,(.26)立即完成接管。

同样的信息也被展示在 NODE 与 PGSQL 监控面板的关键位置:例如,Overview 的实例列表中,现在就会添加 VIP 的快速导航(紫色):

node-overviewpgsql-overview

同理,在 NODE Cluster 与 PGSQL Cluster 中也会在醒目处列出 VIP 与所有成员的 ICMP 可达性状态(Ping 网络延迟)。

node-cluster-pingpgsql-cluster-ping

此外,在 PGCAT 中新增了默认 1s 刷新的 PGCAT Locks 监控面板,可以直观的观察数据库当前活跃的情况,以及锁等待的情况。

pgcat-locks

锁等待会组织成一棵等待树,用 Level 与缩进标识层次。您可以选择不同的刷新率,最快每秒 10 次。

图片

在 REDIS 监控上,相关的监控面板也统一按照 PGSQL 与 NODE 的风格进行适配与调整:

redis-monitoring

更丝滑的构建流程

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,以及打包了所有软件的离线安装包:

download

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.ccdemo.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 名称后缀,默认为 .vip
  • NODE.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 and chown watchdog if patroni_watchdog_mode is required
  • pg_dbsu_sudo = limit and patroni_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

2.20 - Pigsty v2.2:监控全面翻新

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

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

color-scheme

监控系统重制:集群导航

当然除了配色,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 集群。

这个配置是中大型企业运行管理大规模数据库集群的参考样例,而您可以在单台物理服务器上用半个小时完整一键拉起。


更丝滑的构建流程

当您选择直接从互联网下载 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 and bin/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

2.21 - Pigsty v2.1:向量+PG全系支持!

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

随着 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 中,敬请期待。

pgvector

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-io

另外一个非常有价值的可观测性改进点是,pg_stat_all_tablespg_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逻辑解码插件 wal2jsonpglogical,定时任务插件 pg_cron,以及强制检查密码强度的插件 passwordcheck_cracklib ,确保每个大版本都可以享受到 PostgreSQL 生态的核心能力。

图片

PostgreSQL 11 其实也可以支持,但因为有一些扩展缺失,加之即将进入 EOL,所以就排除在本次更新中。对于新尝试 PostgreSQL 的用户,我们始终建议从最新的稳定大版本(目前为15)开始使用。如果您真的希望使用 10 或 11,也可以参照教程调整仓库中的软件包版本自行构建。

Grafana监控系统改进

随着 Grafana 版本升级至 v9.5.3 , 全新的导航栏,面板布局让 Pigsty 的监控系统 UI 也随之焕然一新。所有监控面板都根据新 UI 的特性进行了微调与适配,一些不和谐的样式问题也得到了修正。

grafana-ui

在 Pigsty 2.1 中引入了4个来自 volkovlabs 的 Grafana 扩展插件。使用 Grafana + Echarts 进行数据可视化与分析一直是 Pigsty 所倡导和支持的一个功能亮点,奈何作者精力有限,难以在这个方向投入资源。

在 v2.1 发布前,我很高兴看到一个由专人维护的 Apache Echarts 面板插件 —— 终于可以松一口气,让自己维护的 echarts panel 退休了。有一个专业的创业团队选择这个方向进行拓展,并开发出一系列实用的扩展插件。可以使用后端数据渲染 SVG 与文本的动态文本插件,提供表单提交功能的 Form 插件,动态数据日历插件,等等等等。

volkovlabs

此外,Pigsty 还专门添加了 echarts-gl 的扩展资源,放置于 Grafana public/chart 目录下,允许用户使用 Pigsty 自带的 Grafana,无需互联网访问即可实现出 Apache Echarts 官方文档库中炫酷的三维地球等面板。

其他便利工具的改进

在 Pigsty 2.1 中,添加了 3 个便利命令,profilevalidaterepo-add

bin/validate 命令接受一个配置文件路径作为输入,它用来检查验证 Pigsty 配置文件的正确性。常见的问题,例如在不同集群里错误写入了同一个 IP,一些配置项的名称,类型错误,都可以自动检查抛出,更不用说最常见的YAML缩进格式错误了。用户修改配置之后,可以使用 bin/validate 确保自己的修改是有效合法的。

bin/repo-add 命令用于手工调整节点上的 YUM 仓库。当用户想要往本地软件仓库添加一些新的软件包时,经常需要使用 Ansible 剧本的子任务来进行管理,较为不便,现在您可以使用包装的命令行工具来完成这一点:比如,bin/repo-add infra node,pgsql 就会向 infra 分组的节点上添加分类为 nodepgsql 的软件源。

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 都会被添加到远程机器上(例如椭圆曲线算法生成的密钥文件)

2.22 - 更好的开源RDS替代:Pigsty

原文发布于 VONNG

引子:Why Pigsty

省却废话,直接抛出问题:我们需要更好的数据库内核,还是用好数据库内核的能力?哪项需求更为紧迫?哪一项才是更稀缺的能力?

现有内核,已经足够完美。

换皮魔改,大家多靠 PG;

再卷内核,没有边际效益。

来回折腾,多是无聊把戏。

图片

为什么 PostgreSQL 是最成功的数据库?

用户对于数据库的需求,和马斯洛的需求金字塔一样,有不同的层次。内核解决的是生理需求然而很多更高层次的需求,是难以通过数据库内核 本身来解决的

图片

数据库用户需求金字塔

解决这些需求,有两条主流道路:开源自建,或使用云数据库。自建类似于买车自己开,上云好比滴滴打出租。云数据库 太贵,好 DBA 难雇。租车省事,弹性十足,奈何定价离谱杀猪盘;买车自驾,体验更好,但想找到老司机,可要花不少功夫。

图片

云数据库是不是杀猪盘

有没有一种办法能扬长避短,结合两者的优点。让用户在即使缺少数据库专家支持的情况下,也能达到顶尖 DBA 自建八成的水平?既保留云的便利与弹性,又能用几乎接近于纯硬件成本的价格运行生产级数据库服务,省掉 50% ~ 90% 的 RDS 溢价

女士们先生们,且看 Pigsty 2.0

Postgres in Great STYle

—— 全盛状态的 PostgreSQL

图片

Pigsty v2.0:更好的 RDS 开源替代

Pigsty 曾经是一个开箱即用的 PG 数据库发行版,但现在,它旨在提供一个本地优先,功能完备,开源免费的 RDS 上位替代,帮助用户用好世界上最先进的开源关系型数据库 PostgreSQL。

Pigsty 源于我们自己的需求 —— 用好管好 PostgreSQL。但是,当我们说“用好”时,到底指的是什么呢?下面我们将从八个具体的维度来展开聊一聊。Pigsty 如何帮助用户满足这些需求。

兑卦:可扩展性

坐落在需求金字塔最底层的是生理需求,对数据库来说生理需求就是功能可扩展性是 PostgreSQL 最大的王牌:PG 的功能可以通过插件的方式动态扩充,与时俱进。

图片

PostgreSQL 好处都有啥

PostgreSQL 是一个足够完美的数据库内核,但它需要更多工具与系统的配合,才能成为一个足够好的数据库服务,Pigsty 帮助 PG 完成这一步。

图片

Pigsty 是一个强力的数据库发行版,整合了 PG 生态中的各种组件与扩展:与外部数据源交互的 FDW,做变更数据捕获的 CDC,按需取用,玲琅满目。

特别是 PG 生态中最为强大的几个扩展插件,每一个都称得上是“独当一面”,拿出去随便包装一下,就可以当成一个全新的数据库,Pigsty 确保这些插件可以协同工作,提供一个开箱即用的分布式的时序地理空间向量数据库

图片

您可以使用 PostGIS 处理地理空间数据,一行 SQL 解决 KNN 最近邻查询问题。

图片

您也可以使用 TimescaleDB 处理时序数据,自动压缩/滚动保留,并使用持续聚集来处理流式事件。

图片

您也可以使用 Citus 将单机主从 PG 集群原地扩展为分布式数据库,在不阻塞业务的情况下对分片进行重新均衡。

图片

您也可以使用 PGVector 存储 AI 模型的 Embedding,高效执行向量最近邻搜索,为 AI 添加持久记忆的功能。

图片

除了扩展,Pigsty 更是提供了运行企业级 RDS 服务的所需基础设施软件,所有组件均可在无需互联网访问的情况下,一键完成安装部署,生产可用。

图片

在 Pigsty 中功能组件被抽象 模块,可以自由组合以应对多变的需求场景。INFRA 模块带有完整的现代监控技术栈,而 NODE 模块则将节点调谐至指定状态并纳入监控。在多个节点上安装 PGSQL 模块会自动组建出一个基于主从复制的高可用数据库集群,而同样的 ETCD 模块则为数据库高可用提供共识与元数据存储。可选的 MINIO 模块可以用作图像视频等大文件存储并可选用为数据库备份仓库。与 PG 有着极佳相性的 REDIS 亦为 Pigsty 所支持。

你也可以开发自己的模块并自行扩展 Pigsty 的能力,更多的模块(如GPSQL, MYSQL, KAFKA,MONGO)将会在后续加入,

图片

Pigsty 还提供了可选的 Docker 模块与大量开箱即用的 Compose 模板。您可以使用 Pigsty 管理的高可用 PG 作为后端存储,以无状态的模式一键拉起这些软件。如果您的软件需要一个靠谱的 PG 数据库,Pigsty 也许是最简单的获取方案

图片

更奇妙的是,您完全可以基于 Pigsty 内置的 Grafana 与 PG,Echarts,以低代码的方式,快速搭建起交互式的数据应用 Demo,并创造具有表现力的交互可视化作品。

图片

震卦:安全性

说完了功能可扩展性,让我们来聊一聊坐落在 RDS 需求金字塔第二层的需求 —— 安全安全需求与生理需求同属基础需求,一个用于生产环境的严肃数据库系统至少应当满足这两类需求,才足以称得上是合格

图片

很多土法自建的数据库都在这一需求层次里苦苦挣扎,而 Pigsty 可以帮您一步到位:加密备份一应俱全,只要硬件与密钥安全,您无需操心数据库的安全

每套 Pigsty 部署都会创建一套自签名的 CA 用于签发证书,所有的网络通信都 可以使用 SSL 加密 防止抓包窃听,确保系统的机密性

图片

针对 PG,Pigsty 提供了一套开箱即用的的访问控制体系,足以应对绝大多数应用场景下的安全需求。包括基本的职能分离 读/写/管理/ETL,以及配套的访问控制,确保默认配置便已 secure enough。

图片

针对软件缺陷或人为误操作造成的删表删库,Pigsty 提供了开箱即用的 PITR 时间点恢复能力,无需额外配置即默认启用。为完整性可用性兜底!

图片

无论是备份还是时间点恢复,都简单到毫无门槛,一条命令搞定所有。如果您觉得本地目录/磁盘空间受限,亦可使用专用的 MinIO 集群或 S3 对象存储服务,保留任意长的回溯期限。

图片

PITR,ACL,SSL,确保您的数据安然无忧。

艮卦:可靠性

RDS 需求金字塔的第三层是:归属/社交需求。这意味着数据库不再是单打独斗的一个光杆司令,主库拥有了自己的追随者分担工作,并有高可用系统在故障时能让备库接管工作。

图片

Pigsty 让高可用故障自愈成为 PG 的标配,基于 patroni,etcd,与 haproxy 打造的故障自愈架构,让您在面对硬件故障时游刃有余。在各行各业、大规模、长时间的生产运行,让这套架构的可靠性得到充分验证!

图片

Pigsty 可以通过自动故障切换来应对硬件故障,主库 Failover RTO 约为10 秒;一致性优先模式下,数据零损失 RPO = 0。这两个目标参数也可以根据您的实际情况进行调整与取舍。例如您觉得自己的网络质量非常好不会抖动,那么也完全可以将 RTO 设置为 1 秒钟。

图片

只要集群中有任意实例存活,PG 集群就可以对外提供完整的服务,而客户端只要连接至集群中的任意节点,即可访问完整的服务。经典主从数据库也能用出分布式数据库一样的体验。

图片

Pigsty 最大的部署案例是探探,有两万五千核的 PG 与 Redis 数据库,在三年间经历了数十次硬件故障与各类事故,但数据库依然可以长期保持 5 个 9 以上的可用性。此外,在军工航天、科研教学、金融电信、医疗互联网各行各业也有各种案例与应用

离卦:可维护性

图片

高可用架构把 PG 集群的可用性拔高到了一个全新高度,这也让数据库的维护不再痛苦。人生苦短,关爱运维,可维护性的需求,当然也归类为 爱与归属。\

Pigsty 非常在意用户的使用体验,谁是用户?各行各业的企业是我们的用户,但一线的 运维/研发/DBA,这些开发者才是 Pigsty 真正的用户。我们在可维护性上做了很多努力,打动用户靠的是实打实的产品能力

图片

正如前一节高可用中所述,Pigsty 在硬件故障时可以自动 Failover,让运维 DBA 能在晚上安心睡个好觉,第二天醒来再处理问题。当然 Pigsty 也可以主动进行 Switchover,主动切换 只有瞬间闪断;这将原本以分钟小时计的维护窗口,压低到秒级甚至亚秒级,为维护带来的极大便利。

Pigsty 可以监控现有 PG 实例,不论是 RDS 还是本地 PG;虽然纳管现有实例难度不低,但我们也自带迁移方案 无需业务停机,基于逻辑复制进行半自动迁移,流量切换甚至无需业务知悉。

图片

Pigsty 的安装更是极其简单,所有细节全靠一个配置清单。一条命令,就能在单机拉起,10 分钟不到即可生产 Ready。

此外 Pigsty 还有一个测试沙箱,用来开发演示或者研究学习。用 Vagrant + 虚拟机,一键在本地拉起。生产环境功能一模一样,配置最低只需要一 C 两 G。

图片

Pigsty 可以使用物理节点,也可以使用纯虚拟机。使用 Terraform,即可在云端一件拉起。使用样例配置文件,立刻就可以在阿里云/AWS 上一键拉起,部署所需的虚拟机,两分钟全部 Ready。

图片

Pigsty 为用户考虑到方方面面的管理细节,即便是新手对着 SOP,也能达到大师的六七成功力。

坎卦:可伸缩性

可靠与可维护性满足了 RDS 需求金字塔第三层 —— 爱与归属的需求。而金字塔的第四层则是尊重。对于数据库来说,安全可靠是本分,性能卓越才能出彩。

图片

Pigsty 确保 PG 的性能可以充分发挥,在相近硬件水平的 SYSBENCH 中,PG 性能表现冠绝群雄。

图片

PostgreSQL 到底有多强?

PGBENCH 单机点查 QPS 可达两百万,单机点写 QPS 可达七十万;性能怪兽,一台足矣

图片

单机单卡轻松干到几十 TB。在现代 NVMe SSD 加持下,很多“分布式”数据库,都失去了存在意义。你可以通过无限拖从库的方式扩展只读能力,或使用内置 Citus 扩展,水平扩展主库的写入能力。

图片

Pigsty 原生支持连接池,Pgbouncer 优化,轻松应对海量并发。

图片

四种场景,提供预制参数模板;参数调优,自动根据机器规格进行;

图片

滚动升级,使用 Switchover 轻松实现硬件升降配,流量控制,使用 HAPROXY 对负载进行精细化管理。

图片

巽卦:ROI 性价比

性能很重要,但性价比才是第一产品力再好的产品如果定价糊涂,也会体面尽失,一败涂地!

图片

云数据库就是最生动的案例,产品其实是不错的东西。尽管已经比 Oracle 这样的商业数据库便宜了一个数量级;但相比开源自建几倍到十几倍的离谱溢价,让上面的努力失去了大部分意义。

云算力贵吗?挺贵,比自建溢价几倍,但总体还说的过去。

图片

云存储贵吗?S3 对象存储不算太贵,但是,用来跑数据库的块存储,可以说价格突破天际!

图片

块存储是不是杀猪盘?

云数据库的定价模型工整的出奇,都是 EC2 价格乘以一个固定比例,当然云盘存储,通常单独计算处理。综上,云数据库相比开源自建,有着几倍到十几倍的溢价比例。

图片

以 64 核 512G 的机型为例,买一台用五年平均每年一万五,云上租一台每年几十万到一两百万,不到十几天的离谱租售比

图片

任何理智的企业用户都看得明白这里面的道理如果采购这种服务不是为了短期的,临时性的需求,那么绝对算得上是重大的财务失当行为。

Pigsty 可以立竿见影地帮助用户省钱,探探就是一个最直观的案例,规模 1 万 3 千核的 PG 数据库。这样的数量级,即使折扣拉满,阿里云数据库便宜点也要六七千万,如果使用使用 AWS RDS 大概两三亿。使用 Serverless WCU 计费更为离谱,能直接干到和 Oracle 一样的十亿数量级。

图片

但是用 Pigsty 开源自建。四个 DBA 含工资,每年一千万不到的成本,就能维护好两万五千核的数据库。Pigsty 可以帮助探探做到这一点,自然也可以帮助更多企业完成这个过程。

图片

如果用云服务器而不是 IDC 代维自建,使用 Pigsty 也能节省 RDS 和 ECS 中的差价,立竿见影节省一半成本起步,还是在不损失云的弹性前提下。

图片

乾卦:可观测性

可靠、可维护、可伸缩、性价比高的 RDS 服务,可以称得上是体面的数据库服务,而想要做到有品味,还需要可观测性可控制性的加持。RDS 需求金字塔的第五层是认知需求一个数据翔实的可观测系统能将数据库的治理水平拔高到一个全新高度

图片

有些事情,是人有我优,人优我廉。但是对于可观测性来说,Pigsty 可以骄傲的说,这是人无我有。Pigsty 诞生的原因就是因为全世界都找不出一个能打的监控,所以我们才自己动手,正所谓甲方会武术,谁也挡不住

图片

Pigsty 提供了基于开源的 Grafana / Prometheus 可观测性技术栈做监控的最佳实践:Prometheus 用于收集监控指标,Grafana 负责可视化呈现,Loki 用于日志收集与查询,Alertmanager 用于告警通知。PushGateway 用于批处理任务监控,Blackbox Exporter 负责检查服务可用性

图片

可以说,PostgreSQL 的可观测性数据全部被 Pigsty 收录囊中,总计 3000 多类的数据指标,将成为数字化,智能化的基础养料。更难得的是,这些指标数据会被加工、聚合、处理、分析、提炼、浓缩并以符合直觉的可视化模式呈现在您的面前。

图片

无论是故障分析还是慢查询优化、无论是水位评估还是资源规划,Pigsty 的监控系统为您提供全面的数据支撑,真正做到数据驱动。从全局大盘总揽,到某个数据库实例中单个对象(表,索引,函数)的增删改查详情都能一览无余。您可以随意上卷下钻横向跳转,浏览系统现状与历史趋势,并预测未来的演变。

图片

我们以 BI 的方式,从指标日志中提取洞察,构建上下文环境用于问题分析。我们提供了一个公开的 Demo 站点,展示此监控系统的能力, http://demo.pigsty.cc

图片图片图片图片

坤卦:可控制性

RDS 需求金字塔的第六层是审美需求。对于数据库来说,这意味着可观测性的对偶属性:可控制性。以一种优雅的方式进行控制与管理:Infrastrcuture as Code。

图片

Pigsty 将 IaC 拔高到新的高度,即 Database as Code。不像 RDS 还需要使用 Terraform 这样的工具来曲线救国,您可以用声明式的配置来管理部署各种组件。传统的运维方式关注过程,要创建/销毁/扩缩容数据库集群,用户需要按照手册依次执行各种命令;而现代管理方式关注状态,用户声明式的表达自己想要什么,而系统自动调整至用户所描述的状态。

图片

您可以使用 Terraform,声明式地管理基础 IaaS 资源;使用 Pigsty,声明式地管理 RDS 集群;可以使用内置的 Bytebase,声明式地去管理数据库内的对象。

图片

对真正有品位、有追求的工程师来说,在 GUI 鼠标点点是驴粪蛋表面光,如果您只有一两套数据库,也许 ClickOps并没有问题,但对于一个大规模生产环境的管理来说,IaC 才是最佳实践硬道理。像前文提到的高可用 3 节点数据库,只需要 10 行不到的描述。

图片

您可以用同样的方式完成 主从,集群,Sentinel 的 Redis 集群部署。

图片

您可以一键创建多节点的 ETCD 集群,为 PG 集群提供高可用的 DCS 服务

图片

也可以轻松部署分布式 MinIO 集群,作为可选的集中式数据库备份仓库

图片

5 节点 HA Citus 分布式数据库集群,配置依然非常简单。

图片

您也可以深度定制 DB 内容与业务用户,200+可深度定制的参数,足以满足最龟毛的 DBA 的定制服务。

尽管这里有这么多的配置参数,但你也无需感到恐慌打怵。部署一个单机数据库,只有 4 个必选身份参数。想要添加定时备份任务?一行 Crontab 定义,一条命令完成部署!

图片

想要扩容一台只读从库,添加一行配置就能满足。

图片

想要启用同步提交,没有复制延迟的从库,并对外暴露同步读取服务,也只需要一个参数。

图片

Pigsty 默认会使用 HAPROXY 分发流量,但你依然可以为集群绑定一个 VIP 避免 LB 单点。而这所需的也不过是 VIP 地址与网卡名参数。

图片

你还可以 Fork 现有集群,搭建异地灾备集群甚至延迟从库。一旦出现各种失误,你可以快速从延迟从库中恢复。如何创建延迟从库?三行配置,一个 UPstream 参数。

图片

小结:更好的 RDS 替代

刚才我们逐层递进介绍了需求金字塔,概括起来也就不过就是四句话:人无我有,人有我优,人优我易,人易我廉。这里我们的参照对象是云 RDS。

图片

尽管阿里腾讯最近也有可用区也爆出来了大故障,但在基本的功能安全可靠需求上,云数据库做的并不赖。尽管用的是网络存储云盘,但性能也算说得过去;更是在弹性/Serverless 上更是卷出了全新高度,只可惜因为十几倍的杀猪定价让 ROI 跌破谷底,显得不那么体面。更重要的是,在更高层面上的功能几乎是一片空白,用户需求无从满足

图片

我们的目标不仅仅是做一个 RDS 的开源替代。云 RDS 有的我们都会有,更重要的是,云 RDS 没有的,我们也会有而且我们要做的更好,让开源免费的软件,在各方面吊打商业付费的 RDS 服务

Pigsty —— 让天下没有难用的数据库!谢谢大家。

References


发布版本:微信公众号

2.23 - 炮打 RDS,Pigsty v2.0 发布

原文发布于 VONNG

图片

大家好,Pigsty 的作者冯若航。

我相信在座的不少人都对我比较熟

因此我就实打实给大家透个

这两天社区嘉宾聚在一起喝大酒,

所以很抱歉今天临时赶工 PPT

给大家贡献一段数据库脱口秀的把


所以如果出现嘴炮误伤,

请台下的各位 友商 不要着

因为有可能,我真的就是故意

今天给大家带来的分享主题,

不出意料是告别 Pigsty V1。

我们将在此时隆重发布 2.0 版本!

为云数据库带来本地优先的开源平


PGSQL 已经是足够完美的数据库内核引擎发动

业界需要的不是魔改换皮的无聊把

用户不需要更多同质化的数据库内核,

稀缺的是把现有内核真正用好的能


造车厂的工程师,不会不自量

认为自己开起赛车来,比舒马赫还要牛

能干好这件事的,数据库内核原厂没戏

只能靠资深甲方用户的 DBA 老司


想找能用好开源数据库的老师

太稀缺金贵还真要下不少功

所以也因此出现了云数据

提供帮助用户用好数据库内核的服


云数据库本应走一条体体面面的大

用共享规模效应压低成本,提供更廉价的服

奈何他们选择了一条恰烂钱的死

不思进取,只想使用大锅饭的水平糊弄用

更可恶的是把 20 块钱的硬件卖出十几倍天价,

利用信息不对称对用户进行


v2 版本的 Pigsty,旨在改变这种状

提供本地优先、好用又开源的 RDS PG 替

PIGSTY 的缩写全称,是 PG in GREAT STYLE

意思就是:让 PG 进入全盛状


Pigsty 让您在缺乏数据库专家的情况下,

也有能力自助管理企业级数据库服

您可以使用几分之一的硬件成本价格,

运行生产级的 PostgreSQL RDS 服

Pigsty 使用 AGPLv3 完全开源彻底免

无需向云厂商缴纳价格高昂的 “无专家”。

即使您真的没有专

也无需对数据库感到害

我们有免费社区热心答

也提供商业订阅兜


说了这么多引子,终于迎来今天分享的正主。

v2 版本的 Pigsty,从 开箱即用的数据库发行版 变为

本地优先的 RDS PG 开源上位替


有一些人,喜欢使用各种时髦词汇吹牛

HTAP、存算分

Serverless,湖仓一.

可惜技术名字对用户来说没有意

甲方在意的是各种实打实的 X-ability

Observability & Controllability;Reliability & Extensibility;

Scalability & Maintainability,以及 Simplicity,and Security

当然有些用户会看 niubility

就是你讲故事吹牛逼的能

表过不,还是看你实打实解决痛点痒点问题的能

可观测性,可控制性;可靠性,可扩展性;

可伸缩性、可维护性、简单性、安全性。

那么 Pigsty 在这些性上,又有如何的表现


**可观测性(Observability)**是天;

乾卦,天行健,君子以自强不息;Pigsty 使用现代可观测性技术栈为 PostgreSQL 打造了一款无与伦比的监控系统,让用户对系统能够做到洞若观火,进而掌控一切。

**可控制性(Controllability)**是地;

坤卦,地势坤,君子以厚德载物;Pigsty 提供 Database as Code 的能力:使用表现力丰富的声明式接口描述数据库集群的状态,让用户拥有精细定制的能力的同时又无需操心实现细节,让数据库操作与管理的门槛从专家级降低到新手级。

**可伸缩性(Scalability)**是水;

坎卦,水洊至习坎,君子以常德行;Pigsty 可以针对环境自动优化参数,确保 PostgreSQL 的性能可以在现代硬件条件下充分发挥:单机可达数万并发连接/百万级单点查询 QPS/几十万级点写入 TPS。

**可维护性(Maintainability)**是火;离卦,明两作离,·大人以继明照于四方;Pigsty 允许在线摘除添加实例以扩缩容,Switchover/滚动升级进行升降配,提供基于逻辑复制的不停机蓝绿部署迁移方案,将系统对维护窗口的需求压缩至亚秒级。

**安全性(Security)**是雷;震卦,洊雷震,君子以恐惧修省;Pigsty 提供了一套遵循最小权限原则的访问控制模型,并带有各种安全特性开关:流复制同步提交防丢失,数据目录校验和防腐败,网络流量 SSL 加密防监听,远程备份 AES-256 防泄漏。让用户不再操心数据库安全性的问题。

**简单性(Simplicity)**是风;巽卦,随风巽,君子以申命行事;使用 Pigsty 的难度不会超过任何云数据库,它旨在以最小的复杂度成本交付完整的 RDS 功能,模块化设计允许用户自行组合选用所需的功能。Vagrant 与 Terraform 一键安装部署,完整复刻环境。

**可靠性(Reliability)**是山;艮卦,兼山艮,君子以思不出其位;Pigsty 提供了故障自愈的高可用架构应对硬件问题,也提供开箱即用的 PITR 时间点恢复为人为删库与软件缺陷兜底,并通过长时间、大规模的生产环境运行与高可用演练验证其可靠性。

**可扩展性(Extensibility)**是泽:兑卦,丽泽兑,君子以朋友讲习;Pigsty 深度整合 PostgreSQL 生态三大核心扩展 PostGIS、TimescaleDB、Citus、以及大量扩展插件;还有完整的 Prometheus / Grafana 全家桶,以及 MINIO,ETCD,Redis、Greenplum 等组件的监控与高可用部署,来与 PostgreSQL 配合使用;


Freestyle 了这么久,也请让窝喘口,抽取六个亮点特性来加深记

Pigsty v2 正式发布:更好的 RDS PG 开源替代

(念稿时间)


Pigsty —— 让天下没有难用的数据库。

整合 PG 生态,海量软件一键拉起,开箱即用,让用户用得

无可比拟的可观测性,数据库看得见摸得着,让用户用的

一键安装部署扩缩容,傻瓜式操作/量产 DBA,让用户用着省

自动驾驶的高可用架构,故障自愈,删库兜底,让用户用着放

最重要的是,好用又开源,实打实省钱,降维打击云数据

用云服务器的,耕云数据库的田,立省一半开销!

若是自建机房部,砍掉八成都打不


我们出售订阅,提供服

但真正想做的是,颠覆云数据

One is enough to change the game!

云吃开源,谁来吃云?还看 Cloud Native!️

这是从云厂商 夺回软件自由的 伟大运动,

而其图景还缺少最后一块拼

我们将抢占这一空白生态位,从 PG 开始,补全这块拼


发布版本:微信公众号

2.24 - Pigsty v2.0:开源RDS PG替代

原文发布于 VONNG

GitHub Release | 发布注记

Pigsty v2.0:开源 RDS PG 替代

2023/02/28Pigsty v2.0.0 正式发布,带来了一系列重大的功能更新。

现在 PIGSTY 是 “PostgreSQL In Great STYle"的首字母缩写,即”全盛状态的 PostgreSQL"。而 Pigsty 的定位也不再是 “开箱即用的 PostgreSQL 数据库发行版”,变成了 “Me Better 开源 RDS PG 替代”。

明人不说暗话,这是一个很有野心的目标:推翻云数据库垄断,砸烂 RDS 的饭碗!详见:《云数据库是不是智商税?

intro

2.0 新特性

Pigsty 是一个 更好的、本地优先 的,开源 RDS for PostgreSQL 替代。

features

强力的发行版

彻底释放世界上最先进的关系型数据库的力量!

PostgreSQL 是一个足够完美的数据库内核,但它需要更多工具与系统的配合,才能成为一个足够好的数据库服务(RDS),而 Pigsty 帮助 PostgreSQL 完成这一步飞跃。

Pigsty 深度整合了 PostgreSQL 生态的三大核心扩展插件 PostGISTimescaleDBCitus,并确保它们可以协同工作,提供分布式的时序地理空间数据库能力。Pigsty 还提供了运行企业级 RDS 服务的所需软件,打包所有依赖为离线软件包,所有组件均可在无需互联网访问的情况下一键完成安装部署,进入生产可用状态。

在 Pigsty 中功能组件被抽象 模块,可以自由组合以应对多变的需求场景。INFRA 模块带有完整的现代监控技术栈,而 NODE 模块则将节点调谐至指定状态并纳入监控。在多个节点上安装 PGSQL 模块会自动组建出一个基于主从复制的高可用数据库集群,而同样的 ETCD 模块则为数据库高可用提供共识与元数据存储。可选的 MINIO 模块可以用作图像视频等大文件存储并可选用为数据库备份仓库。与 PG 有着极佳相性的 REDIS 亦为 Pigsty 所支持,更多的模块(如 GPSQL, MYSQL, KAFKA)将会在后续加入,你也可以开发自己的模块并自行扩展 Pigsty 的能力。

modules

惊艳的观测能力

使用现代开源可观测性技术栈,提供无与伦比的监控最佳实践!

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

observability

久经考验的可靠性

开箱即用的高可用与时间点恢复能力,确保你的数据库坚如磐石!

对于软件缺陷或人为误操作造成的删表删库,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% 以上的整体可用性。

reliability

简单易用可维护

Infra as Code,数据库即代码,声明式的 API 将数据库管理的复杂度来封装。

Pigsty 使用声明式的接口对外提供服务,将系统的可控制性拔高到一个全新水平:用户通过配置清单告诉 Pigsty “我想要什么样的数据库集群”,而不用去操心到底需要怎样去做。从效果上讲,这类似于 K8S 中的 CRD 与 Operator,但 Pigsty 可用于任何节点上的数据库与基础设施:不论是容器,虚拟机,还是物理机。

无论是创建/销毁集群,添加/移除从库,还是新增数据库/用户/服务/扩展/黑白名单规则,您只需要修改配置清单并运行 Pigsty 提供的幂等剧本,而 Pigsty 负责将系统调整到您期望的状态。用户无需操心配置的细节,Pigsty 将自动根据机器的硬件配置进行调优,您只需要关心诸如集群叫什么名字,有几个实例放在哪几台机器上,使用什么配置模版:事务/分析/核心/微型,这些基础信息,研发也可以自助服务。但如果您愿意跳入兔子洞中,Pigsty 也提供了丰富且精细的控制参数,满足最龟毛 DBA 的苛刻定制需求。

除此之外,Pigsty 本身的安装部署也是一键傻瓜式的,所有依赖被预先打包,在安装时可以无需互联网访问。而安装所需的机器资源,也可以通过 Vagrant 或 Terraform 模板自动获取,让您在十几分钟内就可以从零在本地笔记本或云端虚拟机上拉起一套完整的 Pigsty 部署。本地沙箱环境可以跑在 1 核 2G 的微型虚拟机中,提供与生产环境完全一致的功能模拟,可以用于开发、测试、演示与学习。

maintainability

扎实的安全性

加密备份一应俱全,只要硬件与密钥安全,您无需操心数据库的安全性。

每套 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,但亦提供安全开关便于您在需要时开启。合理配置的系统通过等保三级毫无问题,只要您遵循安全性最佳实践,内网部署并合理配置安全组与防火墙,数据库安全性将不再是您的痛点。

security

广泛的应用场景

使用预置的 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 面板创造更有表现力的交互可视化作品。

applications

开源免费的自由软件

Pigsty 是基于 AGPLv3 开源的自由软件,由热爱 PostgreSQL 的社区成员用热情浇灌

Pigsty 是完全开源免费的自由软件,它允许您在缺乏数据库专家的情况下,用几乎接近纯硬件的成本来运行企业级的 PostgreSQL 数据库服务。作为对比,公有云厂商提供的 RDS 会收取底层硬件资源几倍到十几倍不等的溢价作为 “服务费”。

( 参考阅读:为什么说云数据库是杀猪盘

很多用户选择上云,正是因为自己搞不定数据库;很多用户使用 RDS,是因为别无他选。我们将打破云厂商的垄断,为用户提供一个云中立的,更好的 RDS 开源替代:Pigsty 紧跟 PostgreSQL 上游主干,不会有供应商锁定,不会有恼人的 “授权费”,不会有节点数量限制,不会收集您的任何数据。您的所有的核心资产 —— 数据,都能"自主可控",掌握在自己手中。

Pigsty 本身旨在用数据库自动驾驶软件,替代大量无趣的人肉数据库运维工作,但再好的软件也没法解决所有的问题。总会有一些的冷门低频疑难杂症需要专家介入处理。这也是为什么我们也提供专业的订阅服务,来为有需要的企业级用户使用 PostgreSQL 提供兜底。几万块的订阅咨询费不到顶尖 DBA 每年工资的几十分之一,让您彻底免除后顾之忧,把成本真正花在刀刃上。当然对于社区用户,我们亦用爱发电,提供免费的支持与日常答疑。

opensource

2.0 快速上手

Pigsty 2.0 的安装依然是一条命令搞定所有:

curl -fsSL http://download.pigsty.cc/get | bash
install

如果互联网访问受限,您可以提前从 Github 或 CDN 下载对应操作系统的离线软件包进行离线安装。监控系统部分提供公开的 Demo:http://demo.pigsty.cc

demo

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 用于批处理任务指标。
    • lokipromtail 现在使用 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,或使用 Chrome thisisunsafe
  • 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|europe
  • INFRA.META.os_version : 企业版 Linux 发行版本:7,8,9
  • INFRA.CA.ca_cn : CA 通用名称,默认为 pigsty-ca
  • INFRA.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 比率,默认禁用,值为 0
  • NODE.HAPROXY.haproxy_service : 要公开的 haproxy 服务列表
  • PGSQL.PG_ID.pg_mode : pgsql 集群模式:pgsql,citus,gpsql
  • PGSQL.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,默认为 SSD
  • PGSQL.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 数据库,默认为 postgres
  • PGSQL.PG_BOOTSTRAP.pg_max_conn : postgres 最大连接数,auto 将使用推荐值
  • PGSQL.PG_BOOTSTRAP.pg_shmem_ratio : postgres 共享内存比率,默认为 0.25,范围 0.1~0.4
  • PGSQL.PG_BOOTSTRAP.pg_rto : 恢复时间目标,故障转移的 ttl,默认为 30s
  • PGSQL.PG_BOOTSTRAP.pg_rpo : 恢复点目标,默认最多丢失 1MB 数据
  • PGSQL.PG_BOOTSTRAP.pg_pwd_enc : 密码加密算法:md5|scram-sha-256
  • PGSQL.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-full
  • PGSQL.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 或 minio
  • PGSQL.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 ip
  • ETCD.etcd_seq : etcd 实例标识符,必需
  • ETCD.etcd_cluster : etcd 集群和组名称,默认为 etcd
  • ETCD.etcd_safeguard : 防止清除正在运行的 etcd 实例吗?
  • ETCD.etcd_clean : 在初始化期间清除现有的 etcd 吗?
  • ETCD.etcd_data : etcd 数据目录,默认为 /data/etcd
  • ETCD.etcd_port : etcd 客户端端口,默认为 2379
  • ETCD.etcd_peer_port : etcd 对等端口,默认为 2380
  • ETCD.etcd_init : etcd 初始集群状态,新建或已存在
  • ETCD.etcd_election_timeout : etcd 选举超时,默认为 1000ms
  • ETCD.etcd_heartbeat_interval : etcd 心跳间隔,默认为 100ms
  • MINIO.minio_seq : minio 实例标识符,必须参数
  • MINIO.minio_cluster : minio 集群名称,默认为 minio
  • MINIO.minio_clean : 初始化时清理 minio 吗?默认为 false
  • MINIO.minio_user : minio 操作系统用户,默认为 minio
  • MINIO.minio_node : minio 节点名模式
  • MINIO.minio_data : minio 数据目录,使用 {x…y} 来指定多个驱动器
  • MINIO.minio_domain : minio 外部域名,默认为 sss.pigsty
  • MINIO.minio_port : minio 服务端口,默认为 9000
  • MINIO.minio_admin_port : minio 控制台端口,默认为 9001
  • MINIO.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_connectionslog_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 用于存储 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

发布版本:微信公众号

2.25 - Pigsty 2.0 展望

原文发布于 VONNG

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

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

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

图片

亮点

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

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

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

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

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

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

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

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

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

META

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

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

CA

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

REPO

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

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

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

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

DCS

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

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

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

Node

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

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

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

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

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

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

PostgreSQL

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

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

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

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

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

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

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

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

Patroni

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

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

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

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

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

Pgbouncer

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

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

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

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

Pgbackrest

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

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

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

Promtail

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

Makefile

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

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

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

Deploy

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

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

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

Packages

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

  • PostgreSQL 14.5 / PostgreSQL 15.0

  • Patroni 2.1.4

  • Pgbouncer 1.17

  • HAProxy 2.6.6

  • PostGIS 3.3

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

  • TimescaleDB 2.8

  • Prometheus 2.39

  • Loki & Promtail 2.6.1

  • Grafana 9.2.3

  • Node Exporter 1.4

  • Consul v13.3

  • ETCD 3.5.5

Misc

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

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


发布版本:微信公众号

2.26 - Pigsty v1.5:Docker应用支持,基础设施自监控

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty v1.5 正式发布!完整的 Docker 支持带来了丰富的应用生态,无数使用数据库的软件均可 开箱即用

其他改进包括:基础设施自我监控、更好的冷备份支持、兼容 Redis 与 Greenplum 的新 CMDB、ETCD 作为高可用 DCS、更好的日志收集与呈现。Github Star 突破 500!


亮点特性

特性 说明
Docker 支持 管理节点默认启用,提供丰富的开箱即用软件模板
基础设施自监控 Nginx、ETCD、Consul、Prometheus、Grafana、Loki
CMDB 升级 支持 Redis/Greenplum 集群元数据,配置可视化
服务发现改进 Consul 自动发现监控对象,纳入 Prometheus
冷备份增强 默认定时备份任务,pg_probackup,一键延迟从库
ETCD 作为 DCS PostgreSQL/Patroni 的 Consul 备选方案
Redis 改进 支持单实例级别的初始化与移除操作

Docker 支持

Pigsty v1.5 中最重要的特性莫过于 Docker 支持。无数软件与工具都可以通过 Docker 方式开箱即用:开箱即用的数据库 + 开箱即用的应用 = 开箱即用的软件解决方案

很多软件都需要用到数据库,但数据库放入容器中仍然是一个充满争议的话题。基于 Docker 镜像的玩具数据库与生产级数据库之间存在巨大差距。Pigsty 可以将两者的优势融合:有状态的数据库使用 Pigsty 管理,运行于标准的物理机或虚拟机上(如 PostgreSQL 与 Redis);而无状态的应用使用 Docker 运行,这些应用的状态存储在 Pigsty 托管的外部数据库中。

在 Pigsty v1.4.1 中,Docker 作为实验特性被加入;在 v1.5 中,Docker 将作为 Pigsty 的默认组件,在管理节点上默认启用。普通节点默认关闭,但可以通过配置项在所有节点上启用 Docker。


应用生态

Docker 本身只是工具,重要的是 Docker 所代表的巨大 应用生态

Pigsty 挑选了一些常用软件,特别是那些使用 PostgreSQL 与 Redis 的软件,制作了一键拉起的教程与快捷方式,并提供可以离线使用自动加载的镜像软件包 docker.tgz

代码托管平台 Gitea

如果需要启动一个私有的代码托管服务,可以使用以下命令一键拉起 Gitea:

cd ~/pigsty/app/gitea; make up

该命令将使用 Docker Compose 配置文件拉起 Gitea 镜像,并使用外部 Pigsty 默认的 CMDB pg-meta.gitea 作为元数据存储。访问配置文件指定的域名或端口,即可访问自己的代码托管服务。

数据库管控平台 PgAdmin

PgAdmin4 是老牌的 PostgreSQL 管控工具,提供了很多实用功能。Pigsty 提供了最新的 6.9 版本 PgAdmin4 支持,只需一行命令即可启动镜像,并自动加载 Pigsty 中所有托管数据库实例列表。

cd ~/pigsty/app/pgadmin; make up; make conf

模式变更工具 Bytebase

Bytebase 是一款为 PostgreSQL 设计的模式变更管理工具,采用 Git 工作流、工单审批的方式来对数据库模式进行版本控制。Bytebase 本身的元数据也使用 PostgreSQL 存储。

cd ~/pigsty/app/bytebase; make up

网页客户端 PGWEB

有时用户想使用个人账号从生产数据库中小批量查询数据,这时基于浏览器的 PostgreSQL 客户端会很好用。PGWEB 可以部署在管理节点或专用堡垒机上,设置特定的 HBA 规则来允许个人用户查询生产只读实例。

cd ~/pigsty/app/pgweb; make up

对象存储 MinIO

对象存储是云厂商提供的基础服务,在私有部署条件下,可以使用 MinIO 快速搭建自己的对象存储。它可以用于存储文档、图像、视频、备份,自动进行冗余备份与容灾,并对外提供标准的 S3 兼容 API。

cd ~/pigsty/app/minio; make up

在 MinIO 的基础上,可以进一步使用 JuiceFS,将对象存储提供的大规模分布式存储转换为文件系统,供其他服务使用。


数据分析环境 Jupyter

Pigsty 提供了趁手的数据分析工具:Jupyter Lab,可以使用 Python 与 SQL 进行组合数据处理与分析。Jupyter Lab 默认并不是通过 Docker 启动,而是由管理节点受限的操作系统用户直接运行,以便于与数据库交互。

数据库模式报表 SchemaSPY

当需要生成某个数据库模式的详情报表时,可以使用 SchemaSPY:

bin/schemaspy 10.10.10.10 meta pigsty

数据库日志分析报表

当需要查阅数据库日志的汇总摘要信息时,可以使用 Pgbadger:

bin/pglog-summary 10.10.10.10

更多应用

此外,还有很多知名的软件应用都可以使用 Pigsty + Docker 一键拉起:

应用 说明
Gitlab 使用 PG 的开源代码托管平台
Habour 使用 PG 的开源镜像仓库
Jira 使用 PG 的开源项目管理平台
Confluence 使用 PG 的开源知识托管平台
Odoo 使用 PG 的开源 ERP
Mastodon 基于 PG 的社交网络
Discourse 基于 PG 与 Redis 的开源论坛
KeyCloak 开源 SSO 单点登录解决方案

更好的冷备份

数据故障大体可以分为两类:硬件故障/资源不足(坏盘/宕机)和 软件缺陷/人为错误(删库/删表)。基于主从复制的物理复制用于应对前者,延迟从库与冷备份通常用于应对后者。因为误删数据的操作会立刻被复制到从库上执行,所以热备份与温备份都无法解决诸如 DROP DATABASEDROP TABLE 这样的错误,需要使用 冷备份延迟从库

在 Pigsty v1.5 中,对冷备份机制进行了改善:

  • 添加了定时任务机制,每天制作全量冷备份
  • 改善了延迟从库的创建机制,只需声明即可自动创建
  • 对于专家用户,提供了 pg_probackup 作为备份解决方案
  • 内置的 MinIO Docker 镜像将为后续的开箱即用异地灾备中心奠定基础

定时任务

Pigsty v1.5 支持为节点配置定时任务,包括追加与覆盖 /etc/crontab 两种模式。可以将制作基础物理冷备份、日志分析、模式转储、垃圾回收、分析统计任务以统一的、声明式的方式管理起来。

其中最重要的是默认在每天凌晨 1 点制作一个全量备份。加上 Pigsty 默认自带的最近一天 WAL 日志归档,可以将数据库恢复至 1 天内的任意状态,为软件缺陷、人为故障导致的删库删表提供了有力的兜底。

延迟从库

在 Pigsty v1.5 中,创建延迟从库不再需要手工执行 patronictl edit-config 调整集群配置,只需像下面这样声明,即可为集群创建一个延迟从库(集群)。


CMDB 兼容性改进

Pigsty 有一个可选的 CMDB,允许用元节点上的默认 PostgreSQL 数据库存储配置,而不是默认的配置文件 pigsty.yml

Pigsty CMDB 最早于 0.8 版本引入,当时只是为了支持 PostgreSQL 而设计。当 Pigsty 开始支持 Redis、Greenplum 以及更多种类的数据库时,原有设计开始显得不合时宜。因此在 Pigsty v1.5 中,对 CMDB 进行了重新设计。

只要使用 bin/inventory_load 即可将当前使用的配置文件加载入 CMDB 中,使用 bin/inventory_cmdb 切换为 CMDB 模式。使用 CMDB 时,可以直接通过 Grafana 的 CMDB Overview 面板查阅可视化的配置清单:

可以从 CMDB Overview 中看到 PostgreSQL、Redis 以及 Greenplum/MatrixDB 集群的成员信息。

可以直接通过 SQL 来调整配置,也可以通过 PostgREST 暴露的 API 来调整配置,例如创建新的集群、扩容缩容等。

PostgREST 是一个自动根据 PostgreSQL 数据库模式生成 REST API 的二进制组件,打包在 Pigsty v1.5 自带的 Docker 镜像包中。

cd ~/pigsty/app/postgrest; make up

它还可以通过 Swagger OpenAPI Spec 自动生成 API 的定义,并使用 Swagger Editor 暴露 API 文档,生成不同编程语言的客户端存根。

PostgREST 不仅仅可以用来暴露 CMDB 的增删改查接口。如果已经有了一个设计得当的数据库模式,那么使用 PostgREST 可以立即构建出一个后端 REST API 服务,无需手工编写繁琐重复的增删改查逻辑,复杂的逻辑可以通过存储过程对外暴露。

如果需要更强大的 API 支持,可以考虑 API 网关 Kong。它可以让任何已有 API 变成功能完备的接口服务,为 API 启用多种认证签名机制,自动记录日志,设置 Trace,进行限流与容灾。Kong 基于 Nginx + Lua(OpenResty)实现,使用 PostgreSQL 与 Redis 存储元数据:

cd ~/pigsty/app/kong; make up

基础设施监控

在 Pigsty v1.5 中,基础设施本身的监控进行了重大改进:INFRA 和 NODES、PGSQL、REDIS 现在采用一样的管理模式。基础设施通过 infra_register 角色完成自身的服务注册,将自己添加到 Prometheus 的监控对象中。Grafana 中相应添加了监控面板。

Pigsty v1.5 的 Home 监控中,基础设施作为嫩绿色的组件,与 NODES、REDIS、PGSQL 采用同种方式列入 Instance 中。此外,Infra 服务也会注册至 Service Registry(Consul),并可通过服务发现自动管理。

INFRA Overview 提供了所有基础设施组件基本状态与快速导航

Prometheus Overview:时序数据库自监控

Grafana Overview:监控面板自监控

Loki Overview:日志收集组件自监控


ETCD 作为 DCS

在 Pigsty v1.5 中,可以使用 ETCD 作为 Consul 的替代,用于 PostgreSQL 数据库高可用所需的 DCS。

与 Consul 相比,ETCD 少了服务发现、内建 DNS、健康检查以及开箱即用的 UI,但是 ETCD 无需 Agent 部署简单,依托 Kubernetes 生态的流行度更高,比 Consul 少一个失效点,更好的指标可观测性。

只需指定 pg_dcs_type: etcd,即可使用 ETCD 作为 DCS。此外,可以同时使用 Consul 与 ETCD,两者并行不悖:例如使用 ETCD 作为 DCS,而使用 Consul 进行服务发现。

Pigsty v1.5 针对 ETCD 与 Consul 进行了开箱即用的监控面板:DCS Overview

目前 ETCD 作为 DCS 属于最小可用功能实现,并没有添加 CA 证书与 TLS 支持,将在后续版本安全性加固专项中补充。


更好的日志收集与呈现

在 Pigsty v1.5 中,默认为每一个上游服务启用单独的访问日志,所有字段均由 Loki 解析,可以直接进行分析。如果有网站挂在 Pigsty 上,可以立刻进行交互式日志流量分析与统计。

NGINX Overview:展示 Nginx 指标与日志



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,添加新功能,scaledefault,允许为指标指定一个倍乘因子,以及指定默认值。
  • pg_bgwriter, pg_wal, pg_query, pg_db, pgbouncer_stat 关于时间的指标,单位由默认的毫秒或微秒统一缩放至秒。
  • pg_table 中的相关计数器指标,现在配置有默认值 0,替代原有的 NaN
  • pg_class 指标收集器默认移除,相关指标添加至 pg_tablepg_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 升级至 14.4
  • haproxy 升级至 2.6.0
  • grafana 升级至 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_databasegrafana_pgurl 被标记为过时 API,将从后续版本移除

新增应用

  • wiki.js:使用 Postgres 搭建本地维基百科
  • FerretDB:使用 Postgres 提供 MongoDB API

2.27 - Pigsty是什么?

原文发布于 VONNG

在介绍 Pigsty 前,我们必须要先说一说PostgreSQL

PG 是世界上最先进的开源关系型数据库

图片图片图片图片图片

PG 是一个足够完美的内核,一颗强劲的引擎。

但用户要的 并不是发动机,而是 开门即走 的整车!

图片

Pigsty 要做的就是这辆车:

开箱即用,物美价廉,自动驾驶,数据库界的 TESLA!

图片

Pigsty,让天下没有难用的数据库!

图片

PostgreSQL 数据库发行版

RedHat for Linux!开箱即用!从无到有,让用户用得上!

Pigsty 将高可用集群部署,扩容缩容,主从复制,故障切换,流量代理,连接池,服务发现,访问控制,监控系统,告警系统,日志采集等生产级成熟解决方案封装为发行版。一次性解决在生产环境与各类场景下使用 世界上最先进的开源关系型数据库 —— PostgreSQL 时会遇到的各种问题,真正做到开箱即用。

Pigsty 深度整合最新 PostgreSQL 内核 (14) 与强力扩展:时序数据 TimescaleDB 2.6,地理空间 PostGIS 3.2,分布式 Citus 10,及上百+海量扩展插件,全部开箱即用。

图片图片

Pigsty 打包了大规模生产环境所需的基础设施:Grafana,Prometheus,Loki,Ansible,Consul,Docker 等,亦可作为部署监控其他数据库与应用的运行时/PaaS。

图片

Pigsty 集成了数据分析生态的常用工具:Jupyter,ECharts,Grafana,PostgREST,Postgres,可作为数据分析环境,或低代码数据可视化应用开发平台。

智能监控管控运维解决方案

Auto-Pilot for Postgres!自动驾驶!从有到优,让用户用的爽!

Pigsty 带有一个无可比拟的数据库监控系统,通过 30+精心设计组织的监控面板呈现超 1200 类指标,从全局概览到单个库内对象一览无余,提供终极的可观测性!

图片

Pigsty 提供高可用的 PostgreSQL 数据库集群,任意成员存活即可正常对外提供服务;各实例幂等,提供类分布式数据库的体验;故障自愈,极大简化运维工作!

图片

Pigsty 支持部署不同种类的数据库集群与实例:经典 PGSQL 主从复制集群/灾备集群,同步/延迟/离线/级联实例,Citus/Greenplum 集群,Redis 主从/哨兵/原生集群。\

图片

数据库即代码开发者工具箱

HashiCorp for Database!简单易用!从优到易,让用户省心!

Pigsty 秉持 Infra as Data 的设计理念,用户只需用几行声明式的配置文件描述自己想要的数据库,即可使用幂等剧本,一键将其创建。Just like Kubernetes!

图片

Pigsty 向开发者交付简单易用的数据库工具箱:一键下载安装,自动配置;一键部署各类开源数据库,一键迁移备份、扩容缩容,极大拉低数据库管理使用门槛,量产 DBA!

图片

Pigsty 能够简化数据库部署与交付、解决环境配置统一的难题:无论是上千套数据库几万核的生产环境,还是本地 1C1G 的笔记本均可完整运行;基于 Vagrant 的本地沙箱与基于 Terraform 的多云部署,云上云下,一键拉起!

图片

开源云数据库 PaaS 替代方案

Alternative for RDS!安全可控,降本增效!从易到廉,给用户省钱!

Pigsty 相比云厂商 RDS,在拥有更低使用⻔槛与更丰富功能的前提下,可节约 50% - 80% 的数据库软硬件成本,初级研发人员即可自主管理成百上千套数据库。

图片

Pigsty 采用模块化设计,可自由组合,按需定制扩展。可在生产环境部署管理各种数据库,或仅仅将其当成主机监控;可用于开发数据库可视化 Demo、或支撑各类 SaaS 应用。

图片

Pigsty 是开源免费的生产级数据库解决方案,用于补全云原生生态缺失的最后一块拼图。稳定可靠,经过长时间大规模生产部署验证,提供可选的专业技术支持服务。

自动驾驶高可用

以 PostgreSQL 为例,Pigsty 创建的数据库集群是分布式、高可用的数据库集群。只要集群中有任意实例存活,集群就可以对外提供完整的读写服务与只读服务。

Pigsty 的高可用架构久经生产环境考验,Pigsty 使用 Patroni + Consul 进行故障检测、Fencing 与自动故障切换,通过 HAProxy、VIP 或 DNS 实现流量的自动切换,以极低的复杂度代价实现了完整的高可用方案,让主从架构的数据库能用出了布式数据库般的体验。

数据库集群可以自动进行故障检测与主从切换,普通故障能在几秒到几十秒内自愈:主库故障 RTO < 1min,只读流量几乎无影响,同步集群 RPO = 0 不丢数据。

数据库集群中的每个数据库实例在使用上都是幂等的,任意实例都可以通过内建负载均衡组件 HAProxy 提供完整的读写服务。任何一个或多个 Haproxy 实例都可以作为集群的负载均衡器,并通过健康检查进行流量分发,对外屏蔽集群成员的区别。用户可以通过配置灵活定义服务,并通过多种可选方式接入。

图片

极致入微可观测\

You can’t manage you don’t measure.

监控系统提供了对系统状态的度量,是运维管理工作的基石。

【公开 Demo:http://demo.pigsty.cc】

Pigsty 带有一个针对大规模数据库集群管理而设计的专业级监控系统,基于业内最佳实践,采用 Prometheus、Alertmanager、Grafana、Loki 作为监控基础设施。开源开放,定制便利,可复用,可移植,没有厂商锁定。

Pigsty 在 PostgreSQL 监控上做到无可比拟,通过 30+监控面板与上千仪表盘综合呈现约 1200+类指标,覆盖从全局大盘到单个对象的详细信息,从数据库目录到节点日志全部一览无遗。与同类产品相比在指标的覆盖率与监控面板丰富程度上一骑绝尘,为专业用户提供无可替代的价值。详略得当的层次设计,为业余用户带来直观便捷的管理体验。

Pigsty 的监控系统可用于监控原生部署的各类数据库实例:PGSQL,REDIS,GPSQL 等,也可以独立使用,监控已有的数据库实例或远端云厂商 RDS,或仅仅作为主机监控使用,它还可以用作数据可视化作品的展示平台。

图片

简单易用门槛低

HashiCorp for Database!

Pigsty 采纳 Database as Data 的设计哲学,使用类似 Kubernetes 的声明式配置,通过大量可选的配置选项对数据库与运行环境进行描述,并通过幂等的预置剧本自动创建所需的数据库集群,提供私有云般的使用体验。

用户只需要通过配置文件或图形界面描述“自己想要什么样的数据库”,而无需关心 Pigsty 如何去创建或修改它。Pigsty 会根据用户的配置文件清单,在几分钟内从裸机节点上创造出所需的数据库集群。

例如,在三台机器上创建一主两从的数据库集群pg-test,只需要几行配置与一行命令即可创建出高可用数据库集群。

图片

自由部署体验齐

无论是几万核的生产环境,还是 1 核 2G 的本地虚拟机,云上云下,用哪个云,体验如一!

无论是几万核的生产环境、预发环境、还是本地 1 核 2GB 虚拟机的开发测试环境,对 Pigsty 来说,只有配置文件的内容差异。无论在哪里部署,都能带来统一的使用体验。

Pigsty 可以利用VagrantVirtualbox,在您自己的笔记本电脑上拉起安装所需的虚拟机沙箱环境,或通过 Terraform,自动向云服务商申请 ECS/VPC 资源,一键创建,一键销毁,自动获取多云部署的能力。

图片

应用广泛生态全\

一键拉起生产级 SaaS 应用,数据分析快速上手,低代码开发可视化大屏

SaaS 软件应用

Pigsty 在元节点上默认安装了 Docker,您可以一键拉起各类 SaaS 应用:开源私有代码托管平台 Gitlab,开源论坛 Discourse,开源社交网络 Mastodon,开源 ERP 软件 Odoo,以及用友、金蝶等软件。您可以使用 Docker 拉起无状态的部分,修改其数据库连接串使用外部数据库,获取丝滑的云原生管理体验与生产级的数据持久性。详情请参考 教程:Docker 应用。

图片

数据分析与可视化应用\

Pigsty 既是开箱即用的 PostgreSQL 发行版,也可以用做数据分析环境,或制作低代码的可视化应用。您可以直接从 SQL 数据处理到 Echarts 绘图一步到位,也可以使用更精细的工作流:例如使用 PG 作为主数据库,存储数据并用 SQL 实现业务逻辑;使用内置的 PostgREST 自动生成后端 API,使用内置的 JupyterLab 用 Python 进行复杂数据分析,并使用 Echarts 进行数据可视化,并通过 Grafana 获得交互能力。

图片

Pigsty 自带有几个应用样例作为参考:\

  • 分析 PG CSV 日志样本pglog

  • 新冠疫情数据可视化 covid

  • 全球地表气象站数据查询 isd

  • 数据库流行度排行趋势 dbeng

  • 查询大厂工作上下班安排 worktime

自主可控更省钱

Pigsty 可将数据库的综合持有成本降低 50% ~ 80%,

并让数据真正掌控在用户自己的手中!

公有云数据库/RDS,也是一种“开箱即用"的解决方案,但它交出的答卷离让用户满意还有很长路要走:相比自建数据库成本昂贵,许多需要超级用户权限的功能被阉割,愚笨的 UI 与大锅饭式的功能,但在所有问题中,最重要的问题莫过于云软件的安全与成本问题:

自主可控

  • 运行在你自己的电脑上的软件,即使软件供应商倒闭也可以继续运行下去。但如果提供云软件的公司/部门倒闭或决定停止支持,这些软件就没法工作了,而你用这些软件创造的数据就被锁死了。因为数据只存储在云端,而不是你自己服务器的磁盘上,而您能指望的补偿通常只有鸡肋的代金券。

  • 无法定制或扩展的问题在云数据库中进一步加剧。云数据库通常不向用户提供数据库超级用户,这将锁死一大批高级功能,以及自行加装扩展功能的能力。与此相对应,‘流复制’,‘高可用’这些本该是数据库标配的东西往往作为增值项向用户出售。

  • 云服务可能在没有警告和追索手段的情况下突然暂停你的账户。您可能在完全无辜的情况下,被自动化系统判定为违反服务条款:未备案使用 80 与 53 端口,账户被爆破并用于发送恶意软件或钓鱼邮件,触发违背服务条款。或因为一些政治原因被云厂商锤翻,例如 Parler。

  • 国内不用 SaaS 坚持自研或开源自建的习惯,是被恶劣的生态产业环境真金白银教育出来的。在信息时代把核心资产 — 数据放在别人的硬盘上,就像把金条放在超市存包柜中一样。您无法避免,无法监督、甚至无法意识到利益冲突的云厂商,或者仅仅是怀有恶意或好奇的运维与 DBA 人员偷窥盗窃您的珍贵数据。

Pigsty 则不然,它可以部署在任意地方,包括您自己的服务器上。它开源免费,无需 License,无需互联网访问,不收集任何用户数据。您可以在自己的服务器运行它直到海枯石烂。

降本增效

云数据库的成本则是另一个问题:省钱是用户的刚需。公有云厂商的 RDS 相比传统商业数据库也许有优势,但在自建开源数据库前仍然是暴利天价。据统计,RDS 的综合持有成本比起基于云服务器自建要高达 2~3 倍,比起 IDC 托管自建更是高出 5~10 倍。

图片

Pigsty 相比使用云数据库有显著成本优势。例如,您可以使用云数据库一半的开销购买同规格的云服务器,并使用 Pigsty 自行部署数据库。在这种情况下,您既可以享受公有云的绝大部分管理之快捷便利(IaaS),又可以立竿见影节省一半以上的开销。\

更重要的是,Pigsty 能显著提高用户效能:它允许一两个高级 DBA 将所有琐碎杂物交由软件处理,轻松管理几百套数据库集群;也可以让一个初级研发人员,经过简单的学习培训后,即可迅速达到一个高级 DBA 的廉价七成正确水平。

Pigsty 开源免费,在提供类似甚至超过云厂商 RDS 使用体验的前提下,可将数据库的综合持有成本降低 50% ~ 80%,并让数据真正掌控在用户自己的手中!

云原生运动的最后一块拼图

软件吞噬世界,开源吞噬软件,云吞噬开源;而吃掉云的,还得看云原生多云部署

图片

**云原生(Cloud Native,或曰“本地云”)**是一场从公有云厂商夺回软件自由的伟大运动。然而其图景中还缺少最后一块拼图 —— 数据库。

图片

将数据库稳定可靠地放入 Kubernetes/容器中仍然是一个业界难题,即使是云厂商,也仍然在大量使用物理机与虚拟机部署管理数据库。而很多的用户,因为没有数据库的运维能力,不得不使用公有云/RDS 来补足这个短板,进而不得不把自己的业务跑在云上。

图片

而 Pigsty 将会带来改变:用云服务器的牛,耕云数据库的田,享受绝大多数灵活性的同时立省一半开销;若是使用 IDC 托管/自建机房,综合持有成本省掉百分之八十都打不住!

Pigsty,要把 DB 的使用门槛压到地板,我们要把软件自由交还用户:让天下没有难用的数据库,谢谢!

图片图片

发布版本:微信公众号

2.28 - PG与Pigsty用户需求问卷调研结果

原文发布于 VONNG

上周,我们进行了一次题为 PostgreSQL 与 Pigsty 用户需求调研的问卷调查。主要希望对用户的数据库需求进行了解,两天时间共收集有 77 份有效问卷。

本次问卷调查基于 PostgreSQL 社区 与 Pigsty 社区用户群体,通过微信公众号与群组进行发放。部分结果可能存在 Bias,但足以真实反映用户满意度与整体用户需求。

基本情况

此次接受调研的用户群体中,DBA 占近半数,DBA 与运维共计占 71%,应用研发次之,占 17%。

图片图片

其中,近半数参与调研者与数据库打交道的时间在 5-10 年范围内,90% 以上的受访者有两年以上相关工作经验。\

图片图片

其中,超过 30% 受访者的公司有着较大规模:超过 10 人以上的数据库专职团队与 200+数据库实例。

图片图片

在数据量上,超过半数的公司的业务数据量坐落于几百 GB 到几 TB 的数量级。

1TB 内占比 36%,1TB-1PB 占比 56%,PB 以上占比 7%。

图片图片

数据库使用情况

在数据库的使用上,PostgreSQL 占比最高,达到 90%,当然有一部分因素是调研对象是 PostgreSQL 社区/Pigsty 社区。此外,使用 MySQL 与 Redis 的用户并列第二,达到 70%。Oracle 排第四位占比 60%。MongoDB 与 Kafka 也分别有 43% 与 36% 的采用率,位列第五第六。“其他”选项中包括 IBM DB2,Starrocks,ElasticSearch,InfluxDB 等。

图片图片

数据库管理工具

在受访群体中,60% 的用户倾向于使用开源的数据库发行版来满足数据库管控的需求。倾向于购买云数据库的用户占比为 20%,使用商业数据库或商业管控软件的用户占比约为 10%。(注:本题可能因调研用户群体而产生 Bias)

图片

最需要的数据库相关功能

用户将选出自己最看重的五项 数据库相关 能力,其中,高可用监控系统是用户最为强烈的需求,一键安装/CLI/GUI 的需求次之。流量分发、接入、负载均衡、数据分析、扩展插件基本位于第三梯队。

图片图片

Pigsty 相关

Pigsty 是开箱即用的 PostgreSQL 数据库发行版。在参与调查的 77 人中,有 70 人听说过 Pigsty,在 70 人中,有 40 人使用过 Pigsty。在使用 Pigsty 的 40 人里,NPS 分数为 80%。

图片图片图片

NPS 分数

NPS(Net Promoter Score),净推荐值,又称净促进者得分,亦可称口碑,是一种计量某个客户将会向其他人推荐某个企业或服务可能性的指数,它是最流行的用户满意度分析指标。

图片

NPS 的计算方式为,询问用户有多大可能性向朋友或同事推荐此产品,然后用推荐者比例(9,10 分)减去 - 贬损者比例(0-6 分)。

在 Pigsty 的 40 位用户中,有 83% 的用户给出了积极评价(9 分与 10 分),6 位用户给出了中性评价(7,8),1 位用户给出了 5 分,净推荐指数为 80%,是一个相当惊人的值。

图片

80% 的 NPS 是一个相当惊人的值,作为参考,软件行业的平均 NPS 大致在 31%。

图片图片

常见行业 NPS 均值报告,软件业均值为 31%

非常感谢各位填写问卷的朋友,参与问卷调查的用户如果留有收件地址,将会有一份随机小礼品发送,不过因为疫情原因还在定制中,将在问卷调查结束/寄到后统一发放。

图片图片

贴纸,两种胸针随机发送~

顺便一提,最近 Pigsty 进行了一次路演预演,在五十多个创业项目(从全球 5600 个项目初筛)中排名并列第二。以下是预演视频删减录像。

嵌入媒体

最后,添加 Pigsty 小助手,加入 Pigsty 群组!

图片

发布版本:微信公众号

2.29 - Pigsty v1.4:模块化架构,MatrixDB数据仓库支持

原文发布于 VONNG

Pigsty v1.4 正式发布啦!全新的模块化架构:四大内置模块 INFRA,NODES,PGSQL,REDIS 可以独立使用并自由组合;新增时序数据仓库 MatrixDB 部署与监控支持;新建设了全球 CDN 加速下载;此外,Pigsty 完成种子轮融资,产品定位与战略进行重大升级,我也全职出来投入到此项目中。请系好安全带,老司机要加速发车啦!

图片

Github Star 指数增长,开始!

图片

模块化架构\

如果要我说 Pigsty v1.4 最给力的特性是什么,我认为是对底层架构的重大重构,尽管听上去比较枯燥,但这一点确实很重要。

在 1.4 中,整个系统解耦成 4 个独立的模块,可以独立维护,自由排列组合使用。**INFRA是 Pigsty 的基础设施部分,包括监控/告警/可视化/日志/DNS/NTP 等公共组件。NODES是主机节点管理模块,PGSQL是 PostgreSQL 数据库部署管控模块,REDIS**是 Redis 数据库部署管控模块。

图片

全新的 Pigsty v1.4 监控首页

如果您想将 Pigsty 当作单机的开箱即用的 PostgreSQL 发行版来使用,那么在一台机器上依次安装 INFRA,NODES,PGSQL 三个模块,就会有一个立即可用的,自我监控管理的数据库实例。

如果您想要一个生产环境的大规模主机监控系统,那么在一台机器上安装INFRA模块,在所有被监控的机器节点上安装NODES模块即可。所有的主机节点会配置有软件源,软件包,DNS,NTP,节点监控,日志收集,DCS Agent 这些生产环境所需的组件。纳入 Pigsty 管理的主机会带有详细的监控信息,并可以用于进一步部署各式各样的数据库模块。

如果您想部署管理大量的 PostgreSQL 集群,很简单,在这些纳入 Pigsty 管理的节点上再加装 PGSQL模块即可。您可以一键部署各种各样的 PGSQL 集群:单实例,一主 N 从的高可用集群,同步集群,法定人数提交的同步集群,带有离线 ETL 角色的集群,异地容灾的备集群,延迟复制集群,Citus 分布式集群,TimescaleDB 集群,MatrixDB 数据仓库集群。

如果你想部署并监控管理很多 Redis 集群,也很简单。只要在 Pigsty 托管的节点上加装REDIS模块即可。而且后续添加新类型的数据库也更加容易了:KAFKA,MINIO,MYSQL,…… 这些模块都可以用一种类似的方式加入到 Pigsty 中。一个成功的开源项目离不开开发者的贡献,而简洁优雅的架构,可以极大降低贡献的门槛。

Pigsty 1.4 在模块化上进行了大量的工作。无论是配置项,命名空间,剧本,标签,监控面板,全部按照这四个模块进行分类统筹。例如,下面是按照模块划分的剧本与配置项:

图片

模块化后的剧本与配置参数

全新数据库支持

PostgreSQL 是一个相当全能、相当完美的数据库内核了,但正所谓:红花还需绿叶配,一个好汉三个帮。当组织与数据成长到一定规模后,使用专有数据组件的需求也会随之出现。最典型的两类是:以 Redis 为代表的缓存,以及以 Greenplum 为代表的数据仓库。

图片

Redis 可以进一步强化业务系统的 OLTP 处理能力,分担数据库压力,模型简单易用,受到广受开发者的喜爱。而 Greenplum 则可以显著强化业务系统的 OLAP 能力,采用与 PostgreSQL 一致的语言、驱动与接口,将数据分析的量级从几十 TB 提升到 PB 乃至 ZB 的级别。

图片

Redis 与 Greenplum 在两个方向上扩展了 PostgreSQL 的能力边界,这两者都是 PostgreSQL 的拍档,经常在一起组合使用。因此,Pigsty 在 v1.4 中提供了对 Redis 与 Greenplum 的初步支持。

图片

Redis Overview 面版

不过,Pigsty 支持的并不是原生的 Greenplum,而是它的一个分支:MatrixDB。Greenplum 的正式版本目前仍然是 6.x,基于 PostgreSQL 9.6 内核,有些太老了。而 MatrixDB 则基于 Greenplum 7 和 PostgreSQL 12 内核,还有额外的时序功能支持。因此 Pigsty 目前使用 MatrixDB 作为 Greenplum 的替代实现。

Pigsty v1.4 最得意的一点在于,并没有一个专门的 MATRIXDB 模块,MatrixDB 的部署完全复用了PGSQL 模块。您可以用熟悉的配置参数来配置 MatrixDB。在 Pigsty 看来,一套 MatrixDB 数据仓库在逻辑上就是 N 对标准的一主一从 PGSQL 集群:一个标准的 Master 集群(Master & Standby),以及很多组散布在多个节点上的 Segment 集群(Primary & Mirror)。所有 PGSQL 的面板都可以直接用在 MatrixDB 上。

图片

PGSQL MatrixDB 面版

专用的 Dashboard:PGSQL Matrix 用于展示一套 MatrixDB 的核心监控指标,其他监控面板均复用已有的 PGSQL 面板。

图片

定义上面的 4 节点 MatrixDB 只需要这些配置

监控系统演进

监控系统一直以来在 Pigsty 中扮演着核心角色。在 1.4 中,Pigsty 的监控系统也有着很显著的改进。

主机监控

Pigsty v1.4 引入了一个全新的功能:节点监控,这也是模块化改造的一个直接成果。这并不是说以前 Pigsty 没有关于机器节点的监控指标,而是在以前,机器的监控指标是 1:1 与 PostgreSQL 实例绑定的。对于一个 PostgreSQL 数据库发行版来说,这样的设计是没有问题的。但随着 Pigsty 的发展,这样的设计就开始显得不合时宜了。

图片

NODES Overview 面板,提供所有节点的导航

用户可能有各种各样的使用方式与部署策略,例如,在一个节点上部署多个数据库实例,甚至部署多种不同类型的数据库。在这种情况下,合适的做法是把节点的管理与监控单独抽离出来,不与具体的数据库类型绑定。

这样做有两个显著的好处:一是如果用户不需要数据库监控与管理,只需要节点的监控与管理,那么会比以前简单很多;第二是一个节点上可以部署多个甚至多种数据库,并复用同样的节点监控指标数据。任何时候,您只要点击 IP 地址,就可以跳转到具体的 NODES Instance,查看该节点的详情。

图片

曾经的 PGSQL Node 现在变为 NODES Instance

节点监控提供了全局概览,集群,以及单个节点三种不同的层次。节点的集群可以配置为默认与 PostgreSQL 数据库集群保持一致,也可以有独立的身份配置。方便您从不同的角度来透视集群资源。

图片

新增的 Nodes Cluster 面板,关注一组节点的聚合指标与集群内的水平对比

虽然 Pigsty 的定位是开箱即用的 PostgreSQL 发行版,但其中也包含着主机监控的最佳实践。有些用户根本不 care 数据库,只是拿 Pigsty 做主机监控…。

日志收集

在 Pigsty 1.4 中,Loki 与 Promtail 日志收集组件升级为整个系统的默认组件。Loki 是 Grafana 出品的日志收集方案,采用与 Prometheus 类似的标签体系,与 PromQL 类似的 LogQL。是一个轻量化,优雅简洁的日志收集、处理、分析解决方案。经过了一年时间的测试与打磨,现在 Loki 已经成为了 Pigsty 的默认组成部分。会实时收集各式各样的日志:节点的 syslog,dmesg,cron 日志,数据库 postgres/pgbouncer/patroni 的日志,以及 Redis 日志。

图片

INFRA 板块的 LOGS Instance 监控面板,可以实时浏览搜索所有日志。

ELK 对于 SRE 的日志需求过重,其实大家想要的就是一个高效快速的大规模并行 GREP,Loki 在这件事上干的很出色。\

此外,除了节点日志,您也可以从新的 INFRA Overview 面板,查阅基础设施产生的实时日志数据。

图片

INFRA 板块的 Overview 面板,可以看到基础设施的各项日志

PGSQL 监控

Pigsty v1.4 提供了对新数据库种类的监控支持,但对于经典的 PostgreSQL 监控也没有落下。在 1.4 中,大量 PGSQL 的监控面板进行了调整与重置,最具有代表性的就是 PGSQL Cluster 面板。

图片

全新的 PGSQL Cluster 监控面板首屏

PGSQL Cluster 是 Pigsty 数据库监控中最核心的监控面板之一,承上启下,用于呈现一个自治数据库集群的关键状态。新的设计隐藏了不必要的信息,聚焦于集群资源。您可以从首屏快速点击集群内的资源对象,前往细分的监控面板:包括节点,实例,负载均衡器,服务,数据库,服务组件。

除了集群资源对象,PGSQL Cluster 的首屏只呈现最关键的监控指标,报警事件,集群/实例压力水位。其他细节都隐藏在下面的专题栏中。

图片

成员详情表在默认隐藏的第二栏中

第二个显著改进是新增的 PGSQL Databases 面板。在过去,数据库内监控只关注单个实例内的单个对象。但对于表、索引这样的业务对象,我们更关注的是它们在整个集群内的整体指标。PGSQL Databases 面板为此而生。您可以查询某一个数据库在整个集群内的表现,水平对比集群间不同实例的差异:

图片

PGSQL Databases 面板:agg(metrics{datname=*}) by (ins)

更重要的是,您可以看到每一张表,每一类查询在集群范围内的汇总视图。例如,您可以查阅一张表或一类查询在集群主库与从库实例上的 QPS,或者确认某一个索引在集群不同实例上的使用情况,从而对业务与应用进行有针对性的优化。

图片

库内对象在集群层面的汇总展示:Tables & Queries,点击下钻。

带颜色的 TreeMap 可以快速反映出两个维度的属性:对于表而言,大小代表表占用的空间,颜色代表表被访问的频次。对于查询而言,大小代表在此查询上耗费的总时长,颜色代表该类查询的平均响应时间。

应用面版

除了INFRANODESPGSQLREDIS四个核心模块外,Pigsty Grafana 的首页还有一个板块:APP。这是留给用户自己的应用的。任何带有**APPOverview**标签的监控面版会被列入 Pigsty 的面版导航中。Pigsty 自带了一个开箱即用的小应用 PGLOG,用来分析 PG 自身的 CSV 日志,您可以快速从日志中定位异常,并快速定位跳转到具体连接的详情页。

图片

PGLOG Overview,使用快捷方式快速将日志灌入应用表中分析。

此外,Pigsty 还建立一个专用的代码仓库:Vonng/pigsty-app,用于盛放 Pigsty 样例应用:https://github.com/Vonng/pigsty-app。目前的应用包括:

  • ISD:NOAA 全球地表气象站历史天气数据查询

  • COVID:WHO 新冠疫情数据查询

  • DBENG:DB-Engine 数据库流行度趋势与预测

  • APPLOG:Apple 应用隐私日志可视化

  • WORKTIME:国内大公司上下班时间查询

后续将不断添加更多数据应用的样例。

图片

DBEng Trend:使用权威网站 DBEngine 流行度趋势数据,预测 PostgreSQL 什么时候会成为世界上最流行的关系型数据库。

安装体验优化/CDN

此前 Pigsty 使用 Github 作为发布平台,中国大陆访问起来还是比较吃力的。经常需要从百度网盘镜像下载,再手工拷贝到服务器上去。用户的体验就是我们的追求,所以我们又启用了全球 CDN 加速域名 http://download.pigsty.cc,朗朗上口,非常好记。例如最新的软件源码包与离线软件包的下载地址分别为:http://download.pigsty.cc/v1.4.0/pigsty.tgz (2MB)http://download.pigsty.cc/v1.4.0/pkg.tgz(940MB)

Pigsty 的软件包进行了一次重新梳理与瘦身,从原本的 1.3GB 压缩至 v1.4 的 940MB。需要安装 Greenplum 与 MatrixDB 的用户,单独下载另一个离线软件包 matrix.tgz (338MB)即可。

一键安装是 Pigsty 的光荣传统。尽管如此,下载一直以来都是最最不让人省心的地方。因此在 Pigsty v1.4 中提供了专用的下载脚本**download,可用于自动下载并解压可选的软件包pkg.tgz,matrix.tgz,app.tgz**。这个脚本会自动检测您的网络环境是不是在墙内,如果在墙外使用默认的 Github Releaes,在墙内则使用腾讯云 CDN 下载。

当然,download本身也是 pigsty 源码包的一部分,因此我们还提供了一条类似homebrew 的一键安装命令,用来一键下载最新的 pigsty 源码包。于是,现在安装 Pigsty 的流程如下所示了:

bash -c "$(curl -fsSL http://download.pigsty.cc/get)" # 下载
./download pkg matrix app   # 下载并解压可选的扩展软件包(可选步骤)
cd ~/pigsty && ./configure  # 配置
make install                # 安装

典型用户案例

探探是 Pigsty 最大的用户案例,也始终是第一个吃螃蟹的人。2022 年 3 月份,探探下线了最后一套遗留的旧 PostgreSQL 数据库 pg.meta.tt,生产环境所有数据库均已迁移至 Pigsty,一百套集群全部由 Pigsty v1.3.1 所托管(监控系统版本为 1.4)。所有集群的高可用自动切换也已经启用,历时近两年的数据库飞升项目正式宣告完工。

图片

探探主生产环境的 Pigsty 部署:240 实例 13400 核的 PostgreSQL OLTP 集群。

在探探,Pigsty 经过了长时间,大规模,高强度,惨无人道的实际生产环境测试。在两年的时间里不断打磨完善,最终演变为今天的样子。在近日的混沌工程演练中,运维随机挑选数据库机器进行多次宕机演练,Pigsty 在无人值守的情况下可以自动进行高可用主从/流量切换。从库宕机无业务影响,主库宕机对业务写入影响不超过在 1 分钟。

图片

一次典型从库宕机现场,读流量迅速由主库承担,业务只有极个别现场查询中断报错,而后立即恢复。

图片

一次典型主库宕机现场。主库宕机 30s 后,从库被提升新主库,影响 30s 业务写入请求后自愈。

潜在合作伙伴

一个篱笆三个桩,一个好汉三个帮。想要做大事,首先要确定的一点就是,谁是我们的敌人,谁是我们的朋友。Pigsty 定位了两个潜在的合作伙伴 Sealos,Bytebase,准备进行进一步接触。

Sealos 是一个很有趣的开源项目,可以把整个运行中的 K8s 集群打成镜像,然后一键部署到其他地方,Pigsty 和 Sealos 很互补:很多 SaaS 都是 DB + App 的方式。有了一个开箱即用的数据库,就差一个开箱即用的应用生态了,把 SaaS 软件丢进 K8s 里整体打成镜像,交付什么 Gitlab,Jira,Confluence,Odoo,Habour,金蝶啥的就很简单了,拉起来填个数据库连接串全部搞定。

另一个我比较关注的项目是ByteBase,这是一个做数据库 Schema Migration 的工具。用 Go 开发清清爽爽无依赖,使用 PostgreSQL 作为后端数据库,又可以用来做 PostgreSQL 的模式变更管理。那确实是极好的,Pigsty 可以用来做ByteBase的 Backend Database,ByteBase也可以作为 Pigsty 的 Migrator,预计在下个版本中会添加一个对 ByteBase 基本的集成与支持。

产品定位转换

Pigsty,是 Postgres in Graph STYle 的缩写,即图形化 PostgreSQL 的意思,在最初,它是一个针对 PostgreSQL 开发的专业监控系统。后来,随着各种各样功能的引入(声明式定义,一键部署,高可用 PG,自动流量切换,数据分析与可视化组件),Pigsty 在 1.0 的时候,定位调整为“开箱即用的 PostgreSQL 数据库发行版”。而现在,Pigsty v1.3 提供了 Redis 部署监控的支持,1.4 又引入了时序数据仓库 MatrixDB 监控部署支持。单一的PG 发行版 定位已经限制了 Pigsty 的想象力与可能性。

开箱即用的发行版

RedHat for Linux
  • Pigsty 打包最新 PostgreSQL 内核(14),集成强力的地理空间插件 PostGIS3.2,时序数据库插件 TimescaleDB2.6,分布式扩展插件 Citus10,以及上百功能扩展,全部一键安装,开箱即用。

  • Pigsty 集成了完整的大规模数据库监控管控解决方案:Grafana,Prometheus,Loki,Ansible,CMDB。亦可作为生产级应用运行时直接使用,监控管理其他数据库与应用。

  • Pigsty 集成了数据分析生态的常用工具:Jupyter,Echarts,Grafana,PostgREST,Postgres。可以低代码的方式,开发交互性数据应用与数据可视化作品。快速产出作品原型,并以标准的方式分享,演示与交付。

多快好省的开发者工具:
HashiCorp for Database!
  • Pigsty 采用 Infra as Data 的设计理念,用户描述自己想要什么样的数据库集群,而 Pigsty 自动为您创建!Just like Kubernetes!

  • Pigsty 提供灵活丰富的部署支持,本地沙箱,云端,多云部署。无论是高规格物理机还是 1 核 1G 虚机均可运行,保持生产、预发、开发、测试环境高度一致。

  • Pigsty 可以极大简化数据库部署实施维护工作,极大降低 PostgreSQL 数据库运维与使用的门槛,量产 DBA,有效降低软硬件人力成本。使用云厂商服务器的牛,耕云数据库的田,也能减少 50% 以上的 TCO,自建机房更是能节省 80% 的成本费用。

Pigsty 为 DBA 留下了两个安全出口:PITR 备份与等保安全加固。

自动驾驶 SRE 解决方案:
Alternative for RDS!
  • 终极可观测性:监控是有效管理的基石。没有完善的监控,SRE 无从谈起。Pigsty 带有终极的可观测性,以 BI 的思路设计监控系统,从最顶层的全局洞察到最细节的每一个对象,都可以获取实时洞察,为决策提供数据支撑,做到“心中有数”。

  • 高可用数据库集群:Pigsty 集成了久经考验的生产级高可用数据库架构方案:主从异地容灾,硬件故障自愈,高可用自动切换,自带连接池与负载均衡器,提供分布式数据库般的体验。冷备份与延时从库可有效应对各类软件故障与人为故障,确保系统稳定运行。极大简化运维工作。

  • Pigsty 还可以作为完整的 SRE 解决方案:主机监控,应用部署,并将逐步添加其他数据库的部署与监控:Redis/Greenplum/Kafka/Minio,或支持其他 SaaS 服务,制作 POC,交付 Demo 等。

未来路线规划

从长期来看,我希望在 Pigsty 中再添加 Minio,Kafka 支持,让整个产品形成一个以 PostgreSQL 为核心的整体解决方案,覆盖中小型企业完整生命周期的数据存储需求,打造一个开源的、私有的云数据库管控整体解决方案。关系型数据库 PostgreSQL 作为核心,缓存 Redis 强化 TP 能力,数仓 Greenplum/MatrixDB 强化大规模数据分析能力,对象存储 Minio 用于备份管理以及存储图像音视频等数据,消息队列 Kafka 提供数据总线的能力。通过完备的 ETL/CDC 支持将这些数据组件融为一体,实现 turning the database inside-out!

从短期来看,Pigsty 将尽可能充分利用元节点上的 CMDB。CMDB 模式应当尽快适配多模数据库,命令行工具也应当及时更新,提供类似于云 CLI 工具的使用体验。多云部署与云厂商适配也应当尽快弄起来。监控面板也有大量的改善空间,包括 Catalog 数据挖掘与呈现,日志分析与提炼。从可观测性的角度讲,Blackbox 黑盒探测与 Mtail/Promtail 日志衍生指标还有不小的创新空间。数据库模式演化,可以考虑使用开源的解决方案 Bytebase。PostgREST 的能力也有待进一步发掘。冷备份/PITR 是 Pigsty 留给 DBA 们的一个安全出口,但也应当准备一个 Best Pracetice 指南。

社区问卷调查

Pigsty 有一个活跃的用户群组,微信搜索 pigsty-cc 或扫二维码添加 Pigsty 小助手拉群。

图片

此外,我们还有一个关于 PostgreSQL 与 Pigsty 的用户问卷调查,填写会有社区周边与小礼品赠送哦~,问卷链接:https://www.wjx.cn/vj/Ys1hxik.aspx

图片

扫一扫上面的二维码或点击连接参与问卷调查,我们会寄送精美社区周边~。


v1.4.0 发行注记

架构

  • 将系统解耦为 4 大类别:INFRANODESPGSQLREDIS,这使得 Pigsty 更加清晰、更易于扩展。
  • 单节点部署 = INFRA + NODES + PGSQL
  • 部署 PGSQL 集群 = NODES + PGSQL
  • 部署 Redis 集群 = NODES + REDIS
  • 部署其他数据库 = NODES + xxx(例如 MONGOKAFKA…)

可访问性

  • 为中国大陆提供 CDN。
  • 使用 bash -c "$(curl -fsSL http://get.pigsty.cc/latest)" 获取最新源代码。
  • 使用新的 download 脚本下载并提取包。

监控增强

  • 将监控系统分为 5 大类别:INFRANODESREDISPGSQLAPP
  • 默认启用日志记录
    • 现在默认启用 lokipromtail,带有预构建的 loki-rpm
  • 模型和标签
    • 为所有仪表板添加了一个隐藏的 ds prometheus 数据源变量
    • 为所有指标添加了一个 ip 标签,并将其用作数据库指标和节点指标之间的连接键
  • INFRA 监控
    • Infra 主仪表板:INFRA 概览
    • 添加日志仪表板:日志实例
    • PGLOG 分析和 PGLOG 会话现在被视为示例 Pigsty APP
  • NODES 监控应用
    • 可以单独使用 Pigsty 作为主机监控软件
    • 包括 4 个核心仪表板:节点概览 & 节点集群 & 节点实例 & 节点警报
    • 为节点引入新的身份变量:node_clusternodename
  • PGSQL 监控增强
    • 全新 PGSQL Cluster,简化并专注于集群中的重要内容
    • 新仪表板 PGSQL Databases 是集群级对象监控
    • PGSQL Alert 仪表板现在只关注 PGSQL 警报
    • PGSQL Shard 已添加到 PGSQL 中
  • Redis 监控增强
    • 为所有 Redis 仪表板添加节点监控

MatrixDB 支持

  • 通过 pigsty-matrix.yml playbook 可以部署 MatrixDB(Greenplum 7)
  • MatrixDB 监控仪表板:PGSQL MatrixDB
  • 添加示例配置:pigsty-mxdb.yml

软件升级

  • PostgreSQL 14.2
  • PostGIS 3.2
  • TimescaleDB 2.6
  • Patroni 2.1.3(Prometheus 指标 + 故障转移插槽)
  • HAProxy 2.5.5(修复统计错误,更多指标)
  • PG Exporter 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 脚本的默认数据目录路径
  • 在 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.ymlinfra-demo.yml 播放书,不会在元节点上创建 CMDB

v1.4.1 发行注记

日常错误修复 / Docker 支持 / 英文文档

现在默认在元节点上启用 Docker,可以用它启动大量各类软件。

Bug 修复

  • 修复 Promtail & Loki 配置变量问题
  • 修复 Grafana 旧版警报
  • 默认禁用 nameserver
  • 为 Patroni 快捷方式重命名 pg-alias.sh
  • 为所有仪表板禁用 exemplars 查询
  • 修复 Loki 数据目录问题
  • autovacuum_freeze_max_age 从 100000000 更改为 1000000000

发布版本:微信公众号

2.30 - Pigsty近况与v1.4前瞻

原文发布于 VONNG

Pigsty v1.4 将于 3 月内发布,对监控系统进行了显著改进;探探所有 PostgreSQL 完整搬迁至 Pigsty;Pigsty 开始接洽 VC

探探全量迁移至 Pigsty

探探是 Pigsty 最大的用户案例,也始终是第一个吃螃蟹的人。今天探探下线了最后一套遗留的旧 PostgreSQL 数据库 pg.meta.tt。至此,探探主生产环境所有数据库均已迁移至 Pigsty,近一百套集群全部由 Pigsty v1.3.1 所托管。所有集群全部启用了高可用自动切换,历时近两年的数据库飞升项目正式宣告完工。

图片

探探主生产环境的 Pigsty 部署:96 集群 12688 核的 PostgreSQL OLTP 集群。

在探探,Pigsty 经过了长时间,大规模,高强度的实际生产环境测试。在两年的时间里不断打磨完善,最终演变为今天的样子。在近日的混沌工程演练中,运维随机挑选数据库机器进行多次宕机演练,Pigsty 在无人值守的情况下可以自动进行高可用主从/流量切换。从库宕机无业务影响,主库宕机对业务写入影响不超过在 1 分钟。

图片

一次典型从库宕机现场,读流量迅速由主库承担,业务只有极个别现场查询中断报错,而后立即恢复。

图片

一次典型主库宕机现场。主库宕机 30s 后,从库被提升新主库,影响 30s 业务写入请求后自愈。

Pigsty 与 VC

Pigsty 是一个开源项目,致力于 PostgreSQL 的推广,极大降低数据库的使用与管理门槛,显著拉高社区用户使用 PostgreSQL 的下限。依托于 PostgreSQL 中文社区,属于用爱发电的公益开源项目。

不过,数据库作为信息系统的核心组件,很多用户在使用中反馈,希望有专业的商业服务来兜底。因此 Pigsty 也不排斥进行一些商业化方面的探索,最近接触了一些 VC 机构,也与不少投资人聊过。

图片

Pigsty 的用户痛点与产品定位

今日,Pigsty 很荣幸通过了由陆奇博士主办的创业孵化器 奇绩创坛 的面试,有机会进入 2022 春季创业营。如果您也对投资 Pigsty 感兴趣,现在确实是一个好机会哦,请联系我。\

Pigsty v1.4 新特性前瞻

最近经常听到一类用户的反馈:

  1. Pigsty 可不可以用来监控管理其他类型的数据库?

    例如 Redis,MySQL,Greenplum?

  2. Pigsty 的工作假设,DB:Node 1:1 部署是否合理?

    如何支持单机多实例的部署与监控?

  3. Pigsty 的主机监控能不能独立使用?

    我不想用数据库,只想用主机节点监控怎么弄?

应。Pigsty 将于 3 月内发布 v1.4,对这些用户关心的问题做出回应,带来一系列体验改进与新功能特性,包括:

  1. 独立的主机节点监控部署功能

  2. 改进的 PostgreSQL 数据库监控

  3. 对 Greenplum/MatrixDB 部署与监控的初步支持

  4. 改进的监控数据模型,支持单机多实例。

图片

Pigsty v1.4 Home 主页

节点监控\

Pigsty v1.4 引入了一个全新的功能:节点监控。

这并不是说以前 Pigsty 没有关于机器节点的监控指标,而是在以前,机器的监控指标是 1:1 与 PostgreSQL 实例绑定的。对于一个 PostgreSQL 数据库发行版来说,这样的设计是没有问题的。但随着 Pigsty 的发展,这样的设计就开始显得不合时宜了。

用户可能有各种各样的使用方式与部署策略,例如,在一个节点上部署多个数据库实例,甚至部署多种不同类型的数据库。在这种情况下,合适的做法是把节点的管理与监控单独抽离出来,不与具体的数据库类型绑定。

这样做有两个显著的好处:一是如果用户不需要数据库监控与管理,只需要节点的监控与管理,那么会比以前简单很多;第二是一个节点上可以部署多个甚至多种数据库,并复用同样的节点监控指标数据。

图片

Node Overview 面板,关注所有节点的指标。

虽然 Pigsty 的定位是开箱即用的 PostgreSQL 发行版,但其中也包含着主机监控的最佳实践。有些用户根本不 care 数据库,只是拿 Pigsty 做主机监控…。

图片

新增的 Nodes Cluster 面板,关注一组节点的聚合指标与集群内的水平对比

节点监控提供了全局概览,集群,以及单个节点三种不同的层次。节点的集群可以独立配置,也可以配置为默认与 PostgreSQL 数据库集群保持一致。

多数据库支持

节点监控与置备的剥离,为第二件事打下了基础,那就是多数据库支持。

图片

PostgreSQL 是一个相当全能、相当完美的数据库内核了,但正所谓:红花还需绿叶配,一个好汉三个帮。当组织与数据成长到一定规模后,使用专有数据组件的需求也会随之出现。最典型的两类是:以 Redis 为代表的缓存,以及以 Greenplum 为代表的数据仓库。

图片

Redis 可以进一步强化业务系统的 OLTP 处理能力,分担数据库压力,模型简单易用,受到广受开发者的喜爱。而 Greenplum 则可以显著强化业务系统的 OLAP 能力,采用与 PostgreSQL 一致的语言、驱动与接口,将数据分析的量级从几十 TB 提升到 PB 乃至 ZB 的级别。

Redis 与 Greenplum 在两个方向上扩展了 PostgreSQL 的能力边界,这两者都是 PostgreSQL 的拍档,经常在一起组合使用。因此,Pigsty 在 v1.4 中提供了对 Redis 与 Greenplum 的初步支持。

图片

Redis Overview 监控面板

图片

复用 Postgers 剧本,声明一个 MatrixDB 集群

PG 监控例行改进

Pigsty v1.4 提供了对新数据库种类的监控支持,但对于经典的 PostgreSQL 监控也没有落下。在 1.4 中,大量 PGSQL 的监控面板进行了调整与重置,最具有代表性的就是 PGSQL Cluster 面板。

图片

全新的 PGSQL Cluster 监控面板

PGSQL Cluster 是 Pigsty 数据库监控中最核心的监控面板之一,承上启下,用于呈现一个自治数据库集群的关键状态。新的设计隐藏了不必要的信息,聚焦于集群资源。您可以从首屏快速点击集群内的资源对象,前往细分的监控面板:包括节点,实例,负载均衡器,服务,数据库,服务组件。

除了集群资源对象,PGSQL Cluster 的首屏只呈现最关键的监控指标,报警事件,集群/实例压力水位。其他细节都隐藏在下面的专题栏中。

图片

成员详情表在默认隐藏的第二栏中

第二个显著改进是 PGSQL Database 面板。在过去,这个监控面板的存在感与使用频率并不高。因此在 v1.4 中,PGSQL Database 进行了彻底的改版。从笼统地介绍一个数据库实例的库级指标,变为关注整个数据库集群内部对象的详情。例如,您可以查阅一张表或一类查询在集群主库与从库实例上的 QPS,或者确认某一个索引在集群不同实例上的使用情况,从而对业务与应用进行有针对性的优化。

其他一些新的主题监控面板也在制作打磨完善中。例如,关注集群维护任务的 PGSQL Maintenance 面板,可以观察备份、创建索引、垃圾回收任务的实时进度。PGSQL Shard 面板,则关注多个水平分片的业务集群之间的横向比较。这些 Dashboard 都将在生产环境中不断打磨优化,臻至成熟后进入到 Pigsty 中。

使用方式与接口

Pigsty v1.4 提供了一系列新的 Playbook / 剧本。

在 v1.4 中,Pigsty 的使用方式变得更加直观了。如果您将 Pigsty 用作单机数据库或监控核心,只需要执行 meta.yml 即可。如果您希望部署额外的数据库集群,使用 node.yml 将这些节点先纳入管理,而后选择对应数据库的剧本( pgsql.yml , redis.yml,gpsql.yml )执行即可。

meta.yml 用于替代以前的 infra.yml,负责在单台节点上完整安装一套 Pigsty 系统。包括一套完整就绪的的 PostgreSQL 数据库。同时,新增的 meta-remove.yml 剧本用于 Pigsty 的卸载。

node.yml 从 pgsql.yml 中剥离,用于将新的节点纳入 Pigsty 管理。执行此剧本,会自动将目标节点置备为指定的状态,并安装 DCS(Consul Agent)与节点监控。如果您希望使用 Pigsty 在部署数据库集群,则应当使用此剧本将目标节点先纳入 Pigsty 管理。同时,新增的 node-remove.yml 剧本用于将节点从 Pigsty 中移除。

pgsql.yml 现在移除了节点初始化的部分,只负责在已经初始化好的节点上部署 PostgreSQL 集群与实例,并将其纳入监控。一些新的开关选项被添加至相关的 Ansible Roles 中,但主体配置仍与先前保持兼容。pgsql-remove.yml 剧本亦进行了相应调整,移除 DCS 服务现在由 node-remove.yml 负责。

redis.yml 也移除了节点初始化的部分,您需要在已经初始化好的节点上执行此剧本以部署 Redis 服务。新增的 redis-remove.yml 剧本用于从目标节点上移除 Redis 服务。

gpsql.yml 是新增的,用于部署 MatrixDB 的剧本(实际上是 Greenplum 7 的超集),目前仍然处于 Beta 阶段,可以对 MatrixDB/Greenplum 提供基本的部署与安装支持。

未来的路线图

从长期来看,我希望在 Pigsty 中再添加 Minio,Kafka 支持,让整个产品形成一个以 PostgreSQL 为核心的整体解决方案,覆盖中小型企业完整生命周期的数据存储需求,打造一个开源的、私有的云数据库管控整体解决方案。关系型数据库 PostgreSQL 作为核心,缓存 Redis 强化 TP 能力,数仓 Greenplum/MatrixDB 强化大规模数据分析能力,对象存储 Minio 用于备份管理以及存储图像音视频等数据,消息队列 Kafka 提供数据总线的能力。通过完备的 ETL/CDC 支持将这些数据组件融为一体,实现 turning the database inside-out!

从中期来看,Pigsty 将尽可能充分利用元节点上的 CMDB。CMDB 模式应当尽快适配多模数据库,命令行工具也应当及时更新,提供类似于云 CLI 工具的使用体验。多云部署与云厂商适配也应当尽快弄起来。

从短期来看,Pigsty 的监控面板还有大量的改善空间,包括 Catalog 数据挖掘与呈现,日志分析与提炼。从可观测性的角度讲,Blackbox 黑盒探测与 Mtail 日志衍生指标还有很大挖掘空间。此外,针对 Greenplum 的定制 Dashboard 也将提上日程。

当然,这些都需要大量的人力脑力投入,一个人用爱发电速度毕竟有限,特别是最近在热恋中,对 Pigsty 的爱被分走了很多呢。所以,也非常欢迎大家一起来 Contrib 啊,一起打造一款属于我们自己的 “RDS”。


发布版本:微信公众号

2.31 - Pigsty v1.3:PGCAT大修,PGSQL增强,Redis支持

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty v1.3 正式发布,新增 Redis 支持、PGCAT 应用重构、PGSQL 监控增强。


Redis 支持

虽然 PostgreSQL 是 世界上最先进的开源关系型数据库,但一个好汉三个帮。Pigsty v1.3 为 PostgreSQL 引入了一位得力的缓存伙伴:世界上最快的数据库 —— Redis。

redis-partner

Redis 性能强悍,单核轻松达到二三十万 QPS。

redis-fast

Pigsty Demo 中已经纳入 Redis 集群样例:

redis-demo

三种部署模式

Redis 有三种经典部署模式:普通主从结构(Standalone)、原生集群(Cluster)、高可用哨兵(Sentinel)。Pigsty v1.3 全部支持。

redis-overview

Redis Overview 首页展示了三个样例集群,分别对应三种部署模式。

声明式配置

定义 Redis 集群的方式与 PostgreSQL 高度一致。声明完成后,使用 redis.yml -l <cluster> 即可创建对应集群:

redis-config

只需少量必选身份参数即可声明一个 Redis 集群。当然,也可以使用更多参数进行精细配置:

redis-params-1redis-params-2

自动监控

使用 Pigsty 创建的 Redis 集群与实例会自动纳入监控系统。

redis-cluster

单个 Redis 集群的监控首页,点击具体实例可跳转至实例级监控:

redis-instance

PGCAT 重构

v1.3 重构了 PGCAT 应用,这是一个直接从 Grafana 访问并可视化 PostgreSQL 系统目录的应用。

pgcat-instance

单个 PostgreSQL 实例的 Catalog 信息:数据库、活动会话、查询语句。

pgcat-instance-2

单个 PostgreSQL 实例的 Catalog 信息:配置、复制、内存使用、持久化、角色。

pgcat-database

单个 PostgreSQL 数据库的 Catalog 信息,包括数据库内的模式、表、索引、序列等对象。

pgcat-table

PGCAT TABLE Dashboard 改版:添加每一列的详细统计信息展示。

无侵入式设计

PGCAT 只需一个可访问的目标数据库 URL 即可使用,无需安装任何 Agent。即使是仅监控模式部署现有实例,也可以完整使用 PGCAT 功能。

pgsql-monitor-only

在 Pigsty v1.3 的仅监控部署模式中,外部 PostgreSQL 实例也会在 Grafana 中注册并默认启用 PGCAT 功能。


PGSQL 增强

核心 PGSQL 监控应用也有显著改进。

pgsql-cluster

在 Pigsty v1.3 中,PGSQL Cluster 添加了 10 个核心指标的快速导览面板。

PGSQL Instance、PGSQL Cluster 都新增了若干快速导览面板,用于快速定位问题。PGSQL Service 完整重置,更为简洁直观,便于快速理清集群拓扑。其他 Dashboard 也有相应优化与改进。

此外,v1.3 还包含半自动数据库迁移剧本的改进、Profiling 工具支持等功能增强。


v1.3.0 更新日志

Redis 支持

功能 说明
Redis 部署 支持集群、哨兵、主从三种模式
Redis 监控 提供总览、集群、实例三级仪表盘

PGCAT 大修

仪表盘 说明
PGCAT Instance 新增实例级 Catalog 仪表盘
PGCAT Database 新增数据库级 Catalog 仪表盘
PGCAT Table 重做表级统计仪表盘

PGSQL 增强

仪表盘 改进内容
PGSQL Cluster 新增 10 个关键指标面板
PGSQL Instance 新增 10 个关键指标面板
PGSQL Service 简化重设计,更清晰直观
交叉引用 在 PGCAT 与 PGSQL 仪表盘间添加导航链接

监控部署

  • Grafana 数据源在仅监控部署期间自动注册

软件升级

  • 将 PostgreSQL 13 添加到默认包列表
  • 默认升级到 PostgreSQL 14.1
  • 添加 Greenplum RPM 和依赖项
  • 添加 Redis RPM 及源码包
  • 将 perf 添加为默认包

v1.3.1 更新日志

监控

  • PGSQL & PGCAT 仪表盘改进
  • 优化 PGCAT Instance & PGCAT Database 布局
  • 在 PGSQL Instance 仪表盘中添加关键指标面板,与 PGSQL Cluster 保持一致
  • 在 PGCAT Database 中添加表/索引膨胀面板,移除 PGCAT Bloat 仪表盘
  • 在 PGCAT Database 仪表盘中添加索引信息
  • 修复 Grafana 8.3 中的损坏面板
  • 在 Nginx 主页中添加 Redis 索引

部署

  • 新增 infra-demo.yml 剧本用于一次性引导
  • 使用 infra-jupyter.yml 剧本部署可选的 Jupyter Lab 服务器
  • 使用 infra-pgweb.yml 剧本部署可选的 PgWeb 服务器
  • 在 Meta 节点上新增 pg 别名,可从 admin 用户启动 PostgreSQL 集群
  • 根据 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 添加到包列表,支持从 PostgreSQL Schema 生成 API

错误修复

  • Grafana 安全漏洞修复(升级到 v8.3.1,详情
  • 修复 pg_instance & pg_serviceregister 角色中从剧本中间开始时的问题
  • 修复在没有 pg_cluster 变量的主机上 Nginx 主页渲染问题
  • 修复升级到 Grafana 8.3.1 时的样式问题

2.32 - Pigsty v1.2:PG14默认,监控现有PG

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

Pigsty v1.2 正式发布,将 PostgreSQL 14 作为默认版本,并支持独立监控现有数据库实例。


PostgreSQL 14 成为默认版本

PostgreSQL 14 于上月发布,在各方面特别是可观测性上有显著改进。经过多个组织生产环境的部署与充分测试后,PostgreSQL 14 已成为 Pigsty 的默认数据库版本

同时,适配 PG14 的时序数据扩展 TimescaleDB 2.5、地理空间扩展 PostGIS 3.1 已默认安装启用,配合分布式数据库插件 Citus 10,真正实现 开箱即用的时空超融合开源 PostgreSQL 数据库发行版

timescale-postgis-citus

三者相互兼容,可组合使用。


仅监控部署模式

第二个重要特性是 仅监控部署模式。此前 Pigsty 作为发行版,监控系统与部署方案浑然一体。但很多用户希望只使用 Pigsty 的监控系统来监控已有的数据库实例、云数据库、以及其他 RDS 产品与各类衍生版本。

monitor-minio

最小部署模式在本地不同端口启动 pg_exporter 以监控外部 PostgreSQL 实例。

在 v1.2 中,Pigsty 提供三种可选的监控部署模式:

模式 说明
完整部署 完整的 Pigsty 部署,包含监控与管控
精简部署 仅部署监控相关组件
最小部署 仅需数据库连接串,无需远程机器权限

新增的最小部署模式不再需要远程机器的登录与管理权限,只要有一个连接串可以只读访问远程数据库,即可将其纳入监控管理。所有监控功能浓缩在一台机器上,管理简单方便。

monitor-only

尽管只有 PostgreSQL 本身的指标,但 Pigsty 监控系统的大部分功能仍可正常工作。经测试,Pigsty 也可直接用于监控 MatrixDB、GreenPlum 等 PostgreSQL 衍生/兼容数据库产品。


配置模板精简

配置模板被进一步精简:现在只有两种模板:生产环境(默认)与 沙箱环境

规格参数模板更加丰富,提供平滑过渡的规格选项:

规格 配置 说明
tiny 1C1G 最小测试规格
mini 2C4G 开发环境规格
small 4C8G 小型生产规格
medium 8C16G 中型生产规格
large 16C32G 大型生产规格
oltp/olap/crit 64C400G 专业生产规格

在配置过程中,安装向导会自动根据机器规格选择对应的参数模板。

configure

Pigsty 始终保持 ./configure && make install 一行命令完成安装的优良传统。


实用工具剧本

新增 pgsql-migration 剧本可自动生成数据库迁移所需的命令、脚本与手册,使基于逻辑复制的在线不停机数据库迁移变得简单(已在生产环境迁移数十套数据库)。

pgsql-audit 剧本可根据审计需求生成对应数据库实例的审计报告。


示例应用

v1.2 提供两个新的 Pigsty App 示例:

AppLog - 用于可视化 Apple iOS15 新隐私日志的应用,可以展示哪些应用访问了哪些权限。

applog

WorkTime - 查询中国各大公司工作休息时间的应用。

worktime

两个应用功能简单但实用,开发只用了不到一小时。Pigsty 在产出具有基本功能的应用原型时是一个非常趁手的工具。


后续规划

PGSQL v8 - 提供更加层次分明的监控面板组织,面向不同用户群体提供不同的主题视图。

pgsql-v8

PGCAT v2 - 提供更为丰富的系统目录导航浏览功能。

pgcat-v2

REDIS v1beta - Redis 经常与 PostgreSQL 搭配使用,后续版本会将 Redis 部署与监控整合为完整的解决方案。

redis-v1

v1.2.0 更新日志

核心功能

  • 默认使用 PostgreSQL 14 版本
  • 默认使用 TimescaleDB 2.5 扩展
  • TimescaleDB 和 PostGIS 默认在 CMDB 中启用

仅监控模式

  • 仅通过可连接的 URL 即可监控现有 PostgreSQL 实例
  • 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_tunepg_conf 模板
  • 重做膨胀相关视图,公开更多信息
  • 删除 TimescaleDB 和 Citus 的内部监控
  • 新增 pgsql-audit.yml 剧本用于创建审计报告
  • 所有配置模板简化为两种:auto 和 demo

错误修复

  • pgbouncer_exporter 资源所有者改为 {{ pg_dbsu }} 而不是 postgres
  • 修复执行 REINDEX TABLE CONCURRENTLY 时 pg_exporter 在 pg_table/pg_index 上的重复指标问题

升级说明

v1.2.0 中没有 API 变更,仍可使用旧的 pigsty.yml 配置文件(PG13)。对于基础设施部分,重新执行 repo 将完成大部分工作。

对于数据库,可继续使用现有的 PG13 实例。涉及 PostGIS 和 TimescaleDB 等扩展时,就地升级较为复杂,推荐使用逻辑复制进行数据库迁移。新增的 pgsql-migration.yml 剧本将生成一系列脚本,帮助实现近乎零停机时间的集群迁移。

2.33 - Pigsty v1.1:主页,Jupyter,Pev2,Pgbadger

原文发布于 VONNG

好消息,好消息,时隔一月,开箱即用的开源 PostgreSQL 发行版 —— Pigsty 正式发布 v1.1 版本!v1.1 带来了一些非常不错的特性,主要是关于基础设施的(毕竟部署好的数据库没人想去动它)。以下是更新摘要。

图片

全新的首页

一直以来,Grafana 监控系统中的 Home Dashboard 都扮演着 Pigsty“主页”的角色,现在 Pigsty 终于有一个看上去还不错的独立的主页啦。如果想知道主页是什么样子,可以访问公开演示:http://home.pigsty.cc

图片

比较熟悉 Pigsty 的用户可能一下子就能看出来,这不就是文档站抽出来改了一改吗?哈哈是的,这个首页就是一个本地版的文档站,由默认的 Nginx 提供服务。

服务导航

这个主页提供了前往 Pigsty 各个服务组件的导航,包括以前就有的:Consul,Grafana,Prometheus,AlertManager,以及在 1.1 中新引入的 PGWebJupyter Lab。您可以直接点击首页正中的组件名称/URL,或通过导航栏右上角的Service下拉菜单进入。

监控导航

首页现在也可以呈现 Pigsty 部署中的集群与实例(可选),并提供到具体集群、实例的监控首页,流量的管控界面的的直接跳转。

图片

应用导航

右上角的 App 下拉选单将成为 Pigsty 扩展功能的入口,在 1.1 中,Pigsty 自带了几个实用而有趣的应用。这些应用都可以通过配置选项添加。

图片

本地文档\

在 Pigsty1.1 中,您可以直接从 Pigsty 首页访问本地离线文档,包括中英双语。

图片

Jupyter Lab

如果您曾使用 Python 进行数据分析,那么 Jupyter 一定不会陌生。Pigsty v1.0.0 打包了 Jupyter Lab 软件包,而 v1.1 则更进一步,将其放入原生支持中。在演示与个人配置模板中,Jupyter Lab 默认启用,在生产环境部署中则默认不启用。

图片

您可以通过 Jupyter Notebook,高效,敏捷地提取数据,处理、分析、转换、并进行可视化,组合使用 Python 与 SQL 的强大能力。(当然您也可以继续使用 Pigsty 提供的 Grafana 与 Echarts 进行可视化)

图片

当然,强大与便利往往也蕴涵着风险。Jupyter 执行任意代码的能力对于生产环境仍然是一个过于冒险的配置,因此默认不会在生产环境配置模板中启用。

PGWeb

作为一个开箱即用的数据库发行版,提供一个开箱即用的图形化客户端工具也是非常重要的。PGWEB 是一个使用 Go 编写的,小巧的,基于浏览器的 Postgres 图形客户端

图片

与 Jupyter 类似,PGWEB 在演示与个人配置模板中默认启用,在生产环境部署中则默认不启用。但 PGWEB 要求用户拥有访问数据库的连接串,因此相对安全,可以用于生产环境中个人用户查询少量数据的场景。

图片

用户可以浏览数据库中的模式、对象。快速浏览表中的数据,执行查询等。

PEV2

Pev2 是一个实用的执行计划分析器,可以把 PostgreSQL 查询 EXPLAIN 的结果转换为一颗直观的执行计划树。

图片

这个工具对于优化慢查询,分析 auto_explain 结果都非常好用。

PGBadger

PGBADGER 是一个非常好用的 Postgres 日志分析组件,可以从 CSV 日志中快速生成精美全面的分析报告。

使用bin/pglog-summary [ip] [date] 即可拉取特定节点特定日期的日志,并创建日志分析报告。

图片

为该命令添加 Crontab,即可每天、或准实时地自动生成数据库运行报表。

软件更新

PostgreSQL 14 已经正式发布了,Pigsty v1.1 也第一时间进行了跟进与支持。pigsty-pg14 模板已经可以在生产环境中创建默认版本为 14 的 PostgreSQL 数据库了。但因为 PostgreSQL 的一个重要三方扩展 TimescaleDB 尚未正式支持 PG14 (预计时间 10-30),因此 PG14 还不是 Pigsty 的默认数据库版本。

Pigsty 将于 v1.2 进行默认 PG 版本升级,将默认数据库版本升级为 PG14。

图片

此外,其他软件也都有升级:

  • postgres 升级至 v13.4

  • pgbouncer 升级至 v1.16 (新增 2 监控指标)

  • 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

新的剧本:数据库迁移

Pigsty 内置了一个 数据库在线迁移的辅助脚本:pgsql-migration.yml,提供了一个开箱即用的基于逻辑复制的不停机数据库迁移方案。

填入源集群与宿集群相关信息,该剧本即会自动创建出迁移中所需的脚本,在数据库迁移时只需要依次执行即可,包括:

图片图片

新的应用:苹果隐私日志可视化

最后,Pigsty 的自带的默认演示应用里又多了一个:苹果应用隐私日志可视化(APPLOG),您可以在 iOS15 系统中导出应用程序访问隐私的记录,并在此应用中进行可视化,细节可以参考公众号前一篇文章 《 微信读相册这点事 》。

图片

图:微信大清早偷偷访问我的相册长达 4 分钟

图片

一些有趣的小功能

部署好的数据库没人想去动它,但 Pigsty 还是在 v1.1 加入了一个数据库实例上的新特性:Dummy file。原理很简单,创建一个一定尺寸(例如 1~4GB)的/pg/dummy,这样当出现磁盘写满的故障时(通常很多操作都无法正常完成了),只需要将其删除,就可以释放出一定的应急空间来。

这个功能非常实用,但对于已经创建好的数据库实例而言,手动ddfilealloc一个就可以与新版本保持一致,或者彻底无视也没有关系。

此外,v1.1 中还添加了 promscale 的安装包,这是一个有趣的组件,可以将 Prometheus 的时序数据存储替换为 TimescaleDB(Postgres),文档中的教程也更新了如何替换的细节。

Enjoy!

其他

此外,还有一些 Bug 与小问题的修复,文档的例行完善等

变更细节

图片

v1.1.0 更新日志

功能增强

  • 增加 pg_dummy_filesize 以创建文件系统空间占位符
  • 主页大改版
  • 增加 Jupyter Lab 整合
  • 增加 PGWeb 控制台整合
  • 增加 PgBadger 支持
  • 增加 PEV2 支持,执行计划可视化工具
  • 增加 pglog 工具

软件升级

  • 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
  • 修复 pg_exporter 配置目录属主问题(改为 {{ pg_dbsu }}

升级说明

此版本主要变动是 TimescaleDB,使用 TimescaleDB License(TSL)的官方版本替代了 PGDG 仓库中 Apache License v2 的版本。

# 停止带有 timescaledb 的 postgres 实例
yum remove -y timescaledb_13

# 添加 TimescaleDB 官方仓库
[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

发布版本:微信公众号

2.34 - Pigsty v1.0:正式发布,监控大修

原文发布于 VONNG

GitHub Release | 发布注记 | 微信公众号

经过一年多的迭代与打磨,Pigsty 正式发布 v1.0.0 GA 版本。

Pigsty (/ˈpɪɡˌstaɪ/) 是 PostgreSQL In Graphic STYle 的缩写,即"图形化 Postgres"。


Pigsty 是什么?

Pigsty 是一个 开箱即用的 PostgreSQL 数据库发行版,将生产级的集群部署、扩容缩容、主从复制、故障切换、流量代理、连接池、服务发现、访问控制、监控系统、告警系统、日志采集解决方案集成封装为发行版。一次性解决在生产环境与各类场景下使用 世界上最先进的开源关系型数据库 —— PostgreSQL 时会遇到的问题。

定位 说明
发行版 开箱即用的 PostgreSQL 发行版
监控系统 全面专业的 PostgreSQL 监控系统
部署方案 简单易用的 PostgreSQL 高可用部署方案
沙箱环境 便捷全能的本地沙箱与数据分析可视化环境
开源软件 自由免费,基于 Apache 2.0 协议开源

核心特性

whatwherewho

发行版

所谓发行版,是指由数据库内核及其一组软件包组成的数据库 整体解决方案。例如,Linux 是一个操作系统内核,而 RedHat、Debian、SUSE 则是基于此内核的操作系统发行版。PostgreSQL 是一个数据库内核,而 Pigsty、BigSQL、Percona、各种云 RDS 则是基于此内核的数据库发行版。

distro

作为数据库发行版,Pigsty 的核心特性:

  • 全面专业 的监控系统
  • 简单易用 的部署方案
  • 稳定可靠 的高可用架构
  • 便捷全能 的沙箱环境
  • 免费友好 的开源协议

开箱即用

所谓 开箱即用(Battery-Included):用户只需一台刚装完系统的虚拟机,一行命令,10 分钟内即可完成基础设施、数据库、监控系统、管控平台的安装,进入可用状态。

Pigsty 将 部署监控 做到极致,让大规模数据库集群的部署实施、管理运维、设计使用这些门槛颇高的工作,成为普通研发人员即可轻松搞定的事情。

面向专业用户,Pigsty 提供最全面专业的监控系统;面向大众用户,Pigsty 提供最简单易用的部署方案。 此外,针对数据研发人员,Pigsty 还集成了 JupyterLab、Echarts 等实用工具,可作为数据研发与可视化的集成开发环境。

battery

监控系统

Pigsty 带有一个针对大规模数据库集群管理而设计的专业级 PostgreSQL 监控系统。包括约 1200 类指标、20+ 监控面板、上千个监控仪表盘,覆盖从全局大盘到单个对象的详细信息。与同类产品相比,在指标覆盖率与监控面板丰富程度上一骑绝尘,为专业用户提供无可替代的价值。

一个典型的 Pigsty 部署可以管理几百套数据库集群,采集上千类指标,管理百万级时间序列,并将其精心组织为上千个监控仪表盘,交织于几十个监控面板中实时呈现。从全局大盘概览,到单个对象(表、查询、索引、函数)的细节指标,如同实时的核磁共振/CT 机一般,将整个数据库剖析得清清楚楚,明明白白。

dashboards

监控面板什锦

pgsql-overview

单查询监控

pgsql-query

单表监控

pgsql-table

单实例主题监控面板

pgsql-instance

三大核心应用

Pigsty 监控系统由三个紧密联系的核心 应用 共同组成:

PGSQL - 收集并呈现监控指标数据

pgsql-instance

PGCAT - 直接浏览数据库系统目录

pgcat

PGLOG - 实时查询搜索分析数据库日志

pglog

Pigsty 监控系统基于业内最佳实践,采用 Prometheus、Grafana 作为监控基础设施。开源开放,定制便利,可复用,可移植,没有厂商锁定。可与已有 PostgreSQL 数据库实例集成,亦可用于其他数据库或应用的监控与管理(例如 Redis)。


部署方案

数据库是管理数据的软件,管控系统是管理数据库的软件。

Pigsty 内置了一套以 Ansible 为核心的数据库管控方案,并基于此封装了命令行工具与图形界面。它集成了数据库管理中的核心功能:包括数据库集群的创建、销毁、扩缩容;用户、数据库、服务的创建等。

Pigsty 采纳 Infra as Code 的设计哲学,使用类似 Kubernetes 的声明式配置,通过大量可选的配置选项对数据库与运行环境进行描述,并通过幂等的预置剧本自动创建所需的数据库集群,提供私有云般的使用体验。

用户只需通过配置文件或图形界面描述"自己想要什么样的数据库",而无需关心 Pigsty 如何去创建或修改它。Pigsty 会根据用户的配置文件清单,在几分钟内从裸机节点上创造出所需的数据库集群。

iac

对于不习惯配置文件与 Ansible 剧本的用户,Pigsty 亦提供了可选的 CMDB 模式与 CLI/GUI 工具封装常用操作。

gui

对于专业用户,Pigsty 提供了 160+ 可配置参数,允许对数据集群、基础设施运行时的方方面面进行配置与定制。而新手亦可在完全不修改配置的前提下,创建出相当可靠的数据库集群。


高可用集群

Pigsty 创建的数据库集群是分布式、高可用的数据库集群。从效果上讲,只要集群中有任意实例存活,集群就可以对外提供完整的读写服务与只读服务。

数据库集群中的每个数据库实例在使用上都是幂等的,任意实例都可以通过内建负载均衡组件提供完整的读写服务。数据库集群可以自动进行故障检测与主从切换,普通故障能在几秒到几十秒内自愈,且期间只读流量不受影响

Pigsty 的高可用架构久经生产环境考验,以极小的复杂度实现了完整的高可用方案,让传统主从架构的数据库用出分布式数据库的感觉。

ha-arch

默认接入方式架构(DNS+L2VIP+HAProxy,共 7 种)

failover

沙箱环境

使用 PostgreSQL 不仅仅是企业,还有许许多多个人用户:用于软件的开发、测试、实验、演示;或者是数据的清洗、分析、可视化、存储。然而如何搭建环境往往成为用户面前的第一道拦路虎。

Pigsty 沙箱旨在解决这一问题,可以一键在笔记本或 PC 机上拉起完整的生产级 PostgreSQL 服务(通过 Vagrant 调用 VirtualBox 自动创建所需的虚拟机)。默认沙箱为单节点(2 核 4G),带有各类实用工具,可服务于各种用途。此外,还有四节点版本的完整版沙箱,可用于搭建生产仿真环境,充分探索 Pigsty 高可用架构与监控系统的能力。

sandbox

四节点沙箱环境架构示意图


数据分析

Pigsty 提供了 PostgreSQL 作为后端数据库,JupyterLab Python 集成开发环境,Grafana 前后端运行时,以及 Grafana Echarts Panel 用于进行高级可视化。这些工具构成了数据处理、分析、开发数据应用的一整套完整工具组合。

可基于 Pigsty 环境进行数据分析,快速产出数据应用 POC Demo,并通过标准化的方式进行打包、分发、部署、发布。Pigsty 项目中自带两个数据应用样例:

COVID - 疫情数据可视化应用

covid

点击查看单个国家详情与时间线地图

ISD - 全球地表气象站历史数据查询应用

isd

点击查看单个气象站详情与历史气象要素数据


路线图

roadmap-1roadmap-2

开源

Pigsty 基于 Apache 2.0 协议开源,可免费用于商业目的,但改装与衍生需遵守 Apache License 2.0 的显著声明条款。

Pigsty 的宗旨是:用好 数据库,用 好数据库

让中小企业用户真正拥有"自主可控"的选择,让所有人都能轻松享受 PostgreSQL 的乐趣。


v1.0.0 更新日志

监控系统全面改进

  • 在 Grafana 8.0 上新增仪表盘
  • 新的度量定义,增加 PG14 支持
  • 简化的标签系统:静态标签集(job, cls, ins)
  • 新的警报规则与衍生度量
  • 同时监控多个数据库
  • 实时日志搜索 & csvlog 分析
  • 链接丰富的仪表盘,点击图形元素进行深入/汇总

架构变更

  • 将 Citus 和 TimescaleDB 加入默认安装部分
  • 增加对 PostgreSQL 14beta2 的支持
  • 简化 HAProxy 管理页面索引
  • 通过添加新角色 register 来解耦基础设施和 PGSQL
  • 添加新角色 lokipromtail 用于日志记录
  • 为管理节点上的管理员用户添加新角色 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 脚本 createpgcreatedbcreateuser
  • 添加 CMDB 动态库存脚本:load_conf.pyinventory_cmdbinventory_conf
  • 移除过时的剧本:pgsql-monitorpgsql-servicenode-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 以减少开销

2.35 - 开箱即用的PGSQL发行版Pigsty —— v1.0 beta发布

原文发布于 VONNG

经过了半个月的 Alpha 阶段,Pigsty 于 7 月 15 日发布了v1.0.0-beta,并进入功能冻结状态,进行最后的生产测试。不出意外的话v1.0.0 GA将于2021-07-31如期与大家见面。

v1.0.0-beta 监控系统的公开 Demo 已经上线:http://g.pigsty.cc

Pigsty 里程碑记

一年多的时间,一个人的力量,Pigsty 能走到现在这一步,已经远远超过了我的预期。

最开始它只是一个用来演示概念的沙箱环境,随即又成为我自己用来管理数据库的软件。后来又经过一年多的打磨,现在已经成为一个通用的、完整的,解决实际问题的软件产品,被不同行业的用户真正运行在生产环境中。而其定位也从监控系统和演示沙箱,发展到了 数据库发行版 这样宏大的目标。回头看看,还是很让人感慨的:日积跬步,竟能走到这样的程度。

图片

图:Pigsty 项目里程碑

v1.0.0 是这样一个里程碑:在我自己看来,Pigsty 已经足够好,值得我用自己的声誉来担保它足够好用。在 v1.0.0 以后,我会继续维护 Pigsty,可以承诺 Pigsty 会始终跟上 PostgreSQL 大版本迭代的脚步。毕竟一个开源项目灌注了作者的心血,就像自己的孩子一样。父母总是孩子的港湾,最起码我自己就是最大的用户(200+节点)。不用担心 Pigsty 会死掉,还是有老可以啃的(^ω^)

在 v2.0.0 前,现有数据库部署架构上都不再会有变化,毕竟部署好的数据库没几个人会想去折腾,稳定才是最重要的。v1.0.0 后的更新主要会集中在监控系统与基础设施部分,而这一部分是很容易升级的。v1.0.0 后续任何涉及到架构调整的版本都会给出升级的解决方案,所以 1.0.0 可以放心用于生产环境。

v1.0.0 的变化

1.0 相比 0.9 的最大改进,在于完全重制了监控系统,基于 PG 14 设计了全新的指标体系,并基于 Grafana 8.0 对监控面板进行了整体性重制。Pigsty 的监控面板有自己的版本号,而这是第 7 个大版本。

图片

图:重制后的监控系统概览(v7)

相比 v6 30+的监控面板,目前 v7 只是重制了其中的一半左右。一部分专题监控面板没有移植,不过问题不大,因为监控面板本身就是持续更新改进的,后面会进一步充实。而且现阶段的监控面板绝对足以满足日常管理与分析需求。

图片

图:重制前的监控系统概览(v6)

更多关于 v1.0.0 监控系统变化的详情,可以拉到本文末尾查阅

对于不了解 Pigsty 的朋友,这里我再简单介绍一下这个产品与项目。

Pigsty 简介

图片图片

一句话:Pigsty 是开箱即用的开源 PostgreSQL 发行版

这里有三个关键字:发行版开源开箱即用

发行版

所谓发行版(Distribution),指的是由数据库内核及其一组软件包组成的数据库整体解决方案。例如,Linux 是一个操作系统内核,而 RedHat,Debian,SUSE 则是基于此内核的操作系统发行版。PostgreSQL 是一个数据库内核,而 Pigsty,BigSQL,Percona,各种云 RDS,则是基于此内核的数据库发行版。

内核非常重要,但用户所接触到的往往都是发行版。Linux 的内核只有几 MB,但整个操作系统安装盘却往往有几 GB的大小。这些软件工具集围绕着内核组成了一整个系统,这样才构成了一个完整可用的操作系统。

数据库亦然。一个在现实世界生产环境运行的数据库,也需要基础设施、运行时、工具来协同数据库内核一同工作。这就是数据库发行版。例如,Oracle,EnterpriseDB,本质上售卖的都不是数据库内核,而是数据库发行版,或者更进一步,运行中的数据库发行版服务(各种云数据库)。因为采用了友善的协议,有很多数据库发行版都是基于 PostgreSQL 内核的:

图片

图:PostgreSQL 及其衍生数据库发行版

(顺带一提,“国产数据库”的半壁江山都是 PostgreSQL 换皮,不在此列)

PostgreSQL 是世界上最先进的开源关系型数据库,它是一个接近完美的数据库内核,比肩 Oracle,代码严谨,设计优雅,功能丰富,具有强大的可扩展性,更重要的是采用类 BSD 协议开源,让所有人都可以免费获取到最先进的数据库内核

但只有内核是远远不够的,PostgreSQL 的生态系统里缺少一个开源的数据库发行版,而 Pigsty 便旨在填补这一空白生态位

一个发行版就像一颗鸡蛋,有蛋壳(品牌),蛋清(软件工具),蛋黄(内核)。有一些优秀的数据库厂商,例如 Postgres Pro,EnterpriseDB,在**蛋黄(内核)上做了很多工作。而一些数据库厂商,则是在蛋壳(换皮)**上钻研。有的厂商比较中庸,几样都粘一点,内核稍微改一点,在蛋清上做一些自己的管理软件,然后套上蛋壳。

Pigsty 的工作主要集中于蛋清部分,它的内核就是纯粹的原生 PostgreSQL,它的核心定位就是向用户交付开源的,开箱即用数据库解决方案

图片

图:Pigsty 数据库发行版

**

Pigsty 并集成打包了 PG 生态中最强大的三个扩展插件:地理空间 PostGIS,时序数据 Timescale,分布式集群 Citus,这几个每一个都足以视作一个新数据库内核,但它们仍然选择拥抱 PostgreSQL,成为一个 PG 的的扩展插件。

作为一个数据库发行版,Pigsty 区别于其他发行版的五个核心特性为:

  • 全面专业的监控系统

  • 稳定可靠的部署方案

  • 简单省心的用户界面

  • 灵活开放的扩展机制

  • 免费友好的开源协议

更多关于 Pigsty 的介绍,可参阅 开箱即用的 PostgreSQL 发行版:Pigsty

开箱即用

所谓 开箱即用(Battery-Included),就是说用户现在有一台刚装完系统的虚拟机,一行命令,在 10 分钟内完成基础设施、数据库,监控系统,管控平台的安装,立刻进入生产可用状态。

更直截了当的说,让大规模数据库集群的部署实施,管理运维,设计使用这种门槛很高的事情,成为普通 DBA/Dev/Ops 几分钟就能搞定的事情。

降低数据库的使用门槛,核心就是两件事:部署监控,以 TiDB 类比的话,就是 tiup 和 tidashboard 这样的组件。所以,Pigsty 的核心功能聚焦在供给方案与监控系统这两个部分:面向专业用户,提供最全面专业的监控系统;面向大众用户,提供最简单易用的供给方案。

监控系统

图片

Pigsty 是一个数据库管理工具,核心用户群是 DBA,以及 Dev 与 Ops。管理数据库当然也是算管理,遵循管理学一般原理。

什么叫管理?从词源理解,通过施加控制(管)使得事物按规律(理)运行。实行有效控制,最重要的就是有 Measurement。正如名言所说:“you can’t manage what you can’t measure”。想要管理任何事物,都要先获取信息,对关键指标进行度量,才能采取正确的行动。监控监控,监就是看,控就是管。用什么看?监控系统。所以说,监控系统是管理的核心工具,是进行有效管理的基本要求。

当然按这种思路的话,健康码通信大数据是监控系统,金盾天网智慧城市是监控系统,核磁共振/CT 扫描也是监控系统。全知即全能,只有对数据库中所有指标了然于胸,才能真正将数据库玩弄于股掌之中。人与动物的最大区别就是人会使用工具,而高效的管理需要趁手的工具。

一个典型的 Pigsty 部署可以管理几百套数据库集群,采集上千类指标,秒级抓取百万级时间序列,精心组织为几百个监控面板,交织于几十个 Dashboard 中实时呈现。\

如果说传统的数据库巡检就像听诊器,血压计之类的赤脚大仙级装备,那么Pigsty 就是数据库监控的核磁共振/CT 机,而且是实时出片,把整个数据库的方方面面剖析的明明白白

在监控这一点上,在我的已知范围内,Pigsty 在这个细分领域做到了世界最好。即使是商业产品,目前也没看到在可观测性上有任何可以构成替代的产品。

说到底,Pigsty 就是源于没有能满足我需求的产品,我才自己去做的。我行我上,这一点还是比较让人自豪的。

部署与管控

图片

当然,Pigsty 不仅仅是监控系统,它还是一套“供给方案”。“管理”这件事是有一个主体的:如果没有数据库本身,那么再好的监控系统也无用武之地。所以 Pigsty 集成了一套完整的数据库解决方案,这个解决方案主要关注易用性的问题。说到底,很多人管理数据库还处于原始人阶段。差不多类似于

yum install postgresql13 && systemctl start postgresql

这样子肯定是不行的,自己玩一玩是没有问题的,但在真实生产环境中这样用就是在埋地雷。运气好马照跑舞照跳,运气差,就是救火删库跑路上吊。

但是太复杂的东西,新手也不会用。而 Pigsty 供给方案主打的特色就是便利,概括一下就是:一台机器(2 核 2G),一条命令,10 分钟,全家桶就位。提供类似于Postgres.app,minikube,tiup这样的丝滑体验。将创建/销毁集群,集群扩缩容,用户/数据库管理这几个核心功能做到极致,在 PostgreSQL 数据库管理这个细分领域比 Kubernetes 还简单好用得多才行。

以安装为例

git clone https://github.com/Vonng/pigsty && cd pigsty && ./configure && make install

同样是一行命令的安装,Pigsty 就能在你的环境中部署一整套完整的生产级解决方案。那肯定是比 yum install && systemctl start 要高到不知道哪里去了。

图片图片

图:Pigsty 单节点架构图

以部署为例

Pigsty 部署的数据库集群都是高可用、故障自愈、自带连接池、负载均衡、服务发现,完整监控,几乎无需人工介入。而且集群中的每个成员从效果上讲是等价的。任何一个成员都以提供所有服务(读写/只读)。只要集群中还有一个实例存活,整个集群对外提供的服务就不会中断。感觉上就像是在用分布式数据库一样。

图片

图:Pigsty 部署的数据库集群(沙箱 pg-test 三节点演示集群)

而新增这样一套数据库所需的配置工作也少的可怜,基本上只需告诉 Pigsty 你想在哪几台机器上部署一个集群,里面有什么数据库和什么用户这样的最基础的信息。\

图片

然后执行命令即可根据配置文件创建出数据库集群来

bin/createpg   pg-test       # 创建pg-test集群
bin/createuser pg-test test  # 在pg-test集群中创建test用户
bin/createdb   pg-test test  # 在pg-test集群中创建test数据库

对于专业用户来说,有着 160+参数可以对数据库与运行时基础设施进行精细的定制。对于新手小白,什么都不配置也可以创建出非常不错的数据库:带有基本的用户角色,权限系统,配置好了所有默认权限,安装好了常用的扩展。Citus,TimescaleDB,PostGIS 这些的强力扩展也可以在配置中指定安装,或使用 CREATE EXTENSION 事后一键安装。

图片

图:如果你真的连命令都懒得敲,这儿还有个可行的 GUI/CLI 工具

在管控部署这一点上,我自认为在易用性上做到了极致。在系统设计中把面向用户的复杂度压到了最小的程度:你只要有台机器(甚至只要有自己的笔记本),会敲一行命令就可以搞数据库了。Pigsty 可以说让世界上最先进的开源关系型数据库 PostgreSQL 的使用门槛降低到了一个全新高度。这也是一件值得自豪的事情。

开源

图片

Once open source gets good enough, competing with it would be insane.

Larry Ellison —— Oracle CEO

在软件行业,开源是一种大趋势,互联网的历史就是开源软件的历史,IT 行业之所以有今天的繁荣,人们能享受到如此多的免费信息服务,核心原因之一就是开源软件。开源是一种真正成功的,由开发者构成的 communism(译成社区主义会更贴切):软件这种 IT 业的核心生产资料变为全世界开发者公有,人人为我,我为人人。

一个开源程序员工作时,其劳动背后其实可能蕴含有数以万计的顶尖开发者的智慧结晶。通过开源,所有社区开发者形成合力,极大降低了重复造轮子的内耗。使得整个行业的技术水平以匪夷所思的速度向前迈进。开源的势头就像滚雪球,时至今日已经势不可挡。除了一些特殊场景和路径依赖,软件开发中闭门造车搞自力更生已经成了一个大笑话。

依托开源,回馈开源。Pigsty 采用了友好的 Apache License 2.0,可以免费用于商业目的。Pigsty 永远欢迎任何人的反馈与贡献。只要遵守 Apache 2 License 的显著声明条款,也欢迎云厂商与软件厂商集成与二次研发商用。

A system cannot be successful if it is too strongly influenced by a single person. Once the initial design is complete and fairly robust, the real test begins as people with many different viewpoints undertake their own experiments.

Donald Knuth

发展规划

Pigsty 有极大的 Potential,假以时间与资源,它可以成为一个 Game Changing 的开源项目。例如:

Pigsty 可以选择专注于产出更多更丰富的监控面板,做最好的开源 PG 监控系统

制作一系列基于此的数据应用与数据分析 &可视化作品,进一步丰富应用场景与案例

添加对 PostgreSQL衍生版本的支持,例如 Citus,Greenplum,PipelineDB,openGauss

专注于容化与 Kubernetes Operator 开发,拥抱云原生

提高操作系统兼容性,支持 SUSE(已有),Debian,Ubuntu 等其他 Linux 发行版;

选择海纳百川,用同一套现成的运行时监控管理其他开源数据库。

这些都是很有价值的事情,而且不仅仅是 PostgreSQL,也可以把 Redis(已有),MongoDB,甚至是 MySQL 都搞进来。让所有有意愿的用户用好数据库,用好数据库。形成合力,掀翻云厂商垄断,让优质的数据库重新成为人人可以拥有,人人可以使用的自由软件。

但即使最为天才的个人,也难以在合理的时间内完成这么多任务。只有凝聚社区的力量,才能将这样的事情推进下去。v1.0.0 就是这样一个里程碑:Pigsty 已经足够成熟,作为一个成年的项目,将走出自己的道路。1.0 后,我将逐渐专注于 Pigsty 社区建设与推广,顺便修养一段时间。这个项目能走到哪一步,就让我们拭目以待吧!

如果有什么问题,欢迎 加入 Pigsty 交流群。

了解最新进展,体验最新特性,答疑与故障排查,吹牛唠嗑灌水。

图片

Pigsty v1.0.0 监控系统变更

兼容性

v6 与 v7 的监控面板并不兼容。主要原因有二:第一是使用的监控指标体系发生了显著变化。第二是底层基础设施 Grafana 从 v7 升级到了 v8,这是一个重大版本变化(甚至连开源协议都改了)。但个人认为 Grafana 8.0 带来的用户体验改善非常显著的,还是很值得升级的,很多图表重制后给人完全不一样的感受。

图片

图:新监控系统首页

设计风格变更

Pigsty 监控面板(v7)基于 Grafana 8.0 提供的诸多新特性彻底重制。采用了新的设计风格,给人带来焕然一新的用户体验。另外,这一版基于用户反馈采用了新的分级设计与主题化拆分理念:所有的导航监控面板(Overview,Cluster,Instance,Database)都比较简洁,只呈现关键核心指标,并提供到专门主题监控面板的导航

图片

图:新的 PGSQL Cluster 监控面板

可以从这里直接前往集群内的:实例,节点,服务,负载均衡器,数据库,告警,流量管理界面

主题化面板

采用简洁导航+专业主题面板的一个好处就是,普通开发者和新人用户不会因为海量的监控指标与面板感到困扰,而专业用户则仍然可以通过进入主题面板获取所有的细节信息。拆分后的主题面板更为紧凑专注,因此打开与渲染速度更快,而且可以围绕一类核心问题快速给出洞察。

图片

图:新的 PGSQL Queries 主题面板,关注单个实例内的所有查询类指标

图片

图:新的 PGSQL Session 主题面板,关注单个实例内的所有会话类指标\

交互式导航

v1.0 监控面板最给力的改进是:绝大多数监控图表现在都可以进行交互点击了。例如在上图中,如果您从饼图中发现某一个查询执行所耗费的时间非常显著,希望查阅该查询的详细指标。那么只要点击对应的图形元素即可跳转至 PGSQL Query 面板并加载对应查询的数据。

以往当我们从图表中发现异常值时,通常要从图例中找到这个查询的 ID,然后再手工查找或复制 ID 执行查询。现在就可以直接点击图形元素「点、线、面」跳转。用户体验有了飞跃式的提升。

图片

****图:新的 PGSQL Database 监控面板,可直接跳转至表或查询的详情 ****

用户可以快速进行下钻上卷横跳,而跳转也不仅仅局限在 Grafana 中。比如,可以直接点击负载均衡器跳转到 Haproxy 流量管理界面,也可以点击报警事件条直接跳转到AlertManager查阅或直接屏蔽告警。\

图片

自动注册数据源

在 1.0 中,所有由 Pigsty 托管的 PostgreSQL 都会在创建数据库与集群时,自动注册 PostgreSQL 数据源至 Grafana

图片

图:自动注册的 PG 数据源,名称为:ins.db

这带来了很多新的可能性,例如:直接从监控系统中查阅浏览系统目录,获取关于某一个具体的表和某一类查询的详细信息,目录数据监控系统中的指标数据可以相互印衬,提供更全面的信息。一个典型的场景就是:用户不需要登陆数据库查阅pg_stat_statements以将 QueryID 转换为具体的 SQL 语句了。

图片

图:CATATLOG 视角下的查询(包含语句与历史统计)

点击 QueryID 可以跳转至 Metrics 视角下的查询

图片

图:Metrics 视角下的查询指标,可以与 Catalog 交叉对比。

关注单个表的详情的 PGSQL Table 监控面板。详细展示了一张表上的增删改查,扫描与访问,IO 与命中率,垃圾清理与分析活动,所有相关索引以及其上的访问,与表相关的函数与序列号相关访问指标。同时点击 Relation 还可以跳转到 PGCAT Table 从数据字典的角度查阅这张表的详细信息。

图片

图:新的 PGSQL Table 主题面板,从监控指标的角度分析表********\

图片

图:新的 PGCAT Table 主题面板,从系统目录的角度分析表\

使用 PGLOG 应用分析 CSVLOG 样本

尽管基于LokiPromtailPGLOG Instance 监控面板已经允许用户实时查询与搜索数据库日志(Postgres,Pgbouncer,Patroni)。但 grep 毕竟功能有限,对于更进一步的精细分析则有些力不从心。一个典型的场景就是故障现场的日志分析,靠人眼看原始日志是很低效的。但是通过 Pigsty v1.0 内置的新应用 pglog,我们就可以快速定位问题日志,并使用 SQL 对日志进行深度处理与分析。

pglog 是一个分析 PG CSV 日志的数据应用。您只需要在管理节点上使用一条简单的命令,即可将数据库日志导入 Pigsty MetaDB 中进行分析:

# 获取当前节点当天的日志

catlog | pglog\

# 获取特定节点node-1具体某一天2021-07-15的日志

catlog node-1 ‘2021-07-15’ | pglog

# 实际上干的事情就是把CSV日志灌入样本

COPY pglog.sample FROM STDIN CSV;
图片

图:PGLOG Analysis 面板,基于日志样本进行分析并呈现

点击左上方的 AutoZoom 按钮即可将时间轴缩放至日志样本的时间范围上。

这里,用户可以在日志分布图上直接拖选时间范围,几次缩放就可以定位到毫秒级现场。通过 TimePickle 快速筛选,日志也会随之联动。发现错误日志后,可以点击日志项的 Session ID 字段连接,跳转到 PGLOG Session 面板查阅错误发生时的上下文详情

图片

**\

图:PGLOG Session 面板,专注于日志样本中的单条连接

PG Session 会展示这条数据库连接相关的所有日志,并将日志事件以 Annotation 注解的方式显示在图表上。

使用注解

Grafana 提供了 注解(Annotation) 机制用于呈现离散事件。在 Pigsty v1.0.0 中,诸如表的垃圾回收(Vacuum),实例的检查点(Checkpoint) 都会使用注解的方式标记在图标上。

图片

图:关注单个实例持久化主题的 PGSQL Persist 面板

使用蓝线标注周期性检查点,使用红线标注手工检查点。

例如,PostgreSQL Checkpoint 会使一些指标出现显著抖动。将 Checkpoint 事件标记在图标上,可以让用户一眼识别出指标的变化是否来自检查点,从而提高问题定位的效率。

报警规则重制

Pigsty v1.0.0 彻底梳理了所有的告警规则,现在告警系统有两种等效实现:Prometheus + AlertManager,以及 Grafana。前者更为专业,可定制化更强,便于与外部系统对接;后者更为灵活方便,可以集成不同数据源进行报警,并在告警消息中附带截图与连接。您可以同时使用这两种告警系统,互为备份。

图片

图:PGSQL Alert 面板

其他有趣的改进

限于篇幅,这里就不再一一列出。更多信息,敬请关注本公众号,Github Repo

,官方文档站,或加入末尾的微信群。


发布版本:微信公众号

2.36 - 开箱即用的PG发行版:Pigsty

原文发布于 VONNG

什么是Pigsty

Pigsty是开箱即用的生产级开源PostgreSQL发行版

所谓 发行版(Distribution),指的是由数据库内核及其一组软件包组成的数据库整体解决方案。例如,Linux是一个 操作系统内核,而RedHat,Debian,SUSE则是基于此内核的 操作系统发行版。PostgreSQL是一个 数据库内核,而 Pigsty,BigSQL,Percona,各种云RDS,换皮数据库则是基于此内核的 数据库发行版

Pigsty区别于其他数据库发行版的五个核心特性为:

  • 全面专业监控系统
  • 稳定可靠部署方案
  • 简单省心的用户界面
  • 灵活开放扩展机制
  • 免费友好开源协议

这五个特性,使得Pigsty真正成为 开箱即用 的PostgreSQL发行版。

谁会感兴趣?

Pigsty面向的用户群体包括:DBA,架构师,OPS,软件厂商、云厂商、业务研发、内核研发、数据研发;对数据分析与数据可视化感兴趣的人;学生,新手程序员,有兴趣尝试数据库的用户。

对于DBA,架构师等专业用户,Pigsty提供了独一无二的 专业级 PostgreSQL监控系统,为数据库管理提供不可替代的价值点。与此同时,Pigsty还带有一个 稳定可靠,久经考验的生产级PostgreSQL部署方案,可在生产环境中自动部署带有监控报警,日志采集,服务发现,连接池,负载均衡,VIP,以及高可用的PostgreSQL数据库集群。

对于研发人员(业务研发、内核研发、数据研发),学生,新手程序员,有兴趣尝试数据库的用户,Pigsty提供了门槛极低,一键拉起,一键安装本地沙箱。本地沙箱除机器规格外与生产环境完全一致,包含完整的功能:带有开箱即用的数据库实例与监控系统。可用于学习,开发,测试,数据分析等场景。

此外,Pigsty提供了一种称为“Datalet”的灵活扩展机制 。对数据分析与数据可视化感兴趣的人可能会惊讶地发现,Pigsty还可以作为数据分析与可视化的集成开发环境。Pigsty集成了PostgreSQL与常用的数据分析插件,并带有Grafana和内嵌的Echarts支持,允许用户编写,测试,分发数据小应用(Datalet)。如:“Pigsty监控系统的额外扩展面板包”,“Redis监控系统”,“PG日志分析系统”,“应用监控”,“数据目录浏览器”等。

最后,Pigsty采用了免费友好的Apache License 2.0,可以免费用于商业目的。只要遵守Apache 2 License的显著声明条款,也欢迎云厂商与软件厂商集成与二次研发商用


全面专业的监控系统

You can’t manage what you don’t measure.

— Peter F.Drucker

Pigsty提供 专业级 监控系统,面向专业用户提供不可替代的价值点。

以医疗器械类比,普通监控系统 类似于心率计、血氧计,普通人无需学习也可以上手。它可以给出患者生命体征核心指标:起码用户可以知道人是不是要死了,但对于看病治病无能为力。例如,各种云厂商软件厂商提供的监控系统大抵属于此类:十几个核心指标,告诉你数据库是不是还活着,让人大致有个数,仅此而已。

专业级 监控系统则类似于CT,核磁共振仪,可以检测出对象内部的全部细节,专业的医师可以根据CT/MRI报告快速定位疾病与隐患:有病治病,没病健体。Pigsty可以深入审视每一个数据库中的每一张表,每一个索引,每一个查询,提供巨细无遗的全面指标(1155类),并通过几千个仪表盘将其转换为 洞察:将故障扼杀在萌芽状态,并为性能优化提供 实时反馈

Pigsty监控系统基于业内最佳实践,采用Prometheus、Grafana作为监控基础设施。开源开放,定制便利,可复用,可移植,没有厂商锁定。可与各类已有数据库实例集成。


稳定可靠的部署方案

A complex system that works is invariably found to have evolved from a simple system that works.

—John Gall, Systemantics (1975)

数据库是管理数据的软件,管控系统是管理数据库的软件。

Pigsty内置了一套以Ansible为核心的数据库管控方案。并基于此封装了命令行工具与图形界面。它集成了数据库管理中的核心功能:包括数据库集群的创建,销毁,扩缩容;用户、数据库、服务的创建等。Pigsty采纳“Infra as Code”的设计哲学使用了声明式配置,通过大量可选的配置选项对数据库与运行环境进行描述与定制,并通过幂等的预置剧本自动创建所需的数据库集群,提供近似私有云般的使用体验。

Pigsty创建的数据库集群是 分布式高可用 的数据库集群。Pigsty创建的数据库基于DCS、Patroni、Haproxy实现了高可用。数据库集群中的每个数据库实例在 使用 上都是 幂等 的,任意实例都可以通过内建负载均衡组件提供完整的读写服务,提供分布式数据库的使用体验。数据库集群可以自动进行故障检测与主从切换,普通故障能在几秒到几十秒内自愈,且期间只读流量不受影响。故障时。集群中只要有任意实例存活,就可以对外提供完整的服务。

Pigsty的架构方案经过审慎的设计与评估,着眼于以最小复杂度实现所需功能。该方案经过长时间,大规模的生产环境验证,已经被互联网/B/G/M/F多个行业内的组织所使用。


简单省心的用户界面

Pigsty旨在降低PostgreSQL的使用门槛,因此在易用性上做了大量工作。

安装部署

Someone told me that each equation I included in the book would halve the sales.

— Stephen Hawking

Pigsty的部署分为三步:下载源码,配置环境,执行安装,均可通过一行命令完成。遵循经典的软件安装模式,并提供了配置向导。您需要准备的只是一台CentOS7.8机器及其root权限。管理新节点时,Pigsty基于Ansible通过ssh发起管理,无需安装Agent,即使是新手也可以轻松完成部署。

Pigsty既可以在生产环境中管理成百上千个高规格的生产节点,也可以独立运行于本地1核1GB虚拟机中,作为开箱即用的数据库实例使用。在本地计算机上使用时,Pigsty提供基于Vagrant与Virtualbox的 沙箱。可以一键拉起与生产环境一致的数据库环境,用于学习,开发,测试数据分析,数据可视化等场景。

用户接口

Clearly, we must break away from the sequential and not limit the computers. We must state definitions and provide for priorities and descriptions of data. We must state relation‐ ships, not procedures.

—Grace Murray Hopper, Management and the Computer of the Future (1962)

Pigsty吸纳了Kubernetes架构设计中的精髓,采用声明式的配置方式与幂等的操作剧本。用户只需要描述“自己想要什么样的数据库”,而无需关心Pigsty如何去创建它,修改它。Pigsty会根据用户的配置文件清单,在几分钟内从裸机节点上创造出所需的数据库集群。

在管理与使用上,Pigsty提供了不同层次的用户界面,以满足不同用户的需求。新手用户可以使用一键拉起的本地沙箱与图形用户界面,而开发者则可以选择使用 pigsty-cli 命令行工具与配置文件的方式进行管理。经验丰富的DBA、运维与架构师则可以直接通过Ansible原语对执行的任务进行精细控制。

灵活开放的扩展机制

PostgreSQL的 可扩展性(Extensible) 一直为人所称道,各种各样的扩展插件让PostgreSQL成为了最先进的开源关系型数据库。Pigsty亦尊重这一价值,提供了一种名为“Datalet”的扩展机制,允许用户和开发者对Pigsty进行进一步的定制,将其用到“意想不到”的地方,例如:数据分析与可视化。

当我们拥有监控系统与管控方案后,也就拥有了开箱即用的可视化平台Grafana与功能强大的数据库PostgreSQL。这样的组合拥有强大的威力 —— 特别是对于数据密集型应用而言。用户可以在无需编写前后端代码的情况下,进行数据分析与数据可视化,制作带有丰富交互的数据应用原型,甚至应用本身。

Pigsty集成了Echarts,以及常用地图底图等,可以方便地实现高级可视化需求。比起Julia,Matlab,R这样的传统科学计算语言/绘图库而言,PG + Grafana + Echarts的组合允许您以极低的成本制作出 可分享可交付标准化 的数据应用或可视化作品。

Pigsty监控系统本身就是Datalet的典范:所有Pigsty高级专题监控面板都会以Datalet的方式发布。Pigsty也自带了一些有趣的Datalet案例:Redis监控系统,新冠疫情数据分析,七普人口数据分析,PG日志挖掘等。后续还会添加更多的开箱即用的Datalet,不断扩充Pigsty的功能与应用场景。


免费友好的开源协议

Once open source gets good enough, competing with it would be insane.

Larry Ellison —— Oracle CEO

在软件行业,开源是一种大趋势,互联网的历史就是开源软件的历史,IT行业之所以有今天的繁荣,人们能享受到如此多的免费信息服务,核心原因之一就是开源软件。开源是一种真正成功的,由开发者构成的communism(译成 社区主义 会更贴切):软件这种IT业的核心生产资料变为全世界开发者公有,人人为我,我为人人。

一个开源程序员工作时,其劳动背后其实可能蕴含有数以万计的顶尖开发者的智慧结晶。通过开源,所有社区开发者形成合力,极大降低了重复造轮子的内耗。使得整个行业的技术水平以匪夷所思的速度向前迈进。开源的势头就像滚雪球,时至今日已经势不可挡。除了一些特殊场景和路径依赖,软件开发中闭门造车搞自力更生已经成了一个大笑话。

依托开源,回馈开源。Pigsty采用了友好的Apache License 2.0,可以免费用于商业目的只要遵守Apache 2 License的显著声明条款,也欢迎云厂商与软件厂商集成与二次研发商用


关于Pigsty

A system cannot be successful if it is too strongly influenced by a single person. Once the initial design is complete and fairly robust, the real test begins as people with many different viewpoints undertake their own experiments. — Donald Knuth

Pigsty围绕开源数据库PostgreSQL而构建,PostgreSQL是世界上 最先进的开源关系型数据库,而Pigsty的目标就是:做 最好用的开源PostgreSQL发行版

在最开始时,Pigsty并没有这么宏大的目标。因为在市面上找不到任何满足我自己需求的监控系统,因此我只好自己动手,丰衣足食,给自己做了一个监控系统。没有想到它的效果出乎意料的好,有不少外部组织PG用户希望能用上。紧接着,监控系统的部署与交付成了一个问题,于是又将数据库部署管控的部分加了进去;在生产环境应用后,研发希望能在本地也有用于测试的沙箱环境,于是又有了本地沙箱;有用户反馈ansible不太好用,于是就有了封装命令的 pigsty-cli 命令行工具;有用户希望可以通过UI编辑配置文件,于是就有了Pigsty GUI。就这样,需求越来越多,功能也越来越丰富,Pigsty也在长时间的打磨中变得更加完善,已经远远超出了最初的预期。

做这件事本身也是一种挑战,做一个发行版有点类似于做一个RedHat,做一个SUSE,做一个“RDS产品”。通常只有一定规模的专业公司与团队才会去尝试。但我就是想试试,一个人可不可以?实际上除了慢一点,也没什么不可以。一个人在产品经理、开发者,终端用户的角色之间转换是很有趣的体验,而“Eat dog food”最大的好处就是,你自己既是开发者也是用户,你了解自己需要什么,也不会在自己的需求上偷懒。

不过,正如高德纳所说:“带有太强个人色彩的系统无法成功”。 要想让Pigsty成为一个具有旺盛生命力的项目,就必须开源,让更多的人用起来。“当最初的设计完成并足够稳定后,各式各样的用户以自己的方式去使用它时,真正的挑战才刚刚开始”。

Pigsty很好的解决了我自己的问题与需求,现在我希望它可以帮助到更多的人,并让PostgreSQL的生态更加繁荣,更加多彩。

2.37 - Pigsty v0.9:GUI/CLI与日志集成

原文发布于 VONNG

GitHub Release | 发布注记


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.ymlpgsql-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,避免监控查询出现在日志中。
  • 重构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使用的默认端口,默认为9080
  • promtail_status_file 保存Promtail状态信息的文件位置
  • promtail_send_url 用于接收日志的loki服务endpoint

2.38 - Pigsty v0.8:服务供给

原文发布于 VONNG

GitHub Release | 发布注记


v0.8.0

v0.8 针对 服务(Service) 接入部分进行了彻底的重做。现在除了默认的 primary, replica 服务外,用户可以自行定义新的服务。服务的接口可以支持多种不同的实现,例如L4 DPKG VIP可作为Haproxy的替代品与Pigsty集成。同时,针对用户反馈的一些问题进行了集中处理与改进。

改动内容

v0.8是供给方案定稿版本,此后供给系统的API将保持稳定。

API变更

原有 viphaproxy 角色的所有配置项,现在迁移至 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_servicespg_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_ctypelc_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

2.39 - Pigsty v0.7:仅监控部署

原文发布于 VONNG

GitHub Release | 发布注记


v0.7.0

v0.7 针对 接入已有数据库实例 进行了改进,现在用户可以采用 仅监控部署(Monly Deployment) 模式使用Pigsty。同时新增了专用于管理数据库与用户、以及单独部署监控的剧本,并对数据库与用户的定义进行改进。

改动内容

Features

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 to name

  • groups field rename to roles

  • options now split into separated configration entries:

    login, superuser, createdb, createrole, inherit, replication,bypassrls,connlimit

  • expire_at and expire_in options

  • pgbouncer option for user is now false 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 文件。

2.40 - Pigsty v0.6:架构增强

原文发布于 VONNG

GitHub Release | 发布注记


v0.6.0

v0.6 对数据库供给方案进行了修改与调整,根据用户的反馈添加了一系列实用功能与修正。针对监控系统的移植性进行优化,便于与其他外部数据库供给方案对接,例如阿里云MyBase。

BUG修复

  • 修复了新版本Patroni重启后会重置PG HBA的问题
  • 修复了PG Overview Dashboard标题中的别字
  • 修复了沙箱集群 pg-test 的默认主库,原来为 pg-test-2,应当为 pg-test-1
  • 修复了过时代码注释

功能改进

  • 改造Prometheus与监控供给方式
    • 允许在无基础设施的情况下对已有PG集群进行监控部署,便于监控系统与其他供给方案集成。#11
    • 基于Inventory渲染所有监控对象的静态列表,用于静态服务发现。#11
    • Prometheus添加了静态对象模式,用于替代动态服务发现,集中进行身份管理#11
    • 监控Exporter现在添加了 service_registry 选项,Consul服务注册变为可选项 #13
    • Exporter现在可以通过拷贝二进制的方式直接安装:exporter_binary_install#14
    • Exporter现在具有 xxx_enabled 选项,控制是否启用该组件。
  • Haproxy供给重构与改进 #8
    • 新增了全局HAProxy管理界面导航,默认域名 h.pigsty
    • 允许将主库加入只读服务集中,当集群中所有从库宕机时自动承接读流量。 #8
    • 允许位Haproxy实例管理界面启用认证 haproxy_admin_auth_enabled
    • 允许通过配置项调整每个服务对应后端的流量权重. #10
  • 访问控制模型改进。#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 覆盖

2.41 - Pigsty正式发布

原文发布于 VONNG

今天我很荣幸的宣布,Pigsty 正式发布了!

图片

官方网站:https://pigsty.cc

Pigsty 是什么?

  • Pigsty 是针对大规模 PostgreSQL 集群的监控系统

  • Pigsty 是高可用 PostgreSQL 集群的供给方案

  • Pigsty 基于开源生态构建,是免费的开源软件

图片

Pigsty 针对大规模数据库集群监控与管理而设计,提供业界顶尖的 PostgreSQL 监控系统与开箱即用的高可用数据库供给方案。Pigsty 基于开源生态构建,旨在降低 PostgreSQL 使用管理的门槛,为用户带来极致的可观测性与丝滑的数据库使用体验。\

Pigsty 是监控系统

PostgreSQL 是世界上最好的开源关系型数据库,但在其生态中却缺少一个足够好的监控系统。Pigsty 即旨在解决这一问题:提供世界上最好的 PostgreSQL 监控系统,

开发 Pigsty 的初衷是:作者需要对一个大规模 PostgreSQL 集群进行管理,但找遍所有市面上的开源与商业监控系统方案后,发现没有一个是“足够好用”的。本着“我行我上”的精神,开发设计了本系统。

Pigsty 的界面基于 Grafana 深度定制,由 30+监控面板,上千+仪表盘,18 万行 JSON 定制而成,涵盖数据库与基础设施的方方面面。

图片图片

Pigsty 提供近 1200 个监控指标,一骑绝尘,远超市面上现有的相关产品。提供从全局大盘汇总到某一个数据对象增删改查的全域数据支持。\

图片

Pigsty 是供给方案

Pigsty 同时还是一个高可用数据库集群供给方案。

监控系统要想发行与演示,必须要先有被监控的对象。可许多用户自建的数据库实在是千奇百怪。所以这里,Pigsty 项目决定将数据库供给方案作为项目的一部分发布。

将主从复制,故障切换,流量代理,连接池,服务发现,基本权限系统等成熟的生产级部署方案打包至本项目中,真正让用户做到立等可取开箱即用

图片

数据库供给方案所做的事情一言以蔽之:您填写一张表单,然后系统会自动根据表单的内容创建出对应的数据库集群。真正做到傻瓜式数据库管理。

图片

Pigsty 通过 130+配置项定义了数据库与基础设施的方方面面,采用声明式的语法与幂等的执行机制,使用代码定义基础设施,在物理机与虚拟机上达到了与 Kubernetes 类似的舒爽体验,简单易用。

Pigsty 是开源软件

Pigsty 依托开源,回馈社区,是免费的开源软件。Pigsty 基于Apache 2.0协议开源,但也提供专业版可选的商业支持服务。欢迎各位贡献 ISSUE 与 PR,也欢迎捐赠与赞助。

图片

Pigsty 的监控系统基于开源组件 Prometheus,Grafana,Alertmanager,Exporter 进行深度定制开发。同时还包括 Nginx,Dnsmasq/CoreDNS,NTP/Chrony,Consul/Etcd 等基础设施。遵循业界监控最佳实践,可以方便地与已有监控基础设施集成。

Pigsty 的供给方案基于流行的 DevOps 工具 Ansible 进行开发,部署涉及的组件包括:Postgres,Pgbouncer,Patroni,HAProxy,Keepalived。所有部署逻辑都以 Ansible Role 的方式编写,可以方便地进行集成、定制与二次开发。

PostgreSQL 是世界上最先进的开源关系型数据库,而 Pigsty 旨在成为世界上最先进的开源关系型数据库的监控系统与供给方案。希望 Pigsty 能在各位使用 PostgreSQL 的过程中起到帮助。

Pigsty 可以开箱即用

Pigsty 提供了详实的中英文档供您参考。

更重要的是,Pigsty 既提供了可公开访问的演示 Demo,也自带了基于 Vagrant 的本地沙箱。您可以使用以下命令简单的在自己的笔记本上一键拉起带有数据库集群与监控基础设施的沙箱环境。

make up          # 拉起vagrant虚拟机
make ssh         # 配置虚拟机ssh访问
make init        # 初始化Pigsty
sudo make dns    # 写入Pigsty静态DNS域名(需要sudo,可选)
make mon-view    # 打开Pigsty首页(默认用户密码:admin:admin)

也可以在修改极少量配置后,使用完全相同的工作流初始化生产环境。

Pigsty 的相关站点\

Pigsty 提供了详实的中英文档供您参考。

中文站点:https://pigsty.cc

英文站点:https://pigsty.cc/en/

官方演示:http://demo.pigsty.cc

Github 仓库:https://github.com/Vonng/pigsty

图片

发布版本:微信公众号

2.42 - Pigsty官方网站上线啦!

原文发布于 VONNG

好久没有冒泡了!今天,俺很荣幸的宣布,Pigsty 官方文档站上线啦!

地址为:http://pigsty.cc\

图片

什么?你问 Pigsty 是什么东东?\

Pigsty 是我亲自开发的 PostgreSQL 监控系统暨高可用数据库供给方案。

开源免费!详见下图,或者您点进那个站点看看也行啊。\

图片

虽然 “世界上最好的 PostgreSQL 监控系统”这个口号好像有违反广告法的嫌疑,不过自己站在甲方爸爸的立场上,我也确实找不到比它更好的了。用真理说服人嘛,所以也就厚着脸皮这样写上了,反正我也没收钱嘛。

图片

关于 Pigsty 本身,我就不多说了,该说的全都写在网站里了。但是建这个站可真是费老鼻子劲儿了!倒不是说建站有多难,毕竟都是现成的模板,我用的是 hugo,一个 go 写的静态网站生成器,主题用的是 Google 出品的 Docsy,相当方便,往里填内容就行了。改下文案改个图标和背景图片,用不了一会儿英文首页就都出来了。\

图片

但写文档真是要了我老命了,文档怎么说也有几十万字(符)了,再加上还要中英文双语,写的我是头昏脑胀,把一个周末就这么交代了。港真,写文档真的是比写书还累。很耽误打《赛博朋克 2077》和《原神》的进度啊。

中文文档首页

图片

特别费时间的就是监控系统的界面说明,几十个 Dashboard 需要一个个去截图配文。想想就有点抓狂了。

图片

英文文档首页

更让人抓狂的当然是整个文档网站得做一个一模一样的英文版出来。

图片

多亏了 DeepL,不少英文文档可以先机翻凑合一下。\

大体上弄完了中英文文档,看着空落落的博客里只有六篇新闻和 Release Note。我又想着要不把以前写过的和 PostgreSQL 相关的技术文章也搬运过来。于是整理了一部分,又是几个小又过去了

图片

好了就说这么多吧。应该说看上去还是很不错的,总归有一些正经项目的样子了。也基本上算可以拿的出手了。所以最近呢,我准备推广一下 Pigsty,有两个相关活动。

一个是阿里云搞的 PostgreSQL 创新训练营,一个是 1 月 15 号在广州举办的 PG Conf 大会。

阿里弄的这个报名不要钱,还有小奖品。对 PostgreSQL 感兴趣的同学可不要错过哈。关于 Pigsty 的课程在 1 月 22 号那天。

图片

PG Conf 2020

PG 大会在广州举办,具体时间是是 2021-01-16 下午 14:30-15:00

专场七数据库内核及新特性(下)

我也不知道讲监控系统为啥给分到内核里了,可能是比较硬核吧😎。\

可以在这里看到大会的具体议程:

http://pigsty.cc/zh/blog/2021/01/08/pg-conf-china-2021/

最后,如果您是 GitHub 用户,也非常欢迎来加个星,提个 Issue PR 什么的。

火钳刘明:https://github.com/Vonng/pigsty

梦想还是要有的,万一🔥了呢对不对?


发布版本:微信公众号

2.43 - Pigsty v0.5:数据库定制模板

原文发布于 VONNG

GitHub Release | 发布注记

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: []

数据库模板

权限模型

v0.5 改善了默认的权限模型,主要是针对单实例多租户的场景进行优化,并收紧权限控制。

  • 撤回了普通业务用户对非所属数据库的默认 CONNECT 权限
  • 撤回了非管理员用户对所属数据库的默认 CREATE 权限
  • 撤回了所有用户在 public 模式下的默认创建权限。

供给方式

原先Pigsty采用直接拷贝Grafana自带的grafana.db的方式完成监控系统的初始化。 这种方式虽然简单粗暴管用,但不适合进行精细化的版本控制管理。在v0.5中,Pigsty采用了Grafana API完成了监控系统面板供给的工作。 您所需的就是在 grafana_url 中填入带有用户名密码的Grafana URL。 因此,监控系统可以背方便地添加至已有的Grafana中。

2.44 - Pigsty v0.4:PG13 与文档站

原文发布于 VONNG

GitHub Release | 发布注记


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

2.45 - Pigsty v0.3:首个公开测试版

原文发布于 VONNG

GitHub Release | 发布注记


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

2.46 - PostgreSQL监控系统Pigsty概述

原文发布于 VONNG

近自己做了套数据库监控系统,搞的还可以,简单给大家介绍一下。

Pigsty is an advanced PostgreSQL monitoring systemd based on open source projects like prometheus & grafana. PIGSTY /pɪɡ staɪ/ is the abbreviation of “Postgres in Grafana Style”.

Pigsty 是一个基于 Grafana 与 Prometheus 与 Consul 的 Postgres 数据库监控系统。

整体架构

TLDR: (Node/Pg/Pgbouncer) Exporter Discovered by Consul to Prometheus to Grafana

┏━━━━━━━━━━━┓     ┏━━━━━━━━━━━━━━━━━━━━┓
┃   Node    ┃ --> ┃   Node    Exporter-┃┐
┃ Pgbouncer ┃ --> ┃ Pgbouncer Exporter-┃┼--> Prometheus ---> Grafana
┃ Postgres  ┃ --> ┃ Postgres  Exporter-┃┘        ↑
┃           ┃     ┗━━━━━━━━━━━━━━━━━━━━┛  (Service Discovery)
┃  Consul   ┃ ----------------------------->   Consul
┗━━━━━━━━━━━┛

一言以蔽之:用 Exporter 取指标数据,通过 Consul 服务发现赋予身份标签与组织结构,存进 Prometheus 中进行预处理计算,最后使用 Grafana 展示

这里能看到的主要还是 Grafana 里的 Dashboard,因此主要还是介绍脸面上的东西。\

层次组织

图片

监控主要分为五个层次,集群(cluster),服务(service),实例(instance),数据库(database),与节点(node)。不过在本系统中,服务层次的监控指标被整合至集群级别,数据库层次的监控指标被整合至实例级别。因此实际上,只有三个核心层次的监控展示:集群,实例,节点。

  • 集群使用cls唯一标识,名称类似于:pg-test-tt

  • 实例使用ins唯一标识,名称类似于:pg-test-tt-0,以集群为前缀,序号为后缀。后缀为 0 的实例通常是集群中的主库。

  • 节点使用ip唯一标识。

除此之外,还有一些其他层次的 Dashboard:例如全局大盘概览,分片库专用的 Shard Dashboard,每一个数据库具体的 Database Dashboard、连接池 Pool 层次的 Dashboard,具体到某一个库上某一个查询的 PG Query Dashboard,Pgbouncer 中间件专用 Dashboard,等等,这些衍生或周边的 Dashboard 就不介绍了。

功能简介

核心功能:日常巡检,故障排查,性能优化,全知即全能。

  • PG 全局监控

  • PG Shard 监控

  • PG 集群监控

  • PG 实例监控

  • PG 实例监控(故障排查专用视图)

  • PG 节点监控

  • PG 慢查询平台

  • Redis 全局概览

  • Redis 集群监控

  • Redis 实例监控

  • PG 集群健康度评估系统

首页导航概览

包含 PG 和 Redis 两部分,左侧为全局指标概览,右侧为集群导航。中间为全局报警与事件提醒。点击右上角的导航链接,或者页面中的可导航元素(Shard,集群名,实例名,IP 等)可跳转至感兴趣的面板

图片

DB 监控:指标介绍

指标丰富程度

你可以不看,我不能没有。

每个实例包括了约 3300 个指标,其中:

数据库与连接池指标 1000 个,其中规则定义衍生指标 250 个。

节点指标约 2000 个,其中规则定义的衍生指标 700 个。

举个例子,单纯一个 QPS,就可以衍生出下面近 30 个指标。\

图片

这里随便挑一些重要的指标介绍一下\

指标内容

按 Google SRE 实践划分的四类黄金指标

错误

  • 配置错误:关键功能是否配置正常:校验和,Numa,透明大页,同步提交等。

  • 内存错误,TCP 错误,时间漂移错误

  • 服务宕机:机器,数据库,连接池,监控组件

  • 数据库客户端排队,IdleInXact 连接,超长事务,死锁,复制中断,大量回滚,监控报错

饱和度

  • PG Load, Node Load

  • CPU 使用,内存使用,磁盘使用,网卡带宽利用率,缓存命中率,后端连接使用,连接池使用

流量

  • 数据库直接指标:QPS,TPS,查询细分 QPS

  • 间接流量指标:连接池进出流量,WAL 写入量,增删改查条数,块访问量,缓冲区访问量

  • 节点流量:磁盘 IO 流量,网络 IO 流量,内存页面换入换出

延迟

  • 事务平均响应时间 Xact RT

  • 查询平均响应时间 Query RT

  • 语句平均响应时间:Statement RT

  • 磁盘平均响应时间:Disk R/W Latency

  • 复制延迟(以秒或字节计算)

  • 监控查询延迟

DB 监控:PG 实例

实例概览

  • 实例身份信息:集群名,ID,所属节点,软件版本,所属集群其他成员等

  • 实例配置信息:一些关键配置,目录,端口,配置路径等

  • 实例健康信息,实例角色(Primary,Standby)等。

  • 黄金指标:PG Load,复制延迟,活跃后端,排队连接,查询延迟,TPS,数据库年龄

  • 数据库负载:实时(Load0),1 分钟,5 分钟,15 分钟

  • 数据库警报与提醒事件

图片

关于 PG Load,可以参考本号前一篇文章,如何给 PostgreSQL 定 KPI

节点概览

  • 四大基本资源:CPU,内存,磁盘,网卡的配置规格,关键功能,与核心指标

  • 右侧是网卡详情与磁盘详情

图片

单日统计

以最近 1 日为周期的统计信息(从当前时刻算起的前 24 小时),比如最近一天的查询总数,返回的记录总数等。上面两行是节点级别的统计,下面两行是主要是 PG 相关的统计指标。

对于计量计费,水位评估特别有用。

复制

  • 当前节点的 Replication 配置

  • 复制延迟:以秒计,以字节计的复制延迟,复制槽堆积量

  • 下游节点对应的 Walsender 统计

  • 各种 LSN 进度,综合展示集群的复制状况与持久化状态。

  • 下游节点数量统计,可以看出复制中断的问题

图片

事务

事务部分用于洞悉实例中的活动情况,包括 TPS,响应时间,锁等。

  • TPS 概览信息:TPS,TPS 与过去两天的 DoD 环比。DB 事务数与回滚数

  • 回滚事务数量与回滚率

  • TPS 详情:绿色条带为±1σ,黄色条带为±3σ,以过去 30 分钟作为计算标准,通常超出黄色条带可认为 TPS 波动过大

  • Xact RT,事务平均响应时间,从连接池抓取。绿色条带为±1σ,黄色条带为±3σ。

  • TPS 与 RT 的偏离程度,是一个无量纲的可横向比较的值,越大表示指标抖动越厉害,计算方式为:(μ/σ)^2

  • 按照 DB 细分的 TPS 与事务响应时间,通常一个实例只有一个 DB,但少量实例有多个 DB。

  • 事务数,回滚数(TPS 来自连接池,而这两个指标直接来自 DB 本身)

  • 锁的数量,按模式聚合(8 种表锁),按大类聚合(读锁,写锁,排他锁)

图片

查询

大多数指标与事务中的指标类似,不过统计单位从事务变成了查询语句。查询部分可用于分析实例上的慢查询,定位性能瓶颈。

  • QPS 每秒查询数,与 Query RT 查询平均响应时间,以及这两者的波动程度,QPS 的周期环比等

  • 生产环境对查询平均响应时间有要求:1ms 为红线,100ms 就该约谈了。

图片

语句

语句展示了查询中按语句细分的指标。每条语句(查询语法树抽离常量变量后如果一致,则算同一条查询)都会有一个查询 ID,可以在慢查询平台中获取到具体的语句与详细指标与统计。

  • 左侧慢查询列表是按pg_stat_statments中的平均响应时间从大到小排序的,点击查询 ID 会自动跳转到慢查询平台

  • 这里列出的查询,是累计查询耗时最长的 32 个查询,但排除只有零星调用的长耗时单次查询与监控查询。

  • 右侧包括了每个查询的实时 QPS,平均响应时间。按照 RT 与总耗时的排名。

后端进程

后端进程用于显示与 PG 本身的连接,后端进程相关的统计指标。特别是按照各种维度进行聚合的结果,特别适合定位雪崩,慢查询,其他疑难杂症。

  • 后端进程数按种类聚合,后端进程按状态聚合,后端进程按 DB 聚合,后端进程按等待事件类型聚合。

  • 活跃状态的进程/连接,在事务中空闲的连接,长事务。

图片

连接池

连接池部分与后端进程部分类似,但全都是从 Pgbouncer 中间件上获取的监控指标

  • 连接池后端连接的状态:活跃,刚用过,空闲,测试过,登录状态。

  • 分别按照 User,按照 DB,按照 Pool(User:DB)聚合的前端连接,用于排查异常连接问题。

  • 等待客户端数(重要),以及队首客户端等待的时长,用于定位连接堆积问题。

  • 连接池可用连接使用比例。

数据库概览

Database 部分主要来自pg_stat_databasepg_database,包含数据库相关的指标:

  • WAL Rate,标识数据库的写入负载,每秒产生的 WAL 字节数量。

  • Buffer Hit Rate,数据库 ShareBuffer 命中率,未命中的页面将从操作系统 PageCache 和磁盘获取。

  • 每秒增删改查的记录条数

  • 临时文件数量与临时文件大小,可以定位大型查询问题。

图片

持久化

持久化主要包含数据落盘,Checkpoint,块访问相关的指标

  • 重要的持久化参数,比如是否出现数据校验和验证失败(如果启用可以检测到数据腐坏)

  • 数据库文件(DB,WAL,Log)的大小与增速。

  • 检查点的数量与检查点耗时。

  • 每秒分配的块,与每秒刷盘的块。每秒访问的块,以及每秒从磁盘中读取的块。(以字节计,注意一个 Buffer Page 是 8192,一个 Disk Block 是 4096)

监控 Exporter

Exporter 展示了监控系统组件本身的监控指标,包括:

  • Exporter 是否存活,Uptime,Exporter 每分钟被抓取的次数

  • 每个监控查询的耗时,产生的指标数量与错误数量。

图片

DB 监控:PG 集群

PG 集群监控是最常用的 Dashboard,因为 PG 以集群为单位提供服务,因此 Cluster 集合了最完整全面的信息。

大多数监控图都是实例级监控的泛化与上卷,即从展示单个实例内的细节,变为展现集群内每个实例的信息,以及集群和服务层次聚合后的指标。

集群概览

Cluster 级别的集群概览相比实例级别多了一些东西:

  • 时间线与领导权,当数据库发生 Failover 或 Switchover 时,时间线会步进,领导权会发生变化。

  • 集群拓扑,集群拓扑展现了集群中的复制拓扑,以及采用的复制方式(同步/异步)。

  • 集群负载,包括整个集群实时、1 分钟、5 分钟、15 分钟的负载情况。以及集群中每个节点的 Load1

  • 集群报警与事件。

图片

集群复制

Cluster 级别的 Dashboard 与 Instance 级别 Dashboard 最重要的区别之一就是提供了整个集群的复制全景。包括:

  • 集群中的主库与级联桥接库。集群是否启用同步提交,同步从库名称。桥接库与级联库数量,最大从库配置

  • 成对出现的 Walsender 与 Walreceiver 列表,体现一对主从关系的复制状态

  • 以秒和字节衡量的复制延迟(通常 1 秒的复制延迟对应 10M~100M 不等的字节延迟),复制槽堆积量。

  • 从库视角的复制延迟

  • 集群中从库的数量,备份或拉取从库时可以从这里看到异常。

  • 集群的 LSN 进度,用于整体展示集群的复制状态与持久化状态。

图片

节点指标

PG 机器的相关指标,按照集群进行聚合。

图片

事务与查询

与实例级别的类似,但添加了 Service 层次的聚合(一个集群通常提供primarystandby两种 Service)。

图片

其他指标与实例级别差别不大。\

DB 监控:PG 慢查询平台

显示慢查询相关的指标,上方是本实例的查询总览。鼠标悬停查询 ID 可以看到查询语句,点击查询 ID 会跳转到对应的查询细分指标页(Query Detail)。

  • 左侧是格式化后的查询语句,右侧是查询的主要指标,包括

    • 每秒查询数量:QPS

    • 实时的平均响应时间(RT Realtime)

    • 每次查询平均返回的行数

    • 每次查询平均用于 BlockIO 的时长

    • 响应时间的均值,标准差,最小值,最大值(自从上一次统计周期以来)

    • 查询最近一天的调用次数,返回行数,总耗时。以及自重置以来的总调用次数。

  • 下方是指定时间段的查询指标图表,是概览指标的细化。

图片

发布版本:微信公众号

3 - 设计

Pigsty 工程中的架构决策与实现说明。

设计专栏记录 Pigsty 架构与实现背后的背景、约束、决策与取舍。