跳转到主要内容

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

返回本页常规视图.

博客

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 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.2 - 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.3 - 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.4 - 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.5 - 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.6 - 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.7 - 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.8 - 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.9 - 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.10 - 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.11 - 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.12 - 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.13 - 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.14 - 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.15 - 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.16 - Pigsty v1.4.1

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

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

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

现在提供英文文档。

Bug 修复

信息来源

1.17 - 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.18 - 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.19 - 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.20 - 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.21 - 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.22 - 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.23 - 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.24 - 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.25 - 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.26 - 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.27 - 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.28 - 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.29 - 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.30 - Pigsty v0.5.2

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

[!INFO]

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

发布亮点

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

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

信息来源

1.31 - Pigsty v0.5.1

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

[!INFO]

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

发布亮点

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

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

信息来源

1.32 - 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.33 - 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.34 - 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.35 - Pigsty v0.0.5

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

[!INFO]

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

发布亮点

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

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

信息来源

1.36 - Pigsty v0.0.4

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

[!INFO]

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

发布亮点

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

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

信息来源

1.37 - Pigsty v0.0.3

接口与监控模式改进

[!INFO]

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

发布亮点

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

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

信息来源

1.38 - 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.39 - 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 - 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.2 - 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.3 - 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.4 - 如何用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.5 - 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.6 - 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.7 - 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.8 - 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.9 - 更好的开源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.10 - 炮打 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.11 - 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.12 - 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.13 - 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.14 - 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.15 - 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.16 - 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.17 - 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.18 - 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.19 - 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.20 - 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.21 - 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.22 - 开箱即用的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.23 - 开箱即用的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.24 - 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.25 - 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.26 - 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.27 - 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.28 - 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.29 - 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.30 - 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.31 - 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.32 - 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.33 - 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 架构与实现背后的背景、约束、决策与取舍。