v2.7:集异璧之大成

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

同时,我们提供了一些新的 Docker 应用模板,例如开源的企业 ERP 软件全家桶 —— OdooJupyter Notebook,并率先提供了 Supabase GA 版本的支持。 同时,我们还为后续容器版本的推出扫清了障碍;提供了帮助用户应付国产信创检查的方案 —— PolarDB 支持;并正式进行了专业版与开源版的产品功能区分。


扩展尽入吾彀中

在《PostgreSQL正在吞噬数据库世界》一文中,我抛出了一个观点:PostgreSQL 并不是一个简单的关系型数据库,而是一个数据管理的抽象框架,具有囊括一切,吞噬整个数据库世界的力量。

而 PG 之所以能做到这一点,除了开源先进这两点外,真正的秘诀在于 扩展 —— 极致可扩展性,与繁荣的扩展生态 是 PostgreSQL 独一无二的特点,也是它从无数数据库中脱颖而出的法宝与秘诀。

因此,在 Pigsty v2.7 版本中,我们重新审视了整个 PostgreSQL 生态的所有扩展插件,将其中一些佼佼者收录其中,我们新收录的扩展如下:

扩展 版本 说明
pg_jsonschema 0.3.1 提供JSON Schema校验能力
wrappers 0.3.1 Supabase提供的外部数据源包装器捆绑包
duckdb_fdw 1.1 DuckDB 外部数据源包装器 (libduck 0.10.2)
pg_search 0.7.0 ParadeDB BM25算法全文检索插件,ES全文检索
pg_lakehouse 0.7.0 ParadeDB 湖仓分析引擎
pg_analytics 0.6.1 加速 PostgreSQL 内部的分析查询处理
pgmq 1.5.2 轻量级消息队列,类似于 AWS SQS 和 RSMQ.
pg_tier 0.0.3 支将将冷数据分级存储到 AWS S3
pg_vectorize 0.15.0 在 PG 中实现 RAG 向量检索的封装
pg_later 0.1.0 现在执行 SQL,并在稍后获取结果
pg_idkit 0.2.3 生成各式各样的唯一标识符:UUIDv6, ULID, KSUID
plprql 0.1.0 在PostgreSQL使用PRQL——管线式关系查询语言
pgsmcrypto 0.1.0 为PostgreSQL提供商密算法支持:SM2,SM3,SM4
pg_tiktoken 0.0.1 计算 OpenAI 使用的 Token 数量
pgdd 0.5.2 提供通过标准SQL查询数据库目录集簇的能力
parquet_s3_fdw 1.1.0 针对S3/MinIO上的Parquet文件的外部数据源包装器
plv8 3.2.2 PL/JavaScript (v8) 可信过程程序语言
md5hash 1.0.1 提供128位MD5的原生数据类型
pg_tde 1.0-alpha PostgreSQL 的实验性加密存储引擎。
pg_dirtyread 2.6 从 PostgreSQL 表中读取未清理的死元组,用于脏读

这里面有许多使用 Rust 和 pgrx 开发的扩展插件,许多扩展都提供了非常强大的能力 —— 比如说:


Supabase 出品的 wrappers 看上去是一个扩展,但它其实提供了一个用 Rust 编写 FDW 的插件,提供了对十种外部数据源的包装访问!

FDW Description Read Modify
HelloWorld A demo FDW to show how to develop a basic FDW.
BigQuery A FDW for Google BigQuery
Clickhouse A FDW for ClickHouse
Stripe A FDW for Stripe API
Firebase A FDW for Google Firebase
Airtable A FDW for Airtable API
S3 A FDW for AWS S3
Logflare A FDW for Logflare
Auth0 A FDW for Auth0
SQL Server A FDW for Microsoft SQL Server
Redis A FDW for Redis
AWS Cognito A FDW for AWS Cognito

这意味着,你现在可以用 PostgreSQL 读写 BigQuery, ClickHouse, 以及支付服务 Stripe 数据了。Firebase,Airtable,S3,Logflare,Auth0,SQL Server,Redis,Cognito 也提供了通过 PostgreSQL ,使用 SQL 读取的能力。


再比如 plprql 扩展,提供了一种类似于 SQL 的全新数据库查询语言 PRQL:

from invoices
filter invoice_date >= @1970-01-16
derive {
  transaction_fees = 0.8,
  income = total - transaction_fees
}
filter income > 1
group customer_id (
  aggregate {
    average total,
    sum_income = sum income,
    ct = count total,
  }
)
sort {-sum_income}
take 10
join c=customers (==customer_id)
derive name = f"{c.last_name}, {c.first_name}"
select {
  c.customer_id, name, sum_income
}
derive db_version = s"version()"

同时,新加入 Pigsty 的 plv8 扩展,允许你使用 Javascript 在 PostgreSQL 中编写存储过程,PostgreSQL 的存储过程语言支持之丰富,实在是让人惊叹!


再比如说 parquet_s3_fdw ,看上去只是让你访问 S3 上存储的 Parquet 文件,但它的意义是 —— PG 可以成为真正的湖仓了 —— 等效于新增了一个没有存储容量限制的分析引擎!

构建在它基础上的 pg_tier ,更是提供了便利的分级冷存储功能 —— 你可以将 PG 中很少访问的海量冷存储,用 SQL 轻松归档到 S3 / MinIO 上去!

如果您觉得仅仅是 Parquet 太不过瘾,那么由 ParadeDB 提供的 pg_lakehouse,则把这件事拔高到了一个新高度 —— 你现在可以直接将PG作为湖仓使用,读取 S3 / MinIO / 本地文件系统上的 Parquet,CSV,JSON,Avro,DeltaLake,以及 后续的 ORC 格式文件,用于湖仓数据分析!

CREATE EXTENSION pg_lakehouse;
CREATE FOREIGN DATA WRAPPER s3_wrapper HANDLER s3_fdw_handler VALIDATOR s3_fdw_validator;

-- Provide S3 credentials
CREATE SERVER s3_server FOREIGN DATA WRAPPER s3_wrapper
OPTIONS (region 'us-east-1', allow_anonymous 'true');

-- Create foreign table
CREATE FOREIGN TABLE trips (
    "VendorID"              INT,
    "tpep_pickup_datetime"  TIMESTAMP,
    "tpep_dropoff_datetime" TIMESTAMP,
    "passenger_count"       BIGINT,
    "trip_distance"         DOUBLE PRECISION,
    "RatecodeID"            DOUBLE PRECISION,
    "store_and_fwd_flag"    TEXT,
    "PULocationID"          REAL,
    "DOLocationID"          REAL,
    "payment_type"          DOUBLE PRECISION,
    "fare_amount"           DOUBLE PRECISION,
    "extra"                 DOUBLE PRECISION,
    "mta_tax"               DOUBLE PRECISION,
    "tip_amount"            DOUBLE PRECISION,
    "tolls_amount"          DOUBLE PRECISION,
    "improvement_surcharge" DOUBLE PRECISION,
    "total_amount"          DOUBLE PRECISION
)
SERVER s3_server
OPTIONS (path 's3://paradedb-benchmarks/yellow_tripdata_2024-01.parquet', extension 'parquet');

-- Success! Now you can query the remote Parquet file like a regular Postgres table
SELECT COUNT(*) FROM trips;
  count
---------
 2964624
(1 row)

当然,同样由 ParadeDB 出品的 pg_analyticspg_search 扩展也非常值得一提,前者提供了第一梯队的分析性能,而后者提供了 ElasticSearch BM25 全文检索能力的的 PG 替代品。

此外,Tembo 也提供了四个使用 Rust 编写的实用 PG 扩展,例如,他们出品的 pgmq 就可以在 PG 上提供一个轻量的消息队列 API,类似于 AWS 的 SQS 与 RSMQ,作为 pgq 的替代与补充。


在 AI 人工智能方向上,pgvector 0.7 引入了重大的升级,现在支持稀疏向量(让 pg_sparse 原地退役了!),支持 half float 量化,向量最大维度翻倍到了 4000 维,添加了 binary 量化模式(维度可达 64K ),添加了两种新的距离度量与相应的索引。最重要的是,现在还支持用 SIMD 指令了,性能相比一年前有了翻天覆地的改善!

  • Added halfvec type
  • Added sparsevec type
  • Added support for indexing bit type
  • Added support for indexing L1 distance with HNSW
  • Added binary_quantize function
  • Added hamming_distance function
  • Added jaccard_distance function
  • Added l2_normalize function
  • Added subvector function
  • Added concatenate operator for vectors
  • Added CPU dispatching for distance functions on Linux x86-64
  • Updated comparison operators to support vectors with different dimensions

v0.7 changelog

当然,还有其他一些 AI 相关的扩展插件,例如 pg_vectorize 可以帮助你封装实现一个 RAG 服务,新的 pg_tiktoken 可以帮助你在 PG 中,计算调用 OpenAI 模型时所需的 Token 数量。此外,pg_similarity 可以提供17种额外的距离度量函数,imgsmlr 可以提供图片相似度处理函数, bigm 可以提供基于二元组的全文检索支持, zhparser 可以提供中文分词能力。


在新的数据类型支持上,md5hash 允许你直接高效存储 128 位的 MD5 摘要,而不是一长串字符文本。 pg_idkit 允许你在数据库中直接生成十多种不同类型的 ID 方案(UUIDv6, UUIDv7, nanoid, ksuid, ulid, Timeflake, PushID, xid, cuid, cuid 等),rrule 扩展更是允许你在数据库中存储、解析、处理“日历重复事件”这一神奇的数据类型。


此外,还有一些扩展,能在数据库管理上提供帮助。pgdd 允许你直接使用 SQL ,管理与访问 PG 的数据库目录,pg_later 允许你异步执行 SQL 命令并取回结果。pg_dirtyread 允许你进行脏读,读取尚未被垃圾回收的数据,进行数据抢救,pg_show_plans 可以显示出当前正在运行查询的执行计划!

在加密能力上,pg_tde 扩展提供了一个实验性的PG透明加密的存储引擎,用于确保即使你的硬盘被人拔了,数据也不会泄漏。 pgsmcrypto 则为 PostgreSQL 提供了 “国产数据库” 的商密算法(SM2,3,4)支持。


PG集异璧之大成

加上 以前的扩展,在 Pigsty v2.7 中,在所有操作系统上可用的 PG 扩展数量达到了 255 个之多。 我们可以自豪地说,在整个 PostgreSQL 生态中,没有一个发行版或者服务提供商,能达到我们的收录的这个扩展数量:

在EL系操作系统上,总共有 230 个可用的 RPM 扩展插件,其中包括 73 个 PG 自带的扩展和 157 个第三方扩展,其中由 Pigsty 维护的占 34 个。 在 Debian 与 Ubuntu 系操作系统上,总共有 189 个可用的 DEB 扩展插件,其中包括 73 个 PG 自带的扩展和 116 个第三方扩展,其中由 Pigsty 维护的占 10 个。

完整的扩展列表,请参考 扩展列表

所有的扩展,被我们按照功能与用途分为了 11 个大类,方便用户根据主题选用:

类目 扩展
TYPE pg_uuidv7, pgmp, semver, timestamp9, uint, roaringbitmap, unit, prefix, md5hash, ip4r, asn1oid, pg_rrule, pg_rational, debversion, numeral, pgfaceting
GIS pointcloud, pgrouting, h3, address_standardizer_data_us, postgis_tiger_geocoder, postgis_topology, postgis_raster, postgis_sfcgal, address_standardizer, postgis, h3_postgis, pointcloud_postgis, geoip, mobilitydb
SHARD pg_fkpart, pg_partman, plproxy, citus
TEST pgtap, faker, dbt2
SEARCH pg_bigm, pg_search, zhparser
ETL pg_bulkload, wal2json, pg_fact_loader, decoderbufs
REPL pglogical_origin, pglogical, repmgr, londiste, mimeo, pglogical_ticker
SEC pgaudit, pgsodium, anon, passwordcracklib, supabase_vault, pgauditlogtofile, set_user, login_hook, pgcryptokey, pg_jobmon, logerrors, pg_auth_mon, pgsmcrypto, pg_tde, credcheck, table_log, pg_snakeoil
OLAP pg_lakehouse, duckdb_fdw, citus_columnar, parquet_s3_fdw, columnar, pg_analytics, timescaledb, pg_tier
FUNC count_distinct, pgsql_tweaks, tdigest, topn, pgjwt, pg_net, extra_window_functions, http, gzip, pg_later, pg_idkit, pg_background, pgpcre, first_last_agg, icu_ext, q3c, pg_sphere
FDW hdfs_fdw, mysql_fdw, pgbouncer_fdw, mongo_fdw, sqlite_fdw, tds_fdw, ogr_fdw, oracle_fdw, multicorn, db2_fdw, wrappers
LANG plpgsql_check, plsh, pllua, plr, plluau, pldbgapi, plv8, plprql, pg_tle, pljava, hstore_plluau, hstore_pllua, omnidb_plpgsql_debugger
SIM orafce, pg_extra_time, pgmemcache, pg_dbms_job, mysqlcompat, pg_dbms_metadata, pg_dbms_lock
ADMIN pg_readonly, pg_squeeze, pgfincore, pgl_ddl_deploy, prioritize, ddlx, pgagent, pg_repack, pg_cron, pgpool_recovery, pgpool_regclass, pgpool_adm, pg_dirtyread, pgdd, pgautofailover, safeupdate, toastinfo
STAT pg_permissions, pg_qualstats, pg_stat_kcache, pg_stat_monitor, pg_track_settings, pg_wait_sampling, plprofiler, powa, pgexporter_ext, system_stats, pg_store_plans, pgmeminfo, pg_profile, pg_show_plans, pg_statviz
AI pg_tiktoken, imgsmlr, svector, pg_similarity, pgml, vectorize, vector
FEAT periods, pg_ivm, jsquery, hll, pgtt, rum, pg_hint_plan, age, temporal_tables, table_version, pg_graphql, pgq, pgmq, pg_strom, pg_jsonschema, hypopg, emaj, pgq_node, pre_prepare, rdkit

这些扩展之间,许多都可以相互组合使用,产生协同效应,产生 1+1 » 2 的神奇效果。

正如 TimescaleDB CEO Ajay 在 《为什么PostgreSQL是未来数据的基石?》 一文中所述,PostgreSQL 正在成为事实上的数据库标准

通过极致可扩展性的魔法,PostgreSQL 集异璧之大成,做到了守正出奇,实现了主干极致稳定性与功能敏捷性的统一**。**扎实的基本盘配上惊人的演进速度,让它成为了数据库世界中的一个异数,彻底改变了数据库世界的游戏规则。

时至当下,PostgreSQL 已是不可挡。而 Pigsty 让 PostgreSQL 如虎添翼,插上一对起飞的翅膀。


国产信创数据库?

在中国做数据库赛道,绕不开的一个问题就是“国产化”与“信创”。关于这个主题,我已经写过很多文章深入探讨过了:

我的观点是:整个国产信创数据库行业完全基于一个事实上根本不成立的假设 —— 所谓 “数据库卡脖子” 的风险。在开源的 PostgreSQL 面前,所谓卡脖子是个伪命题 —— 如果被欧美严厉制裁的俄国企业们数据库没有崩溃,中国也完全可以同样拿 PG 做同样的事,而不是弄出一堆换皮魔改或土法炼钢的劣质轮子出来。

许多国产数据库都是这样的:企业花点钱买一套“国产xxx”放在那里,上面来检查了,就拿出来糊弄一下,实际上该用啥还是继续用啥(我要给这种务实的态度点个赞!👍) 但是很多时候,即使客户想要用的就是原生 PG,但没有一块 “国产” 的牌子,确实是很难走立项采购流程的,我们就有一些客户面临这样让人头大的难题。

不过大部分用户也不愿意当傻狍子和冤大头,许多有国产化要求的企业都是这样的:花点钱买一套“国产xxx”放在那里,上面来检查了,就拿出来糊弄一下,实际上该用啥还是继续用啥(我要给这种务实的态度点个赞!👍) 但是很多时候,即使客户想要用的就是原生 PG,但没有一块 “国产” 的牌子,确实是很难走立项采购流程的,我们就有一些客户面临这样让人头大的难题。

因此,我们想了一个绝妙的折衷办法 —— PolarDB for PostgreSQL。根据 【安全可靠测评结果公告(2023年第1号)】,附表三、集中式数据库: PolarDB 属于自主可控,安全可靠的国产信创数据库。(中国信息安全测评中心-产品测评公告,证书编号:CNITSEC2022I&OE0047

中国信息安全测评中心-产品测评公告
证号: CNITSEC2022I&OE0047
发证日期: 2022-04-26
截至时间: 2025-04-25
产品名称: 阿里云PolarDB V2.0内核核心模块
厂商: 阿里云计算有限公司
认证级别: 自主原创
认证评价:

最妙的是,PolarDB PG 是开源的。所以 Pigsty 提供了对 PolarDB PG 的完整监控支持,以及使用 Docker 进行部署的能力,可以帮助客户快速拉起一个“国产数据库”稻草人,无论是应付检查,还是作为立项采购的名头,都非常好用! 而且相对于其他那些过时落后,魔改的亲妈都不认识的杂种 PG 国产库,PolarDB 的含 P 量很高,所以如果想用,真的是可以拿来当成一个 PG 11 用起来的。

最后说点实际的,如果你问我,有什么功能是“国产数据库”有,而 PostgreSQL 没有的,我还真知道一个 —— 所谓的 “商密” 算法。最主要的是三个: 用于替代 RSA 的 SM2 算法,用于替代 MD5/SHA 的 SM3 算法,用于替代 DES/AES 的 SM4 算法。但现在,原生的 PostgreSQL 也可以通过 smcrypto 扩展插件也可以提供商密算法支持了!


开箱即用的ERP

与 “国产数据库” 类似,许多国产 ERP 软件也是处在一个很尴尬的位置上,因为已经有一个足够好的开源 ERP 系统了 —— Odoo (原名 OpenERP)。

不少 Pigsty 的用户是拿着 PG 去跑 Odoo 的,这引起了我的好奇,于是我也混入了 Odoo 社区学习,也自己搭了一套试了一把,确实非常牛逼,要是早点试试这么好的东西,就不去折腾什么土法建站了。

odoo-intro.png

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

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

odoo-module.png

Odoo 使用,且仅使用了 PostgreSQL 作为数据存储。整套 ERP 软件,只需要一个 PG 数据库,一个 Docker 镜像就可以搞定了!堪称是 PostgreSQL 杀手级应用的典范。

作为一个 PostgreSQL 发行版,我没理由不去支持 Odoo。因此在 Pigsty v2.7 中提供了一个 Docker Compose 模板,可以一键拉起 Odoo。你还可以复用 Pigsty 提供的基础设施,轻松通过 Nginx 对外暴露 Web 服务,提供 HTTPS 接入。

最后能实现的效果是,在一台裸虚拟机上,你只需要几行命令就可以拉起生产质量的企业级 ERP 系统!关于 Odoo ,后面我会专门出一期教程,介绍如何利用 Pigsty 自建 ERP 系统。


PITR与监控面板

像 Odoo 这样的 ERP 系统,对数据库的要求与传统互联网行业非常不一样。例如:我在 Odoo 社区看到了如下对话:“我的 Odoo 已经用了好几年了,现在 PostgreSQL 里的数据量已经到 2.5GB 了”,下面朋友回复 —— “那真的是非常大了!

2.5 GB的数据量,对于互联网规模的应用来说简直是微不足道。但是对于一个 ERP 系统来说,这已经是一个非常大的数据库了。比起性能 & 高可用,像 ERP 这样的系统更关注的是数据完整性与机密性,很多时候,也就是拿一台服务器就跑起来了,不要 HA,只要有备份与 时间点恢复 (PITR) 就行。

Pigsty 已经提供了开箱即用的 PITR ,允许用户回滚到任意时间点。但是这个过程所需的信息和反馈却散落在监控系统中的不同角落中,因此在 Pigsty v2.7 中,Pigsty 提供了一个专用的监控面板 PGSQL PITR,用于提供 PITR 时间点回复过程的上下文。

pitr.png

后面,我们会专门出一期教程,介绍如何利用 Pigsty 的 PITR 功能,实现企业级的数据备份与恢复。


开源版与专业版

在 《Pigsty v2.6:PostgreSQL 踢馆 OLAP》 中,我已经提到过我们将区分 Pigsty 开源版与 专业版

在 Pigsty v2.7 中,我们将开源版支持的操作系统发行版收敛到 Redhat, Debian, Ubuntu 这三个主干上来。我们提供 PostgreSQL 16 在 EL8, Debian12, Ubuntu22.04 的第一类支持,并提供可以无需互联网进行安装的开源版离线软件包。 当然,EL7, EL9, Debian11, Ubuntu20.04 这些系统还是可以继续使用 Pigsty 的,但是不会有离线软件包,只能通过联网安装的模式进行首次部署。

Pigsty 开源版
开源免费!
自给自足的开源老司机

PG支持:16

OS支持:三系主力版本

  • EL 8.9
  • Debian 12
  • Ubuntu 22.04

功能:核心模块

SLA:无

社区公益支持答疑

Pigsty 基础版
50,000 ¥ / 年
或 5,000 ¥/月

PG支持:15,16

OS支持:五系最新小版本

  • EL 7.9 / 8.9 / 9.3
  • Ubuntu 20.04 / 22.04
  • Debian 11 / 12

功能:所有模块

SLA:工作日时效内响应

提供基础咨询服务:

  • 软件缺陷修复
  • 疑难杂症分析
  • 升级路径支持

Pigsty 专业版
150,000 ¥ / 年
或 15,000 ¥/月

PG支持:12 - 16

OS支持:五系全部小版本

  • EL 7.x / 8.x / 9.x
  • Ubuntu 20.x / 22.x
  • Debian 11.x / 12.x

功能:所有模块

SLA:5 x 8 (<4h)

提供专业咨询服务:

  • 软件缺陷修复
  • 疑难杂症分析
  • 升级路径支持
  • 备份合规建议
  • DBA答疑解惑

Pigsty 企业版
400,000 ¥ / 年
或 40,000 ¥/月

PG支持:9.0 - 16

OS支持:按需定制

  • EL, Debian, Ubuntu
  • 云上 Linux 操作系统
  • 国产操作系统与ARM

功能:所有模块

SLA:7 x 24 (紧急on-call)

提供企业级咨询服务:

  • 软件缺陷修复
  • 疑难杂症分析
  • 升级路径支持
  • 备份合规建议
  • DBA答疑解惑
  • 故障根因定位
  • 年度架构评估

Pigsty 专业版与开源的区别主要在于兼容性与功能模块,例如 PostgreSQL 大版本支持范围,操作系统大版本支持范围,芯片架构支持范围。

在原本的功能设计中,开源版将只包括 INFRA, NODE, PGSQL, ETCD 四个与 PostgreSQL 服务紧密关联的核心模块,我纠结了很久是否要将 MinIO, Redis, FerretDB (Mongo), 以及 Docker 四个 扩展模块 划到专业版中,但最终还是决定将其保留在开源版里 —— 因为它们已经开源了,没道理再阉割掉。 但是与 PostgreSQL 相关性不大的其他模块以及后续的新功能模块,例如 Greenplum,MySQL,DuckDB,Kafka,Mongo, SealOS (Cloud) 都一定会划归专业版中。

在兼容性上,Pigsty 专业版将提供 PG完整生命周期 12 - 16 五个大版本,在七个主力大版本与其兼容系统上的支持,专业版采用按需定制的方式,交付专业版源码包,以及用户所需操作系统精准小版本的全功能离线软件安装包,包含所有生命周期内 PG 大版本的所有可用扩展插件。 另外,在这个版本中,我们自己维护了完整的 ARM64 Prometheus & Grafana 软件源,也可以在专业版中提供 Arm64 的芯片架构支持了,如果有需要跑在 arm 服务器,或者 “国产芯片” 上,这是一个不错的特性。

总的来说,Pigsty v2.7 的开源/专业版区分,在不影响开源用户使用体验的前提下,又给了企业用户一个充分的付费理由 ;)。


展望未来

总的来说, Pigsty 已经达到我心目中比较理想的状态了。在功能上,它已经做的足够好了!在某些方面已经远超 RDS 了(比如扩展支持与监控系统)。

但正所谓,酒香也怕巷子深 —— 所以接下来的工作重点会更多地转移到运营、营销、销售上去。开源项目的持续运营离不开用户与客户的支持,如果 Pigsty 帮助到了您,欢迎考虑赞助我们,或采购我们的服务订阅~。

当然,说起运营 —— 就在下周,也就是五月28号,我将去温哥华参加 2024 PostgreSQL 开发者大会,a.k.a 第一届 PGConf.Dev (以前叫 PG Con)。共同探讨 PostgreSQL 的未来,并更进一步地把 Pigsty 推向全球!


v2.7.0 发布注记

亮点特性

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

  • pg_search v0.7.0:使用 BM25 算法对 SQL 表进行全文搜索
  • pg_lakehouse v0.7.0:在对象存储(如 S3)和表格式(如 DeltaLake)上进行查询的引擎
  • pg_analytics v0.6.1:加速 PostgreSQL 内部的分析查询处理
  • pg_graphql v1.5.4:为 PostgreSQL 数据库提供 GraphQL 支持
  • pg_jsonschema v0.3.1:提供 JSON Schema 校验的 PostgreSQL 扩展
  • wrappers v0.3.1:由 Supabase 提供的 PostgreSQL 外部数据封装器集合
  • pgmq v1.5.2:轻量级消息队列,类似于 AWS SQS 和 RSMQ
  • pg_tier v0.0.3:支将将冷数据分级存储到 AWS S3
  • pg_vectorize v0.15.0: 在 PG 中实现 RAG 向量检索的封装
  • pg_later v0.1.0:现在执行 SQL,并在稍后获取结果
  • pg_idkit v0.2.3:生成多种流行类型的标识符(UUID)
  • plprql v0.1.0:在 PostgreSQL 中使用 PRQL 查询语言
  • pgsmcrypto v0.1.0:PostgreSQL 的国密 SM 算法扩展
  • pg_tiktoken v0.0.1:计算 OpenAI 使用的 Token 数量
  • pgdd v0.5.2:通过纯 SQL 接口,访问数据目录的元数据

当然,也有一些使用原生 C 和 C++ 开发的强力扩展:

  • parquet_s3_fdw 1.1.0:从 S3 存取 Parquet 格式文件,作为湖仓之用
  • plv8 3.2.2:使用 V8 引擎,允许在 PostgreSQL 中使用 Javascript 语言编写存储过程
  • md5hash 1.0.1:用于存储原生MD5哈希数据类型,而非文本。
  • pg_tde 1.0 alpha:PostgreSQL 的实验性加密存储引擎。
  • pg_dirtyread 2.6:从 PostgreSQL 表中读取未清理的死元组,用于脏读
  • 新的 deb PGDG 扩展:pg_roaringbitmap, pgfaceting, mobilitydb, pgsql-http, pg_hint_plan, pg_statviz, pg_rrule
  • 新的 rpm PGDG 扩展:pg_profile, pg_show_plans, 使用 PGDG 的 pgsql_http, pgsql_gzip, pg_net, pg_bigm 替代 Pigsty 维护的 RPM。

新特性

  • 允许 Pigsty 在特定 Docker 虚拟机镜像中运行。
  • 针对 Ubuntu 与 EL 系操作系统发行版准备了 INFRA & PGSQL 模块的 arm64 软件包
  • 新安装脚本,可从 cloudflare 下载软件,可以指定版本,提供更完善的提示信息。
  • 新增的 PGSQL PITR 监控面板,用于在 PITR 过程中提供更好的可观测性
  • 针对在 Docker 虚拟机镜像中运行 Pigsty 进行了一系列铺垫与准备。
  • 新增了 防呆设计,避免在非 Pigsty 纳管的节点上运行 pgsql.yml 剧本 (AdamYLK
  • 针对每个支持的发行版大版本配置了独立的配置文件:el7, el8, el9, debian11, debian12, ubuntu20, ubuntu22

Docker应用模板

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

软件版本升级

  • PostgreSQL 16.3
  • Patroni 3.3.0
  • pgBackRest 2.51
  • VIP-Manager v2.5.0
  • Haproxy 2.9.7
  • Grafana 10.4.2
  • Prometheus 2.51
  • Loki & Promtail: 3.0.0 (警告:大版本非兼容性变更!)
  • Alertmanager 0.27.0
  • BlackBox Exporter 0.25.0
  • Node Exporter 1.8.0
  • pgBackrest Exporter 0.17.0
  • duckdb 0.10.2
  • etcd 3.5.13
  • minio-20240510014138 / mcli-20240509170424
  • pev2 v1.8.0 -> v1.11.0
  • pgvector 0.6.1 -> 0.7.0
  • pg_tle: v1.3.4 -> v1.4.0
  • hydra: v1.1.1 -> v1.1.2
  • duckdb_fdw: v1.1.0 重新针对 libduckdb 0.10.2 进行编译
  • pg_bm25 0.5.6 -> pg_search 0.7.0
  • pg_analytics: 0.5.6 -> 0.6.1
  • pg_graphql: 1.5.0 -> 1.5.4
  • pg_net 0.8.0 -> 0.9.1
  • pg_sparse (deprecated)

缺陷修复

  • 修复了 pg_exporters 角色中的变量空白问题。
  • 修复了 minio_cluster 变量没有在全局配置中注释掉的问题
  • 修复了 EL7 模板中的 postgis34 插件名称问题,应该使用 postgis33
  • 修复了 EL8 python3.11-cryptography 依赖名的问题,上游现在变更为 python3-cryptography
  • 修复了 /pg/bin/pg-role 无法在非交互式 Shell 模式下获取操作系统用户名的问题
  • 修复了 /pg/bin/pg-pitr 无法正确提示 -X -P 选项的问题

API变更

  • 新参数 node_write_etc_hosts,用于控制是否向目标节点的 /etc/hosts 文件写入静态 DNS 解析记录
  • 新增了 prometheus_sd_dir 参数,用于指定 Prometheus 静态服务发现的目标文件目录
  • configure 脚本新增了 -x|--proxy 参数,用于将当前环境的代理信息写入配置文件 by @waitingsong in https://github.com/Vonng/pigsty/pull/405
  • 不再使用 Promtail & Loki 解析 Infra 节点上的 Nginx 日志细节标签,因为这样会导致标签基数爆炸。
  • 在 Prometheus 配置中使用 alertmanager API v2 替代 v1
  • 在 PGSQL 模块中,使用 /pg/cert/ca.crt 代替 /etc/pki/ca.crt,降低对节点根证书的依赖。

新的贡献者

完整的变更日志: https://github.com/Vonng/pigsty/compar

离线软件包校验和

ec271a1d34b2b1360f78bfa635986c3a  pigsty-pkg-v2.7.0.el8.x86_64.tgz
f3304bfd896b7e3234d81d8ff4b83577  pigsty-pkg-v2.7.0.debian12.x86_64.tgz
5b071c2a651e8d1e68fc02e7e922f2b3  pigsty-pkg-v2.7.0.ubuntu22.x86_64.tgz

v2.6:PG 踢馆 OLAP

Pigsty v2.6 使用 PostgreSQL 16.2 作为了默认主版本,并引入了 ParadeDB 与 DuckDB 支持。

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

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

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


分析性能史诗级加强

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

图片

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

在这张图表上我们标注出了 PostgreSQL 与生态扩展插件的性能表现。原生未经过调优的 PostgreSQL 耗时(x1000),调优后可以达到(x47),同时,PG生态还有三个与分析有关系的扩展:列存 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 带来的完整分析性能红利!

图片

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


全新的价值主张

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

图片

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

图片

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

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

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

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

图片


全新的网站

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

图片

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

图片

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

图片

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

图片

与此同时, Pigsty 提供的软件源也有了全球的镜像仓库,由 Cloudflare R2 强力驱动。并托管在 Cloudflare 上,为全球用户都带来丝滑的访问体验(当然国内可以继续使用 pigsty.cc )。


PostgreSQL 16 成为默认版本

最后一个值得一提的特性是,在 Pigsty v2.6 中,PostgreSQL 16 (16.2) 正式取代先前的 PostgreSQL 15,成为默认的数据库大版本。

在三个月前的 《Pigsty v2.5.1发布:PG16能打了吗?》 中,我们已经指出 PostgreSQL 的主要扩展插件已经就位,加上第二个小版本发布,可以上生产环境了。

而 Pigsty v2.6 正值 PostgreSQL 16.2 第三个小版本发布,Hydra,PGML,AGE 这几个重要扩展也跟进了 PG 16,所以我们决定,正式将默认的 PG 大版本升级为 16 ,而且将成为开源版唯一支持的 PG 大版本(EL7除外)。

因此,在这个版本中,我们做出的另一个重要的技术决策是:在开源版中移除了默认囊括的 PG 12 - 15 软件包与扩展。Pigsty 并非不支持 PG 12 - 15,只需要稍微调整配置文件,就可以轻松使用老版本的 PostgreSQL 扩展插件,只是我们不会再针对这些版本启用集成测试了(虽然在老版本的 Pigsty 里已经测试的很充分了)。

图片

同理,我们也将开源版本的支持范围进一步收窄,缩小到 EL 8 / EL 9 与 Ubuntu 22.04 这三个使用范围最广的操作系统发行版上来。因为在 Pigsty 2.5 的时候,我们支持的是 PG 12 - 16 五个大版本乘以七个操作系统发行版,共 34 种排列组合,加上后续的 ARM 适配支持,给测试带来了很大压力。

让开源版聚焦于一个核心PG大版本与三个主流操作系统大版本,可以更好的利用研发带宽,满足最广大开源用户的使用需求。同理,这并不意味着 Pigsty 不能在老系统上用了,你依然可以在 EL7,Ubuntu 20.04,Debian 11/12 上丝滑运行,但我们不会为这些操作系统提供离线软件包,冒烟测试与支持了。

对于小众冷门操作系统系统与过时大版本的支持,并不是占总体绝大多数用户所需要的,却需要耗费许多额外的精力与成本,因此纳入了我们的付费商业支持中。


开源版与专业版划分

有一些开源用户反馈 —— 我并不需要那些和 PostgreSQL 关系不大的东西来拖慢下载安装速度并增加管理复杂度 —— 什么 Redis, MinIO, Docker, K8S,Supabase 之类的,虽然你觉得这些东西能给 PG 打辅助,但花里胡哨的东西只会拖慢我出刀的速度。

具体的功能切割方式还没有确定与落地,因此 2.6 也许是最后一个全功能的 Pigsty 开源版本。但基本原则是,开源版将保留所有的核心功能模块与PG扩展插件(PGSQL, INFRA, NODE, ETCD),而与 PostgreSQL 关系没有那么紧密的模块,在后续可能会作为专业版的内容提供。

图片

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

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


商业订阅服务

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

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

图片

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

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

图片

许多时候,化腐朽为神奇,能带来几个数量级改善的秘密就是专家的一句话。对于以可扩展性作为灵魂,扩展生态极度繁荣的 PostgreSQL 来说更是如此。我们的服务可以确保您的每一分钱都花得物有所值,并花在真正的刀刃上。


展望未来

Pigsty 的下一个大版本计划升级到 v3 ,将会正式落地开源版与专业版的功能划分。我们会在 Ubuntu / Debian 系操作系统中补完缺失的扩展 Deb 包,并提供一个命令行工具来封装管理操作。也许会将 Pigsty 本身打成一个 RPM / Deb 包提供,我们还计划提供 MYSQL 监控部署的 Beta 支持。

在监控系统上,我们会针对 PG 16 提供的 IO 指标重新调整 PostgreSQL 监控面板的样式。提供对 MySQL 的监控能力,尝试使用 Vector 作为日志收集组件 Promtail 的备选替换。我们已经有了针对阿里云 RDS PG 与 PolarDB 的监控,我们也计划在 v3.0 中提供对 AWS RDS 与 Aurora 的监控支持。

在基础设施建设上,我们会选择放弃“便宜”腾讯云 CDN,全面拥抱更可靠更快速且更便宜的 Cloudflare,为全球用户提供服务。腾讯云 CDN 也许可以作为国内的镜像站点,提供专业版的加速服务。

Pigsty 的产品与接口在 v2.6 和 v3.0 将会固化收敛,因为在产品与技术上,它已经做的足够好了!甚至在某些方面已经远超 RDS 了(比如扩展支持与监控系统!)所以接下来的工作终点会转移到营销与销售上来。开源项目的持续运营离不开用户与客户的支持,如果 Pigsty 帮助到了您,欢迎考虑赞助我们,或采购我们的服务订阅~。


v2.6.0

亮点特性

软件配置变更

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

v2.5:Ubuntu & PG16

Pigsty v2.5 提供了 Ubuntu/Debian 支持:bullseye, bookworm, jammy, focal,新扩展,监控改进

时值 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 数据库服务。更多介绍,请访问 https://pigsty.cc

图片


Ubuntu/Debian支持

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

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

图片

Pigsty 维护的 APT/YUM 源

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

图片

一键安装 Pigsty

在使用体验上,Deb系 支持的功能集与EL系几乎完全相同,唯一的例外是 supabase 及其使用的几个专用扩展还没有完成移植。除此之外, Deb 系还有一些独有的扩展插件,例如化学分子式扩展 RDKit,激光雷达点云数据扩展 pointcloud / 扩展距离函数包 pg_similarity (这两个给力扩展反向移植到 EL 了)。想要完整发挥 PostgresML + CUDA 的实力,更是非 Ubuntu 不可。

Pigsty 在自动配置过程中添加了 Debian / Ubuntu 系统的识别,单机安装时会自动使用对应的配置模板。Deb系的模板相比 EL系只有 8 个参数的默认值有区别 —— 因为两种发行版的包名是不一样的,所以像 xx_packages 的参数肯定是需要调整的。除此之外需要就只有 上游源 repo_upstream ,本地源 node_repo_local_urls ,以及默认的 pg_dbsu_uid 了(DEB包没有分配固定UID)。

图片

Ubuntu 系统的声明式配置文件

这些参数通常都不需要用户来调整,所以在 Pigsty 使用流程上,Deb系可以说几乎没有任何区别了:实际上 Pigsty 的离线软件包构建模版就是这么工作的:一次性在七种不同的操作系统上完成完整的 Pigsty 安装,无需任何特殊处理。


新的扩展插件

Pigsty v2.5 收纳了几款用户呼声比较高的扩展插件。首当其冲的便是 PostgresML。尽管在上一个版本中,Pigsty 已经提供了在 EL8 / EL9 上使用 PostgresML 的能力,但搞 AI 的操作系统基本上都是清一色的 Ubuntu,最起码 CUDA 驱动装起来方便啊。

所以 Pigsty v2.5 中,您可以在 Ubuntu 上运行原生的 PostgresML 集群了。你不需要折腾什么 NVIDIA Docker 之类的东西,pip 安装好 python 依赖,直接起飞就可以。使用 SQL 训练模型,调用模型,让你的整个 AI 工作流都在数据库中完成!

图片

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

图片

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

图片

首先将 PNG/JPG 图片使用 Haar小波变换的方式处理为 16K 大小的模式与64字节的摘要签名,然后利用 GiST 索引检索摘要的方式来高效实现以图搜图。使用 imgsmlr 从4亿随机图片中召回最相似的10张大约耗时 600ms 。”

另一个有趣的扩展 pg_similarity[3] 默认在 Ubuntu/Debian 的 APT 源中提供,Pigsty 将其移植到了 EL 上。它提供了 17 种文本距离度量函数的高效 C 语言实现,极大丰富了检索排序的能力。另一个相关的插件是 pg_bigm,它类似 PG 自带的 pg_trgm,唯一的区别是用二字组替代三字组实现模糊检索,对中日韩语言的全文检索支持效果更好。

图片

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

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


监控系统调整

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

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

图片

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

图片

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

图片

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

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

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

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

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

图片

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

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

图片

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

图片

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

图片

除了上面三个 Dashboard 之外,Pigsty 也对许多其他面板进行了优化改进与问题修复。许多面板的信息栏现在会提供更详细的信息:这个面板展现了什么指标,用于解决什么问题,等等等。我们也引入了三个新的 Grafana 插件用于支持 CSV/JSON 数据源,以及变量面板。


下个版本做点啥?

Pigsty 的下一个版本是 v2.6.0 ,除了进一步巩固 Ubuntu/Debian 的支持成熟度,这个版本的关注焦点将会关注两件事:MySQL 支持与命令行工具。

Pigsty 将提供基本的(主从,但没有HA) MySQL 安装部署支持,并提供基于 Grafana / Prometheus / MysqldExporter 的监控。因为 MySQL 5.7 将于本月 EOL,相信这样的能力会让更多的 MySQL 用户接触 PostgreSQL 并方便地迁移上来。

此外,我们还会进一步探索 Infra 组件容器化,调研使用 VictoriaMetrics 默认替换 Prometheus,或者使用 Vector 与 VictoriaLogs 替代 Loki与Promtail 的可行性。并设计一个更加好用的管控命令行工具 pigsty-cli,对 Greenplum 7.0 的部署提供正式支持,当这些任务都完成后,Pigsty 就将迎来第三个大版本 v3 了。


发布注记

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

[1] pointcloud: https://github.com/pgpointcloud/pointcloud [2] imgsmlr: https://github.com/postgrespro/imgsmlr [3] pg_similarity: https://github.com/eulerto/pg_similarity [4] Ubuntu: https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml [5] Debian: https://github.com/Vonng/pigsty/blob/master/files/pigsty/debian.yml [6] ubuntu.yml: https://github.com/Vonng/pigsty/blob/master/files/pigsty/ubuntu.yml


v2.5.0

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

亮点特性

  • 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

v2.4:监控云数据库

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

PostgreSQL 今天发布了新的大版本 16,带来了一系列改进。Pigsty在发布后的1小时内便立即跟进了全新版本 Pigsty v2.4 ,提供了对 PostgreSQL 16 正式版的完整支持。此外在 v2.4 中,还对监控已有PG实例,特别是 RDS for PostgreSQL 与 PolarDB 提供了额外的支持。Redis 监控基于 7.x 进行了改进,提供了自动化的基于 Sentinel 的高可用配置。

Pigsty v2.4 目前仍为 Beta 状态,可以使用以下命令快速上手。文档修缮完成后,将正式发布

bash -c "$(curl -fsSL https://get.pigsty.cc/beta)"

图片


亮点特性

•PostgreSQL 16 正式发布,Pigsty在发布后1小时内提供支持。•可以监控云数据库,RDS for PostgreSQL,以及 PolarDB,提供全新的 PGRDS 监控面板•正式提供商业支持与咨询服务。并发布首个 LTS 版本,为订阅客户提供最长5年的支持。•新扩展插件: Apache AGE ,在 PostgreSQL 上提供图数据库查询能力•新扩展插件: zhparser,中文分词,用于支持中文全文检索功能•新扩展插件: pg_roaringbitmap,高效实现 RoaringBitmap 位图功能•新扩展插件: pg_embedding,另一种基于 HNSW 索引的向量数据库插件hnsw alternative to pgvector•新扩展插件: pg_tle,由 AWS 出品的可信语言存储过程管理/发布/打包扩展•新扩展插件: pgsql-http,在数据库中使用 SQL 接口直接发送HTTP请求处理响应。•其他新增插件:pg_auth_mon,pg_checksums,pg_failover_slots,pg_readonly,postgresql-unit pg_store_plans,pg_uuidv7,set_user•Redis改进:支持 Redis 哨兵监控,配置主从集群的自动高可用。

API变化

•新增参数,REDIS.redis_sentinel_monitor,用于指定 Sentinel 集群监控的主库列表


PG16支持

Pigsty 也许是最早提供 PostgreSQL 16 支持的发行版,从 16 beta1 就开始,因此当 PostgreSQL 16 发布后一个小时,Pigsty 即完成了对正式版本的支持。你已经可以拉起 PostgreSQL 16 的高可用集群,尽管有个别重要扩展还没有在官方的 PGDG 仓库提供,例如 Citus 与 TimescaleDB。但其他一些扩展已经可用:包括 postgis34,pgvector, pg_squeeze,wal2json,pg_cron,以及由 Pigsty 所维护打包的扩展插件:zhparser,roaringbitmap,pg_embedding, pgsql-http 等。

PostgreSQL 16 有一些比较实用的新功能:从库逻辑解码与逻辑复制,针对I/O的新统计视图,全连接的并行执行,更好的冻结性能,符合 SQL/JSON 标准的新函数集,以及在HBA认证中使用正则表达式等等。

不过要注意的是,PGDG 官方仓库目前决定在 PostgreSQL 16 中放弃对 EL7 的支持,所以 PG16 仅在 EL8 与 EL9 及其兼容操作系统发行版中可用。


监控RDS与PolarDB

Pigsty v2.4 提供了对 RDS 监控的支持。特别是还添加了对 PolarDB 云数据库的监控支持。当您只有一个远程 PostgreSQL 连接串时,可以使用这种方式将其纳入 Pigsty 监控。

图片

样例:监控一个一主一从的 PolarDB RDS 集群

Pigsty v2.4 提供了对 RDS 监控的支持。特别是还添加了对 PolarDB 云数据库的监控支持。当您只有一个远程 PostgreSQL 连接串时,可以使用这种方式将其纳入 Pigsty 监控中。Pigsty 提供了两个全新 Dashboard:PGRDS Cluster 与 PGINS Cluster,用于呈现 RDS PG 的完整指标。

图片

图片

图片


商业支持

Pigsty v2.4 是第一个 LTS 版本,将为企业订阅用户提供3年的长时间支持。同时,我们将正式开始对外提供订阅与支持服务,欢迎有需求的用户联系我们采购。

https://pigsty.cc/zh/docs/support/

图片


REDIS高可用

Pigsty v2.4 中,我们提供了一个新的参数 redis_sentinel_monitor ,用于自动配置经典主从 Redis 集群的高可用。该参数只能在 Sentinel 集群上定义,定义中的主库将会自动被哨兵集群所纳管

图片

与此同时,我们也在 Redis 监控中添加了 Sentinel 相关指标与面板,并针对 Redis 7.x 的新特性进行了适配。


新扩展

Pigsty v2.4 提供了一系列的新扩展插件,包括尚未收录在 PGDG 官方仓库中的重要扩展。例如,图数据库插件 Apache AGE,中文分词全文检索插件 zhparser,HTTP插件pgsql-http,可信扩展打包插件 pg_tle ,位图插件 pg_roaringbitmap,以及向量数据库插件 PGVector 的另一种替代实现 pg_embedding ,等等等等。

所有插件都在 EL7 - EL9 上针对 PostgreSQL 12 至 PostgreSQL 16 进行编译打包,不过 EL7 因为编译器版本问题,尚未支持 pg_tle 与 pg_embedding 。这些 RPM 包将由 Pigsty 维护,并放置于 Pigsty 自己的 Yum 源中。

图片

例如,您可以使用 AGE 为 PostgreSQL 加装图数据库能力,创建 Graph,并使用 Cypher 查询语言与 SQL 语言一起探索图数据,实现 Neo4j 的效果。

图片

再比如,您可以使用 zhparser 中文分词插件,将中文文本与查询拆分为关键词,使用 PostgreSQL 经典的全文检索能力,实现搜索引擎与 ElasticSearch 的效果。

图片

更有甚者,你还可以使用 pgsql-http 插件,使用 SQL 接口来发送 HTTP 请求,处理 HTTP 响应。这让数据库可以与外部系统深度集成与交互,打开无尽的想象空间:

图片

您还可以使用 roaringbitmap ,使用极少的资源,高效地进行计数统计:

图片

具体细节就不在此展开了,后面我们会专门出一些文章,介绍这些强力扩展的使用方式。

欢迎大家使用 Pigsty 并提出反馈意见,加讨论群请微信搜索 Pigsty 小助手:pigsty-cc 。


v2.4.0

使用 bash -c "$(curl -fsSL https://get.pigsty.cc/latest)" 快速上手。

最新特性

  • PostgreSQL 16 正式发布,Pigsty提供支持。
  • 可以监控云数据库,RDS for PostgreSQL,以及 PolarDB,提供全新的 PGRDS 监控面板
  • 正式提供商业支持与咨询服务。并发布首个 LTS 版本,为订阅客户提供最长5年的支持。
  • 新扩展插件: Apache AGE, openCypher graph query engine on PostgreSQL
  • 新扩展插件: zhparser, full text search for Chinese language
  • 新扩展插件: pg_roaringbitmap, roaring bitmap for PostgreSQL
  • 新扩展插件: pg_embedding, hnsw alternative to pgvector
  • 新扩展插件: pg_tle, admin / manage stored procedure extensions
  • 新扩展插件: pgsql-http, issue http request with SQL interface
  • 新增插件: pg_auth_mon pg_checksums pg_failover_slots pg_readonly postgresql-unit pg_store_plans pg_uuidv7 set_user
  • Redis改进:支持 Redis 哨兵监控,配置主从集群的自动高可用。

API变化

  • 新增参数,REDIS.redis_sentinel_monitor,用于指定 Sentinel 集群监控的主库列表

问题修复

  • 修复 Grafana 10.1 注册数据源时缺少 uid 的问题
MD5 (pigsty-pkg-v2.4.0.el7.x86_64.tgz) = 257443e3c171439914cbfad8e9f72b17
MD5 (pigsty-pkg-v2.4.0.el8.x86_64.tgz) = 41ad8007ffbfe7d5e8ba5c4b51ff2adc
MD5 (pigsty-pkg-v2.4.0.el9.x86_64.tgz) = 9a950aed77a6df90b0265a6fa6029250

v2.3:丰富应用生态

PGSQL/REDIS升级,NODE集群可绑VIP,Mongo初步支持与MySQL存根

Pigsty v2.3 发布了 🎉,在这个版本中进一步完善了监控系统、应用生态、并跟进 PostgreSQL 例行的小版本更新(CVE修复)。

Pigsty v2.3 跟随 PostgreSQL 主干小版本进行更新,包括 15.4, 14.9, 13.12, 12.16 以及 16.beta3,此更新修复了一个 CVE 安全漏洞。此外高可用管控 Patroni 也升级到 3.1 版本,解决了一些 BUG 。

v2.3 提供了对 FerretDB 的支持,它是一个构建在 PostgreSQL 之上,真正开源的 MongoDB 替代。用户可以使用 MongoDB 客户端访问它,但是真正的数据都存储在底层的 PostgreSQL 里。

v2.3 还默认添加了一款名为 NocoDB 的开源应用:这是 AirTable 的开源替代:这是一个数据库-电子表格的混合体,可以用低代码的方式快速打造一个多人在线协作应用。

Pigsty v2.3 新增了为主机节点集群绑定一个 L2 VIP 的功能,使用 VRRP 协议确保全链路上没有单点,并提供了完整的监控:keepalived_exporter 被用于收集监控数据。而且每一个 Node VIP (keepalived)与 PGSQL VIP (vip-manager)都会添加到 blackbox_exporter 的 ICMP / PING 监控列表中。

在监控系统上,Pigsty v2.3 在 v2.2 的基础上进行了打磨优化:新增了 VIP 监控,VIP 与节点 PING 指标被加入到 NODE / PGSQL 监控的醒目位置;PGSQL 监控新增了锁等待树视图;REDIS 监控进行了风格优化;MinIO 监控适配的新的监控指标名称;MySQL / MongoDB 监控新增了实现存根,为后续实现奠定基础。

顺带一提,PGSQL x Pigsty 交流群新开3群了,对 PostgreSQL 与 Pigsty 感兴趣的朋友可以直接扫码加入(仅限前200人),如果加入不了请微信搜索 pigsty-cc 小助手加入。

MongoDB 支持?

MongoDB 是一个很受欢迎的 NoSQL 文档数据库。但由于开源协议问题(SSPL),与软件定位问题(Postgres发型版),Pigsty 决定使用 FerretDB 来提供对 MongoDB 的支持。FerretDB 是一个有趣的开源项目:它让 PostgreSQL 可以提供 MongoDB 的能力

图片

MongoDB 与 PostgreSQL 是两个非常不同的数据库系统:MongoDB 使用文档模型,使用专用的查询语言进行交互 。但是鉴于 PostgreSQL 也提供了完整的 JSON/JSONB/GIN 功能支持,所以这么做在理论上也是完全可行的:FerretDB 负责将您的 SON 查询转换为 SQL 查询:

use test-- CREATE SCHEMA test;
db.dropDatabase()-- DROP DATABASE test;
db.createCollection('posts')-- CREATE TABLE posts(_data JSONB,...)
db.posts.insert({title: 'Post One',body: 'Body of post one',category: 'News',tags: ['news', 'events'],user: {name: 'John Doe',status: 'author'},date: Date()})-- INSERT INTO posts VALUES(...);
db.posts.find().limit(2).pretty()-- SELECT * FROM posts LIMIT 2;
db.posts.createIndex({ title: 1 })-- CREATE INDEX ON posts(_data->>'title');

在 Pigsty 定义一个 FerretDB 集群与其他类型的数据库并无二致,您仅需要提供核心的身份参数:集群名称与实例号。需要关注的是 mongo_pgurl 参数,它指定了 FerretDB 底层使用的 PostgreSQL 地址。

ferret:  hosts:    10.10.10.45: { mongo_seq: 1 }    10.10.10.46: { mongo_seq: 2 }    10.10.10.47: { mongo_seq: 3 }  vars:    mongo_cluster: ferret    mongo_pgurl: 'postgres://test:test@10.10.10.3:5436/test'

您可以直接填入一个已由 Pigsty 创建的任意 PostgreSQL 服务地址。数据库不需要预先配置什么,你只需要确保所使用的用户具有 DDL 权限即可。

图片

配置完成后,使用 ./mongo.yml -l ferret 即可完成安装。当然,如果您更喜欢使用容器,也可以直接 cd pigsty/app/ferretdb; make 使用 docker-compose 拉起 FerretDB 使用。安装完成后,您可以使用任何 MongoDB Client 访问 FerretDB,例如 MongoSH:

mongosh 'mongodb://test:test@10.10.10.45:27017/test?authMechanism=PLAIN'

对于那些希望从 MongoDB 迁移到 PostgreSQL 的用户来说,这是一种改造成本极小的折衷手段。Pigsty 同样提供了另一种支持方式 MongoFDW:在 PostgreSQL 中使用 SQL 查询现有的 MongoDB 集群。

新应用:NocoDB

在 Pigsty v2.3 中,添加了对 NocoDB 的内置支持,您可以使用默认的 Docker Compose 模板,一键拉起 NocoDB 并使用内置的 PostgreSQL 作为存储。

NocoDB 是 Airtable 的开源替代品,那 AirTable 又是什么呢?其实有点类似于 Google Docs / 腾讯云文档。但是提供了非常丰富的接口,钩子,可以用来实现一些非常强大的功能。

图片

NocoDB 可以让各种关系型数据库变身成为 Excel ,运行你自己的本地云文档软件。它也可以让用户用低代码的方式实现一些需求:比如你可以把自动生成的表单发送给别人填写,将结果自动整理成为实时共享、可协作、可编程的多维表格。

在 Pigsty 中,拉起 NocoDB 非常容易,只需要一行命令即可。您可以修改 .env 中的 DATABASE_URL 参数来使用不同的数据库。

cd ~/pigsty/app/nocodb; make up

Node VIP 支持

Pigsty v2.3 新增了为主机节点集群绑定一个 L2 VIP 的功能,使用 VRRP 协议确保全链路上没有单点,并提供了完整的监控。

在古早的 Pigsty 版本中(0.5前),曾经提供过基于 Keepalived 的 L2 VIP 功能实现。但随后被 HAProxy + VIP-Manager 所取代:HAProxy 不挑网络,可以进行灵活的健康检查、流量分发,更是提供了一个简单易用的管控界面。而 VIP Manager 则可以将一个 L2 VIP 绑定在数据库集群主库上。

但通用的 L2 VIP 需求仍然是存在的,例如,如果用户选择使用 HAProxy 集群接入,那么 HAProxy 本身的可靠性如何保证?尽管您可以使用 DNS LB 的方式进行切换,但 VRRP 在可靠性与易用性上显然更胜一筹。此外,MinIO / ETCD ,Prometheus 这些组件,有时也会有这样的需求。

想要为集群绑定一个 L2 VIP 其实很简单,只需要启用 vip_enabled,分配一个 VLAN 中唯一的 VirtualRouterID 号与 VIP 地址就可以了。默认情况下,所有集群成员使用 BACKUP 初始状态以非抢占模式工作。你可以通过设置 vip_role 与 vip_preempt 来改变这一行为。

图片

L2 VIP 会自动被纳入监控中。当 MASTER 宕机后, BACKUP 会立即进行接管。

图片

监控系统改进

Pigsty v2.2 基于 Grafana 10 对监控系统进行了彻底的翻新重制。v2.3 在 v2.2 的基础上进行了更多优化。

例如,新增的 NODE VIP 监控面板用于展示一个 VIP 的状态:所属集群/成员,网络RT,KA的状态等等等等。

图片

上图展示了一个 L2 VIP 自动故障转移的现场监控:绑定在 3 节点集群 MinIO 上。当原本的 Master (.27)宕机后,(.26)立即完成接管。

同样的信息也被展示在 NODE 与 PGSQL 监控面板的关键位置:例如,Overview 的实例列表中,现在就会添加 VIP 的快速导航(紫色):

图片

图片

同理,在 NODE Cluster 与 PGSQL Cluster 中也会在醒目处列出 VIP 与所有成员的 ICMP 可达性状态(Ping 网络延迟)。

图片

图片

此外,在 PGCAT 中新增了默认 1s 刷新的 PGCAT Locks 监控面板,可以直观的观察数据库当前活跃的情况,以及锁等待的情况。

图片

锁等待会组织成一棵等待树,用 Level 与缩进标识层次。您可以选择不同的刷新率,最快每秒 10 次。

图片

在 REDIS 监控上,相关的监控面板也统一按照 PGSQL 与 NODE 的风格进行适配与调整:

图片

更丝滑的构建流程

Pigsty v2.2 提供了官方 Yum 源,在 v2.3 中则默认启用了全站 HTTPS。所有

当您选择直接从互联网下载 Pigsty 所需的软件时,可能会遭遇到功夫网的烦恼。例如,默认的 Grafana / Prometheus Yum 源下载速度极慢。除此之外,还有一些零散的 RPM 包需要通过 Web URL 的方式,而不是 repotrack RPM 的方式进行下载。

在 Pigsty v2.2 中,解决了这个问题。Pigsty 提供了一个官方的 yum 源:http://get.pigsty.cc ,并配置为默认的上游源之一。所有零散的 RPM,需要翻墙的 RPM 都放置其中,可以有效加快在线安装/构建速度。

此外, Pigsty 还在 v2.2 中提供了对信创操作系统,统信 UOS 1050e uel20 的支持,满足一些特殊客户的特殊需求。Pigsty 针对这些系统重新编译了 PG相关的 RPM 包,为有需求的客户提供支持。

安装

Pigsty v2.3 的安装命令为:

bash -c “$(curl -fsSL https://get.pigsty.cc/latest)"

一行命令,即可在全新机器上完整安装 Pigsty. 如果您想要尝鲜 beta 版本,将 latest 换为 beta 即可。对于没有互联网访问的特殊环境,您也可以使用以下链接下载 Pigsty,以及打包了所有软件的离线安装包:

图片

https://get.pigsty.cc/v2.3.0/pigsty-v2.3.0.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el7.x86_64.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el8.x86_64.tgz https://get.pigsty.cc/v2.3.0/pigsty-pkg-v2.3.0.el9.x86_64.tgz

以上,就是 Pigsty v2.3 带来的变化。

更多细节,请参考 Pigsty 官方文档:https://vonng.github.io/pigsty/ 与 Github Release Note: https://github.com/Vonng/pigsty/releases/tag/v2.3.0


v2.3.0

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

发布注记:https://github.com/Vonng/pigsty/releases/tag/v2.3.0

使用 bash -c "$(curl -fsSL https://get.pigsty.cc/latest)" 快速开始。

亮点特性

  • INFRA: 添加了对 NODE/PGSQL VIP 的监控支持
  • PGSQL: 通过小版本升级修复了 PostgreSQL CVE-2023-39417: 15.4, 14.9, 13.12, 12.16,以及 Patroni v3.1.0
  • NODE: 允许用户使用 keepalived 为一个节点集群绑定 L2 VIP
  • REPO: Pigsty 专用 yum 源优化精简,全站默认使用 HTTPS: get.pigsty.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

v2.2:监控全面翻新

监控面板 & 沙箱置备重做,构建流程优化,UOS兼容性

Pigsty v2.2 发布了 🎉,欢迎大家尝鲜! 地表最强 PostgreSQL 监控系统迎来史诗级重大升级,基于 Grafana v10 彻底重制,将 PG 可观测性拔高到一个全新阶段,带来了全新的用户体验。Demo: http://demo.pigsty.cc

此外 Pigsty v2.2 还提供了一个 42 节点的生产仿真环境沙箱模板,支持了 Citus 12,PG 16beta2,提供了使用KVM虚拟机的vagrant模板,为零散/墙外RPM包提供了专用的 Pigsty Yum 源,并支持了国产信创操作系统统信UOS20。

欢迎大家试用尝鲜,提出反馈意见。加 PG x Pigsty 微信讨论群请搜 pigsty-cc 小助手。

另外:8月9号晚7点开源中国出品的直播 《 PostgreSQL vs MySQL》以及8月16号的DTCC 2023,我将代表 PG 一方出战与 MySQL 对喷:谁才是数据库一哥,欢迎大家收看。


监控系统重制:视觉配色

Pigsty v2.2 中,对监控面板进行了彻底的重制,充分利用 Grafana v10 的新特性,为用户带来耳目一新的可视化体验。

最直观的变化是色彩。Pigsty v2.2 采用了全新的配色方案.以 PGSQL Overview 面板为例,新配色方案降低了饱和度,整体视觉体验比旧版本更加协调美观。

图片

Pigsty v2.0 使用Grafana默认的高饱和配色

图片

Pigsty v2.2:失效实例标黑,点击可直达故障现场

在 Pigsty v2.2 的监控面板中使用了 PG蓝,Nginx绿,Redis红,Python黄,Grafana橙等颜色作为基准,这套配色方案的灵感来自这篇文章:SCI,但《天气之子》~当SCI论文插图遇上新海诚天气之子配色 https://zhuanlan.zhihu.com/p/619556088

图片


监控系统重制:集群导航

当然除了配色,v2.2 也在内容编排和布局上重新进行了设计。例如,使用 Stats 色块统计替代了大量表格式导航,让有问题的服务能够在首屏即可一目了然。点击异常色块即可直达故障现场。

当然,老式的导航表格可以提供更丰富的信息,也并没有移除,而是移动到了专门的 Instances / Members 分栏中去。让我们以最常用的 PGSQL Cluster 面板为例:

图片

首屏是基于色块的图元导航,展现了集群组件存活状态与服务可用性,核心指标,负载水平与告警事件图。且提供了到集群内部资源 —— 实例,连接池,负载均衡器,服务,数据库的快速导航

图片

PGSQL Cluster 的表格式导航

具体的集群资源表,则是在第二栏中,以备查阅详情。配合后面的 指标栏与日志栏,完整的呈现了一个 PostgreSQL 数据库集群的核心状态。

图片


监控系统重制:实例

PGSQL Instance 展现了一个实例的详细状态,在 v2.2 中也进行了重制。最基本的设计原则就是:不是蓝/绿色的状态才需要关注。这样通过颜色视觉编码,用户可以在事故分析时快速定位一个数据库实例的故障根因。

图片

其他的实例,主机节点,ETCD,MinIO,Redis,也都使用了类似的设计,例如 Node Instance 的首屏就是这样的。

图片

Node Instance 的指标部分基本保持不变,但首屏概览部分进行了重制。MinIO Overview 亦然。

图片

Etcd Overview 则使用 State Timeline 来可视化 DCS 服务的可用性状态。例如下图展现了一个模拟 etcd 故障的现场:在一个5节点的 ETCD 集群中依次关闭各个实例,集群可以容忍两个节点故障,但3个节点故障将导致 ETCD 服务整体不可用(黄色的条转为暗蓝色,代表 ETCD 服务整体不可用)。

图片

当 DCS 出现故障时,依赖 ETCD 进行高可用的 PostgreSQL 集群默认会启用 FailSafeMode:在确认所有集群成员可达,不是自身而是DCS故障的前提下,可以避免出现主库降级的故障。而这一点,也会在 PG 的监控中体现出来

图片


监控系统重制:服务

另一个进行重新设计的部分是 Service 与 Proxy 。Service 面板现在添加了关于服务的重要信息:SLI ,通过条状的 Statetimeline,用户可以直观的看出服务中断情况,获取服务可用性指标,并理解负载均衡器与后端真实数据库服务器的状态。

图片

本例中,对 pg-test 集群的四个 HAProxy,分别进行了 排干,设置维护状态操作,然后关闭后端数据库服务器。只有当一个集群的全部实例都下线后, pg-test-replica 这个只读服务才会进入不可用状态。

图片

这是 pg-test 集群 1 号 HAProxy 负载均衡器的监控面板,每一个由其承载的服务都会列于其中,展示后端服务器状态并计算 SLI。HAProxy 本身的状态与监控放置在 Node Haproxy 监控面板中。

图片

在全局总览中,可以看到 Pigsty 中所有数据库服务的整体状态时间线与 SLI 指标。


监控系统重制:数据库统计

在 Pigsty 中,除了会对数据库服务器进行监控外,也会对数据库服务器所承载的逻辑对象 —— 数据库,表,查询,索引等逻辑。

PGSQL Databases 展示了集群层面的数据库统计指标。例如,在 pg-test 集群中有4个数据库实例,与一个数据库 test ,而这里就展示出了这4个实例数据库指标的水平对比。

图片

用户可以进一步下钻到单个数据库实例内部的统计,也就是 PGSQL Database 面板。这个面板提供了一些关于数据库与连接池的关键指标,但最重要的是,PGSQL Database 面板提供了对数据库内最活跃醒目的查询的索引 —— 这是两类最为重要的库内对象。

图片

用户可以进一步下钻到单个数据库实例内部的统计,也就是 PGSQL Database 面板。这个面板提供了一些关于数据库与连接池的关键指标,但最重要的是,PGSQL Database 面板提供了对数据库内最活跃醒目的查询的索引 —— 这是两类最为重要的库内对象。

图片

图片


监控系统重制:系统目录

在 Pigsty 中,除了使用 pg exporter 采集到的指标数据之外,还会使用另外一类可选的重要补充数据 —— 系统目录。这也是 PGCAT 系列 Dashboard 所做的事情。PGCAT Instance 将直接访问数据库系统目录(使用最多8条监控只读连接),获取并呈现所需的信息。

例如,您可以获取数据库当前正在运行的活动,按照各种指标对数据库中的慢查询,无用索引,全表扫描进行定位与分析。查阅数据库的角色,会话,复制情况,配置修改状态,内存使用详情,备份与持久化的具体细节。

图片

图片

如果说 PGCAT Instance 关注的是数据库服务器本身,那么 PGCAT Database 就更关注单个数据库内部的对象细节:例如 Schema,Table,Index,膨胀,Top SQL, Top Table,等等。

图片

每一个 Schema,Table ,Index 都可以点击下钻,进入更详细的专用面板中。例如 PGCAT Schema,就进一步展现了一个架构模式内的对象细节。

图片

数据库内的查询,也按照执行计划进行聚合,便于用户找到问题 SQL,快速定位慢查询问题。

图片


监控系统重制:表与查询

在 Pigsty 中,您可以查阅一张表的方方面面。PGCAT Table 面板可以让您查看表的元数据,上面的索引,每一列的统计信息,以及相关的查询。

图片

当然,您也可以使用 PGSQL Table 面板,从指标的维度,查阅一张表在任意历史时间段上的关键指标。点击表名即可轻松在两个视角进行切换。

图片

相应地,您也可以获取(具有相同执行计划)的同一类 SQL 的详细信息。

图片

图片

在 Pigsty 中,还有许多关于特定主题的 Dashboard。限于篇幅,关于监控系统的介绍就是这些。最直观的体验方式,就是访问 Pigsty 提供的公开 Demo:http://demo.pigsty.cc ,亲自上手把玩一番。虽然这只是一个4台1C虚拟机的简陋环境,但用来展示Pigsty最基本的监控系统能力已经是足够了。


大号仿真环境

Pigsty 提供了一个基于 Vagrant 与 Virtualbox 的沙箱环境,可以跑在你的笔记本电脑/Mac上,有一个 1 节点的最小版本,和一个4节点的完整版本,用与演示与学习,而现在 v2.2 中又多了一个 42 节点的生产仿真版本沙箱。

生产沙箱的所有细节都由 prod.yml 这个五百行不到的配置文件描述,它可以轻松跑在一台普通的服务器物理机上,而拉起它过程与4节点并无二致:make prod install 即可完工。

图片

Pigsty v2.2 提供了基于 libvirt 的 Vagrantfile 模板,您只需要调整上面配置中的机器清单,即可一键创建出所需的虚拟机来。所有东西都可以轻松跑在一台 Dell R730 48C 256G 物理机上,二手价不到三千元。当然,您依然可以使用 Pigsty Terraform 模板一键在云厂商上拉起虚拟机。

安装完成后环境如下所示,包含两节点的监控基础设施,一主一备。5节点的专用 etcd 集群,3 节点的样例 MinIO 集群提供对象存储服务存放 PG 备份,还有一个两节点的专用 HAProxy 集群,可以统一为数据库服务提供负载均衡。

图片

在此之上,还有3套Redis数据库集群与10套规格各异的 PostgreSQL 数据库集群与,其中还包括一套开箱即用的 5 分片的 Citus 12 分布式 PostgreSQL 集群。

![图片](data:image/svg+xml,%3C%3Fxml version=‘1.0’ encoding=‘UTF-8’%3F%3E%3Csvg width=‘1px’ height=‘1px’ viewBox=‘0 0 1 1’ version=‘1.1’ xmlns=‘http://www.w3.org/2000/svg' xmlns:xlink=‘http://www.w3.org/1999/xlink'%3E%3Ctitle%3E%3C/title%3E%3Cg stroke=‘none’ stroke-width=‘1’ fill=‘none’ fill-rule=‘evenodd’ fill-opacity=‘0’%3E%3Cg transform=‘translate(-249.000000, -126.000000)’ fill=’%23FFFFFF’%3E%3Crect x=‘249’ y=‘126’ width=‘1’ height=‘1’%3E%3C/rect%3E%3C/g%3E%3C/g%3E%3C/svg%3E)

这个配置是中大型企业运行管理大规模数据库集群的参考样例,而您可以在单台物理服务器上用半个小时完整一键拉起。


更丝滑的构建流程

当您选择直接从互联网下载 Pigsty 所需的软件时,可能会遭遇到功夫网的烦恼。例如,默认的 Grafana / Prometheus Yum 源下载速度极慢。除此之外,还有一些零散的 RPM 包需要通过 Web URL 的方式,而不是 repotrack RPM 的方式进行下载。

在 Pigsty v2.2 中,解决了这个问题。Pigsty 提供了一个官方的 yum 源:http://get.pigsty.cc ,并配置为默认的上游源之一。所有零散的 RPM,需要翻墙的 RPM 都放置其中,可以有效加快在线安装/构建速度。

此外, Pigsty 还在 v2.2 中提供了对信创操作系统,统信 UOS 1050e uel20 的支持,满足一些特殊客户的特殊需求。Pigsty 针对这些系统重新编译了 PG相关的 RPM 包,为有需求的客户提供支持。


安装

从 v2.2 开始,Pigsty 的安装命令变为:

bash -c “$(curl -fsSL http://get.pigsty.cc/latest)"

一行命令,即可在全新机器上完整安装 Pigsty. 如果您想要尝鲜 beta 版本,将 latest 换为 beta 即可。对于没有互联网访问的特殊环境,您也可以使用以下链接下载 Pigsty,以及打包了所有软件的离线安装包:

http://get.pigsty.cc/v2.2.0/pigsty-v2.2.0.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el7.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el8.x86_64.tgz
http://get.pigsty.cc/v2.2.0/pigsty-pkg-v2.2.0.el9.x86_64.tgz

以上,就是 Pigsty v2.2 带来的变化。

更多细节,请参考 Pigsty 官方文档:https://vonng.github.io/pigsty/ 与 Github Release Note: https://github.com/Vonng/pigsty/releases/tag/v2.2.0


v2.2.0

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

发布注记:https://github.com/Vonng/pigsty/releases/tag/v2.2.0

快速开始: bash -c "$(curl -fsSL https://get.pigsty.cc/latest)"

亮点特性

  • 监控面板重做: https://demo.pigsty.cc
  • Vagrant沙箱重做: 支持 libvirt 与新的配置模板
  • Pigsty EL Yum 仓库: 统一收纳零碎 RPM,简化安装构建流程。
  • 操作系统兼容性: 新增信创操作系统 UOS-v20-1050e 支持
  • 新的配置模板:42 节点的生产仿真配置
  • 统一使用官方 PGDG citus 软件包(el7)

软件升级

  • PostgreSQL 16 beta2
  • Citus 12 / PostGIS 3.3.3 / TimescaleDB 2.11.1 / PGVector 0.44
  • patroni 3.0.4 / pgbackrest 2.47 / pgbouncer 1.20
  • grafana 10.0.3 / loki/promtail/logcli 2.8.3
  • etcd 3.5.9 / haproxy v2.8.1 / redis v7.0.12
  • minio 20230711212934 / mcli 20230711233044

Bug修复

  • 修复了 Docker 组权限的问题 [29434bd]https://github.com/Vonng/pigsty/commit/29434bdd39548d95d80a236de9099874ed564f9b
  • infra 操作系统用户组作为额外的组,而不是首要用户组。
  • 修复了 Redis Sentinel Systemd 服务的自动启用状态 5c96feb
  • 放宽了 bootstrap & configure 的检查,特别是当 /etc/redhat-release 不存在的时候。
  • 升级到 Grafana 10,修复了 Grafana 9.x CVE-2023-1410
  • 在 CMDB pglog 模式中添加了 PG 14 - 16 的 command tags 与 错误代码。

API变化

新增1个变量

  • INFRA.NGINX.nginx_exporter_enabled: 现在用户可以通过设置这个参数来禁用 nginx_exporter 。

默认值变化:

  • repo_modules: node,pgsql,infra : redis 现在由 pigsty-el 仓库提供,不再需要 redis 模块。
  • repo_upstream:
    • 新增 pigsty-el: 与具体EL版本无关的RPM: 例如 grafana, minio, pg_exporter, 等等……
    • 新增 pigsty-misc: 与具体EL版本有关的RPM: 例如 redis, prometheus 全家桶,等等……
    • 移除 citus: 现在 PGDG 中有完整的 EL7 - EL9 citus 12 支持
    • 移除 remi: redis 现在由 pigsty-el 仓库提供,不再需要 redis 模块。
  • repo_packages:
    • ansible python3 python3-pip python3-requests python3.11-jmespath dnf-utils modulemd-tools # el7: python36-requests python36-idna yum-utils
    • grafana loki logcli promtail prometheus2 alertmanager karma pushgateway node_exporter blackbox_exporter nginx_exporter redis_exporter
    • redis etcd minio mcli haproxy vip-manager pg_exporter nginx createrepo_c sshpass chrony dnsmasq docker-ce docker-compose-plugin flamegraph
    • lz4 unzip bzip2 zlib yum pv jq git ncdu make patch bash lsof wget uuid tuned perf nvme-cli numactl grubby sysstat iotop htop rsync tcpdump
    • netcat socat ftp lrzsz net-tools ipvsadm bind-utils telnet audit ca-certificates openssl openssh-clients readline vim-minimal
    • postgresql13* wal2json_13* pg_repack_13* passwordcheck_cracklib_13* postgresql12* wal2json_12* pg_repack_12* passwordcheck_cracklib_12* postgresql16* timescaledb-tools
    • postgresql15 postgresql15* citus_15* pglogical_15* wal2json_15* pg_repack_15* pgvector_15* timescaledb-2-postgresql-15* postgis33_15* passwordcheck_cracklib_15* pg_cron_15*
    • postgresql14 postgresql14* citus_14* pglogical_14* wal2json_14* pg_repack_14* pgvector_14* timescaledb-2-postgresql-14* postgis33_14* passwordcheck_cracklib_14* pg_cron_14*
    • patroni patroni-etcd pgbouncer pgbadger pgbackrest pgloader pg_activity pg_partman_15 pg_permissions_15 pgaudit17_15 pgexportdoc_15 pgimportdoc_15 pg_statement_rollback_15*
    • orafce_15* mysqlcompat_15 mongo_fdw_15* tds_fdw_15* mysql_fdw_15 hdfs_fdw_15 sqlite_fdw_15 pgbouncer_fdw_15 multicorn2_15* powa_15* pg_stat_kcache_15* pg_stat_monitor_15* pg_qualstats_15 pg_track_settings_15 pg_wait_sampling_15 system_stats_15
    • plprofiler_15* plproxy_15 plsh_15* pldebugger_15 plpgsql_check_15* pgtt_15 pgq_15* pgsql_tweaks_15 count_distinct_15 hypopg_15 timestamp9_15* semver_15* prefix_15* rum_15 geoip_15 periods_15 ip4r_15 tdigest_15 hll_15 pgmp_15 extra_window_functions_15 topn_15
    • pg_background_15 e-maj_15 pg_catcheck_15 pg_prioritize_15 pgcopydb_15 pg_filedump_15 pgcryptokey_15 logerrors_15 pg_top_15 pg_comparator_15 pg_ivm_15* pgsodium_15* pgfincore_15* ddlx_15 credcheck_15 safeupdate_15 pg_squeeze_15* pg_fkpart_15 pg_jobmon_15
  • repo_url_packages:
  • node_default_packages:
    • lz4,unzip,bzip2,zlib,yum,pv,jq,git,ncdu,make,patch,bash,lsof,wget,uuid,tuned,nvme-cli,numactl,grubby,sysstat,iotop,htop,rsync,tcpdump
    • netcat,socat,ftp,lrzsz,net-tools,ipvsadm,bind-utils,telnet,audit,ca-certificates,openssl,readline,vim-minimal,node_exporter,etcd,haproxy,python3,python3-pip
  • infra_packages
    • grafana,loki,logcli,promtail,prometheus2,alertmanager,karma,pushgateway
    • node_exporter,blackbox_exporter,nginx_exporter,redis_exporter,pg_exporter
    • nginx,dnsmasq,ansible,postgresql15,redis,mcli,python3-requests
  • PGSERVICE in .pigsty 被移除了,取而代之的是 PGDATABASE=postgres,这用户只需 IP 地址就可以从管理节点访问特定实例。

目录结构变化:

  • bin/dns 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

v2.1:向量+PG全系支持!

Pigsty v2.1 提供了对 PostgreSQL 12 ~ 16 的支持

随着 PostgreSQL 夏季小版本例行更新,与 16 Beta 的发布,Pigsty 也紧随PG社区发布了 v2.1 版本,这次更新支持了 16 Beta1 的高可用与新监控指标,也提供了 PG 12 - 15 版本的支持。同时,AI 向量扩展插件 PGVector 也于 2.0.2 正式进入 Pigsty 中并默认启用。

https://github.com/Vonng/pigsty/releases/tag/v2.1.0

向量数据库扩展 PGVector

最近向量数据库非常火爆,市面上有许多专用向量数据库产品,商业的有 Pinecone,Zilliz,开源的有 Milvus,Qdrant 等。在所有现有向量数据库中,pgvector 是一个独特的存在 —— 它选择了在现有的世界上最强大的开源关系型数据库 PostgreSQL 上以插件的形式添砖加瓦,而不是另起炉灶做成另一个专用的“数据库”。毕竟从零开始做好一个TP数据库还是非常难的。

pgvector 有着优雅简单易用的接口,不俗的性能表现,更是继承了PG生态的超能力集合。在以前,PGVECTOR 需要自行下载编译安装,所以我提了一个 Issue 把它加入到 PostgreSQL 全球开发组的官方仓库中。你只需要正常使用 PGDG 源即可直接 yum install pgvector_15 完成安装。在安装了 pgvector 的数据库实例中使用 CREATE EXTENSION vector 即可启用此扩展。

但是使用 Pigsty,你甚至都不需要这个过程。在3月底发布的 Pigsty v2.0.2 中,就已经默认集成并安装了 PGVector 扩展。你只需要 CREATE EXTENSION vector 即可开箱即用。PGVector 的使用方式,应用场景案例,工作原理,请参考本号前一篇文章:《AI大模型与向量数据库 PGVECTOR》。

同时透露一下,我们正在制作一个功能、性能、易用性更好的 PGVector 实现,将于后续版本纳入 Pigsty 中,敬请期待。

图片

PG16支持与可观测性

Pigsty 也许是最快提供 PostgreSQL 16 支持的发行版 —— 尽管目前仍然处于 Beta 状态,一些功能扩展仍然没有跟进,但你已经可以拉起 PostgreSQL 16 的高可用集群体验测试起来。PostgreSQL 16 有一些比较实用的新功能:从库逻辑解码与逻辑复制,针对I/O的新统计视图,全连接的并行执行,更好的冻结性能,符合 SQL/JSON 标准的新函数集,以及在HBA认证中使用正则表达式。

Pigsty 特别关注 PostgreSQL 16 中的可观测性改进,新的 pg_stat_io 视图,让用户可以直接从数据库内访问到重要的 I/O 统计指标,对于性能优化,故障分析具有非常重要的意义。在以前,用户只能在数据库/BGWriter上看到有限的统计指标,想要更精细的统计数据,只能关联操作系统层面的I/O指标进行分析。现在,你可以从后端进程类型/关系类型/操作类型三个维度,对读/写/追加/回刷/Fsync/命中/逐出等行为进行深入的洞察。

图片

另外一个非常有价值的可观测性改进点是,pg_stat_all_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 的特性进行了微调与适配,一些不和谐的样式问题也得到了修正。

图片

在 Pigsty 2.1 中引入了4个来自 volkovlabs 的 Grafana 扩展插件。使用 Grafana + Echarts 进行数据可视化与分析一直是 Pigsty 所倡导和支持的一个功能亮点,奈何作者精力有限,难以在这个方向投入资源。

在 v2.1 发布前,我很高兴看到一个由专人维护的 Apache Echarts 面板插件 —— 终于可以松一口气,让自己维护的 echarts panel 退休了。有一个专业的创业团队选择这个方向进行拓展,并开发出一系列实用的扩展插件。可以使用后端数据渲染 SVG 与文本的动态文本插件,提供表单提交功能的 Form 插件,动态数据日历插件,等等等等。

图片

此外,Pigsty 还专门添加了 echarts-gl 的扩展资源,放置于 Grafana public/chart 目录下,允许用户使用 Pigsty 自带的 Grafana,无需互联网访问即可实现出 Apache Echarts 官方文档库中炫酷的三维地球等面板。

其他便利工具的改进

在 Pigsty 2.1 中,添加了 3 个便利命令,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 都会被添加到远程机器上(例如椭圆曲线算法生成的密钥文件)

v2.0:开源RDS PG替代

Pigsty v2.0 在安全性,兼容性,功能整合上进行了大量工作,真正成为 RDS 的本地开源替代品。

2023/02/28Pigsty v2.0.0 正式发布,带来了一系列重大的功能更新。

现在 PIGSTY 是 “PostgreSQL In Great STYle"的首字母缩写,即”全盛状态的 PostgreSQL"。而 Pigsty 的定位也不再是 “开箱即用的PostgreSQL数据库发行版”,变成了 “Me Better 开源 RDS PG 替代”。

明人不说暗话,这是一个很有野心的目标:推翻云数据库垄断,砸烂****RDS的饭碗!详见:《云数据库是不是智商税?

图片

2.0 新特性

Pigsty 是一个更好的、****本地优先的,开源 RDS for PostgreSQL 替代。

图片

强力的发行版

彻底释放世界上最先进的关系型数据库的力量!

PostgreSQL 是一个足够完美的数据库内核,但它需要更多工具与系统的配合,才能成为一个足够好的数据库服务(RDS),而 Pigsty 帮助 PostgreSQL 完成这一步飞跃。

Pigsty 深度整合了 PostgreSQL 生态的三大核心扩展插件 PostGISTimescaleDBCitus,并确保它们可以协同工作,提供分布式的时序地理空间数据库能力。Pigsty 还提供了运行企业级 RDS 服务的所需软件,打包所有依赖为离线软件包,所有组件均可在无需互联网访问的情况下一键完成安装部署,进入生产可用状态。

在 Pigsty 中功能组件被抽象 模块,可以自由组合以应对多变的需求场景。INFRA 模块带有完整的现代监控技术栈,而 NODE 模块则将节点调谐至指定状态并纳入监控。在多个节点上安装 PGSQL 模块会自动组建出一个基于主从复制的高可用数据库集群,而同样的 ETCD 模块则为数据库高可用提供共识与元数据存储。可选的 MINIO模块可以用作图像视频等大文件存储并可选用为数据库备份仓库。与 PG 有着极佳相性的 REDIS 亦为 Pigsty 所支持,更多的模块(如GPSQL, MYSQL, KAFKA)将会在后续加入,你也可以开发自己的模块并自行扩展 Pigsty 的能力。

图片

惊艳的观测能力

使用现代开源可观测性技术栈,提供无与伦比的监控最佳实践!

Pigsty 提供了基于开源的 Grafana / Prometheus 可观测性技术栈做监控的最佳实践:Prometheus 用于收集监控指标,Grafana 负责可视化呈现,Loki 用于日志收集与查询,Alertmanager 用于告警通知。PushGateway 用于批处理任务监控,Blackbox Exporter 负责检查服务可用性。整套系统同样被设计为一键拉起,开箱即用的 INFRA 模块。

Pigsty 所管理的任何组件都会被自动纳入监控之中,包括主机节点,负载均衡 HAProxy,数据库 Postgres,连接池 Pgbouncer,元数据库 ETCD,KV缓存 Redis,对象存储 MinIO,……,以及整套监控基础设施本身。大量的 Grafana 监控面板与预置告警规则会让你的系统观测能力有质的提升,当然,这套系统也可以被复用于您的应用监控基础设施,或者监控已有的数据库实例或 RDS。

无论是故障分析还是慢查询优化、无论是水位评估还是资源规划,Pigsty 为您提供全面的数据支撑,真正做到数据驱动。在 Pigsty 中,超过三千类监控指标被用于描述整个系统的方方面面,并被进一步加工、聚合、处理、分析、提炼并以符合直觉的可视化模式呈现在您的面前。从全局大盘总揽,到某个数据库实例中单个对象(表,索引,函数)的增删改查详情都能一览无余。您可以随意上卷下钻横向跳转,浏览系统现状与历史趋势,并预测未来的演变。详见公开演示:http://demo.pigsty.cc

图片

久经考验的可靠性

开箱即用的高可用与时间点恢复能力,确保你的数据库坚如磐石!

对于软件缺陷或人为误操作造成的删表删库,Pigsty 提供了开箱即用的 PITR 时间点恢复能力,无需额外配置即默认启用。只要存储空间管够,基于 pgBackRest 的基础备份与 WAL 归档让您拥有快速回到过去任意时间点的能力。您可以使用本地目录/磁盘,亦或专用的 MinIO 集群或 S3 对象存储服务保留更长的回溯期限,丰俭由人。

更重要的是,Pigsty 让高可用与故障自愈成为 PostgreSQL 集群的标配,基于 patroni, etcd, 与 haproxy 打造的故障自愈架构,让您在面对硬件故障时游刃有余:主库故障自动切换的 RTO < 30s,一致性优先模式下确保数据零损失 RPO = 0。只要集群中有任意实例存活,集群就可以对外提供完整的服务,而客户端只要连接至集群中的任意节点,即可获得完整的服务。

Pigsty 内置了 HAProxy 负载均衡器用于自动流量切换,提供 DNS/VIP/LVS 等多种接入方式供客户端选用。故障切换与主动切换对业务侧除零星闪断外几乎无感知,应用不需要修改连接串重启。极小的维护窗口需求带来了极大的灵活便利:您完全可以在无需应用配合的情况下滚动维护升级整个集群。硬件故障可以等到第二天再抽空善后处置的特性,让研发,运维与 DBA 都能安心睡个好觉。许多大型组织与核心机构已经在生产环境中长时间使用 Pigsty ,最大的部署有 25K CPU 核心与 200+ PostgreSQL 实例,在这一部署案例中, Pigsty 在三年内经历了数十次硬件故障与各类事故,但依然可以保持 99.999% 以上的整体可用性。

图片

简单易用可维护

Infra as Code, 数据库即代码,声明式的API将数据库管理的复杂度来封装。

Pigsty 使用声明式的接口对外提供服务,将系统的可控制性拔高到一个全新水平:用户通过配置清单告诉 Pigsty “我想要什么样的数据库集群”,而不用去操心到底需要怎样去做。从效果上讲,这类似于 K8S 中的 CRD 与 Operator,但 Pigsty 可用于任何节点上的数据库与基础设施:不论是容器,虚拟机,还是物理机。

无论是创建/销毁集群,添加/移除从库,还是新增数据库/用户/服务/扩展/黑白名单规则,您只需要修改配置清单并运行 Pigsty 提供的幂等剧本,而 Pigsty 负责将系统调整到您期望的状态。用户无需操心配置的细节,Pigsty将自动根据机器的硬件配置进行调优,您只需要关心诸如集群叫什么名字,有几个实例放在哪几台机器上,使用什么配置模版:事务/分析/核心/微型,这些基础信息,研发也可以自助服务。但如果您愿意跳入兔子洞中,Pigsty 也提供了丰富且精细的控制参数,满足最龟毛 DBA 的苛刻定制需求。

除此之外,Pigsty 本身的安装部署也是一键傻瓜式的,所有依赖被预先打包,在安装时可以无需互联网访问。而安装所需的机器资源,也可以通过 Vagrant 或 Terraform 模板自动获取,让您在十几分钟内就可以从零在本地笔记本或云端虚拟机上拉起一套完整的 Pigsty 部署。本地沙箱环境可以跑在1核2G的微型虚拟机中,提供与生产环境完全一致的功能模拟,可以用于开发、测试、演示与学习。

图片

扎实的安全性

加密备份一应俱全,只要硬件与密钥安全,您无需操心数据库的安全性。

每套 Pigsty 部署都会创建一套自签名的 CA 用于证书签发,所有的网络通信都可以使用 SSL 加密。数据库密码使用合规的 scram-sha-256 算法加密存储,远端备份会使用 AES-256 算法加密。此外还针对 PGSQL 提供了一套开箱即用的的访问控制体系,足以应对绝大多数应用场景下的安全需求。

Pigsty 针对 PostgreSQL 提供了一套开箱即用,简单易用,精炼灵活的,便于扩展的访问控制体系,包括职能分离的四类默认角色:读(DQL) / 写(DML) / 管理(DDL) / 离线(ETL) ,与四个默认用户:dbsu / replicator / monitor / admin。所有数据库模板都针对这些角色与用户配置有合理的默认权限,而任何新建的数据库对象也会自动遵循这套权限体系,而客户端的访问则受到一套基于最小权限原则的设计的 HBA 规则组限制,任何敏感操作都会记入日志审计。

任何网络通信都可以使用 SSL 加密,需要保护的敏感管理页面与API端点都受到多重保护:使用用户名与密码进行认证,限制从管理节点/基础设施节点IP地址/网段访问,要求使用 HTTPS 加密网络流量。Patroni API 与 Pgbouncer 因为性能因素默认不启用 SSL ,但亦提供安全开关便于您在需要时开启。合理配置的系统通过等保三级毫无问题,只要您遵循安全性最佳实践,内网部署并合理配置安全组与防火墙,数据库安全性将不再是您的痛点。

图片

广泛的应用场景

使用预置的Docker模板,一键拉起使用PostgreSQL的海量软件!

在各类数据密集型应用中,数据库往往是最为棘手的部分。例如 Gitlab 企业版与社区版的核心区别就是底层 PostgreSQL 数据库的监控与高可用,如果您已经有了足够好的本地 PG RDS,又为什么要为软件自带的土法手造数据库掏钱?

Pigsty 提供了 Docker 模块与大量开箱即用的 Compose 模板。您可以使用 Pigsty 管理的高可用 PostgreSQL (以及 Redis 与 MinIO )作为后端存储,以无状态的模式一键拉起这些软件:Gitlab、Gitea、Wiki.js、Odoo、Jira、Confluence、Habour、Mastodon、Discourse、KeyCloak 等等。如果您的应用需要一个靠谱的 PostgreSQL 数据库, Pigsty 也许是最简单的获取方案。

Pigsty 也提供了与 PostgreSQL 紧密联系的应用开发工具集:PGAdmin4、PGWeb、ByteBase、PostgREST、Kong、以及 EdgeDB、FerretDB、Supabase 这些使用 PostgreSQL 作为存储的"上层数据库"。更奇妙的是,您完全可以基于 Pigsty 内置了的 Grafana 与 Postgres ,以低代码的方式快速搭建起一个交互式的数据应用来,甚至还可以使用 Pigsty 内置的 ECharts 面板创造更有表现力的交互可视化作品。

图片

开源免费的自由软件

Pigsty是基于 AGPLv3 开源的自由软件,由热爱 PostgreSQL 的社区成员用热情浇灌

Pigsty 是完全开源免费的自由软件,它允许您在缺乏数据库专家的情况下,用几乎接近纯硬件的成本来运行企业级的 PostgreSQL 数据库服务。作为对比,公有云厂商提供的 RDS 会收取底层硬件资源几倍到十几倍不等的溢价作为 “服务费”。

( 参考阅读:为什么说云数据库是杀猪盘

很多用户选择上云,正是因为自己搞不定数据库;很多用户使用 RDS,是因为别无他选。我们将打破云厂商的垄断,为用户提供一个云中立的,更好的 RDS 开源替代:Pigsty 紧跟 PostgreSQL 上游主干,不会有供应商锁定,不会有恼人的 “授权费”,不会有节点数量限制,不会收集您的任何数据。您的所有的核心资产 —— 数据,都能"自主可控",掌握在自己手中。

Pigsty 本身旨在用数据库自动驾驶软件,替代大量无趣的人肉数据库运维工作,但再好的软件也没法解决所有的问题。总会有一些的冷门低频疑难杂症需要专家介入处理。这也是为什么我们也提供专业的订阅服务,来为有需要的企业级用户使用 PostgreSQL 提供兜底。几万块的订阅咨询费不到顶尖 DBA 每年工资的几十分之一,让您彻底免除后顾之忧,把成本真正花在刀刃上。当然对于社区用户,我们亦用爱发电,提供免费的支持与日常答疑。

图片

2.0 快速上手

Pigsty 2.0 的安装依然是一条命令搞定所有:

curl -fsSL http://download.pigsty.cc/get) | bash

图片

如果互联网访问受限,您可以提前从 Github 或 CDN 下载对应操作系统的离线软件包进行离线安装。监控系统部分提供公开的 Demo:http://demo.pigsty.cc

图片


v2.0.0

相关文章:

Pigsty v2.0.0 正式发布!

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

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

# or download tarball directly with curl (EL9)
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-v2.0.0.tgz -o ~/pigsty.tgz
curl -L https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el9.x86_64.tgz  -o /tmp/pkg.tgz
# EL7: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el7.x86_64.tgz
# EL8: https://github.com/Vonng/pigsty/releases/download/v2.0.0/pigsty-pkg-v2.0.0.el8.x86_64.tgz

亮点

  • 完美整合 PostgreSQL 15, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10,分布式地理时序超融合数据库。
  • OS兼容性大幅增强:支持 EL7,8,9,以及 RHEL, CentOS, Rocky, OracleLinux, AlmaLinux等兼容发行版。
  • 安全性改进:自签名CA,全局网络流量SSL加密,密码scram-sha-256认证,备份采用AES加密,重制的HBA规则系统。
  • Patroni升级至3.0,提供原生的高可用 Citus 分布式集群支持,默认启用FailSafe模式,无惧DCS故障致全局主库瘫痪。
  • 提供基于 pgBackRest 的开箱即用的时间点恢复 PITR 支持,默认支持本地文件系统与专用MinIO/S3集群备份。
  • 新模块 ETCD,可独立部署,简易扩缩容,自带监控高可用,彻底取代 Consul 作为高可用 PG 的 DCS。
  • 新模块 MINIO,可独立部署,支持多盘多节点部署,用作S3本地替代,亦用于集中式 PostgreSQL 备份仓库。
  • 大幅精简配置文件参数,无需默认值即可使用;模板自动根据机器规格调整主机与PG参数,HBA/服务的定义更简洁泛用。
  • 受 Grafana 与 MinIO 影响,软件协议由 Apache License 2.0 变更为 AGPL 3.0

兼容性

  • 支持 EL7, EL8, EL9 三个大版本,并提供三个版本对应的离线软件包,默认开发测试环境由EL7升级至EL9。
  • 支持更多EL兼容Linux发行版:RHEL, CentOS, RockyLinux, AlmaLinux, OracleLinux等…
  • 源码包与离线软件包的命名规则发生改变,现在版本号,操作系统版本号,架构都会体现在包名中。
  • PGSQL: PostgreSQL 15.2, PostGIS 3.3, Citus 11.2, TimescaleDB 2.10 现可同时使用,协同工作。
  • PGSQL: Patroni 升级至 3.0 版本,作为 PGSQL 的高可用组件。
    • 默认使用 ETCD 作为 DCS,取代 Consul,减少一个 Consul Agent 失效点。
    • 因为 vip-manager 升级至 2.1 并使用 ETCDv3 API,彻底弃用 ETCDv2 API,Patroni同理
    • 提供原生的高可用 Citus 分布式集群支持。使用完全开源所有功能的 Citus 11.2。
    • 默认启用FailSafe模式,无惧DCS故障致全局主库瘫痪。
  • PGSQL: 引入 pgBackrest v2.44 提供开箱即用的 PostgreSQL 时间点恢复 PITR 功能
    • 默认使用主库上的备份目录创建备份仓库,滚动保留两天的恢复窗口。
    • 默认备选备份仓库为专用 MinIO/S3 集群,滚动保留两周的恢复窗口,本地使用需要启用 MinIO 模块。
  • ETCD 现在作为一个独立部署的模块,带有完整的扩容/缩容方案与监控。
  • MINIO 现在成为一个独立部署的模块,支持多盘多节点部署,用作S3本地替代,亦可用作集中式备份仓库。
  • NODE 模块现在包含 haproxy, docker, node_exporter, promtail 功能组件
    • chronyd 现在取代 ntpd 成为所有节点默认的 NTP 服务。
    • HAPROXY 现从属于 NODE 的一部分,而不再是 PGSQL 专属,可以 NodePort 的方式对外暴露服务。
    • 现在 PGSQL 模块可以使用专用的集中式 HAPROXY 集群统一对外提供服务。
  • INFRA 模块现在包含 dnsmasq, nginx, prometheus, grafana, loki 等组件
    • Infra 模块中的 DNSMASQ 服务器默认启用,并添加为所有节点的默认 DNS 服务器之一。
    • 添加了 blackbox_exporter 用于主机 PING 探测,pushgateway 用于批处理任务指标。
    • 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

v1.5.0 发布注记

v1.5添加了Docker支持,ETCD作为DCS的能力,基础设施自我监控与CMDB改进

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 升级至 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

v1.4.0 发布注记

Pigsty v1.4 添加了时序数据仓库 YMatrixDB 支持

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数据源变量,因此您只需选择一个新的数据源而不是修改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 准备节点(节点设置、dcsnode_exporterpromtail
      |          然后选择一个 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

v1.4.1

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

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

现在提供英文文档。

Bug 修复

v1.3.0 发布注记

Pigsty v1.3.0 更新了 PGCAT 重整 & PGSQL 增强 & Redis Beta支持

1.3.0

  • 【功能增强】Redis 部署(集群、哨兵、主从)
  • 【功能增强】Redis 监控
    • Redis 总览仪表盘
    • Redis 集群仪表盘
    • Redis 实例仪表盘 -【功能增强】 监控:PGCAT 大修
    • 新仪表盘:PGCAT 实例
    • 新仪表盘:PGCAT 数据库仪表盘
    • 重做仪表盘:PGCAT 表格
  • 【功能增强】 监控:PGSQL 增强
    • 新面板:PGSQL 集群,添加 10 个关键指标面板(默认切换)
    • 新面板:PGSQL 实例,添加 10 个关键指标面板(默认切换)
    • 简化 & 重新设计:PGSQL 服务
    • 在 PGCAT & PGSL 仪表盘之间添加交叉引用 -【功能增强】 监控部署
    • 现在 grafana 数据源在仅监控部署期间自动注册 -【功能增强】 软件升级
    • 将 PostgreSQL 13 添加到默认包列表
    • 默认升级到 PostgreSQL 14.1
    • 添加 greenplum rpm 和依赖项
    • 添加 redis rpm & 源代码包
    • 将 perf 添加为默认包

v1.3.1

监控

  • PGSQL & PGCAT 仪表盘改进
  • 优化 pgcat 实例 & pgcat 数据库的布局
  • 在 pgsql 实例仪表盘中添加关键指标面板,与 pgsql 集群保持一致
  • 在 pgcat 数据库中添加表/索引膨胀面板,移除 pgcat 膨胀仪表盘
  • 在 pgcat 数据库仪表盘中添加索引信息
  • 修复在 grafana 8.3 中的损坏面板
  • 在 nginx 主页中添加 redis 索引

部署

  • 新的 infra-demo.yml 剧本用于一次性引导
  • 使用 infra-jupyter.yml 剧本部署可选的 jupyter lab 服务器
  • 使用 infra-pgweb.yml 剧本部署可选的 pgweb 服务器
  • 在 meta 节点上新的 pg 别名,可以从 admin 用户启动 postgres 集群(除了 postgres)
  • 根据 timescaledb-tune 的建议调整所有 patroni 配置模板中的 max_locks_per_transactions
  • 在配置模板中添加 citus.node_conninfo: 'sslmode=prefer' 以便在没有 SSL 的情况下使用 citus
  • 在 pgdg14 包列表中添加所有扩展(除了 pgrouting)
  • 将 node_exporter 升级到 v1.3.1
  • 将 PostgREST v9.0.0 添加到包列表。从 postgres 模式生成 API。

错误修复

  • Grafana 的安全漏洞(升级到 v8.3.1 问题)
  • 修复 pg_instance & pg_serviceregister 角色中从剧本的中间开始时的问题
  • 修复在没有 pg_cluster 变量存在的主机上 nginx 主页渲染问题
  • 在升级到 grafana 8.3.1 时修复样式问题

v1.2.0 发布注记

Redis Support, PGCAT Overhaul

v1.2.0

  • 【功能增强】默认使用 PostgreSQL 14 版本
  • 【功能增强】默认使用 TimescaleDB 2.5 扩展
    • 现在 timescaledb 和 postgis 默认在 cmdb 中启用
  • 【功能增强】 新增仅监控模式:
    • 仅通过可连接的 URL,您可以使用 pigsty 监控现有的 pg 实例
    • pg_exporter 将在本地的 meta 节点上部署
    • 新仪表板 PGSQL Cluster Monly 用于远程集群
  • 【功能增强】软件升级
    • grafana 升级到 8.2.2
    • pev2 升级到 v0.11.9
    • promscale 升级到 0.6.2
    • pgweb 升级到 0.11.9
    • 新增扩展:pglogical、pg_stat_monitor、orafce -【功能增强】自动检测机器规格并使用适当的 node_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 将使这一过程变得容易得多。它将创建一系列的脚本,帮助您近乎零停机时间地迁移您的集群。

v1.1.0 发布注记

Pigsty v1.1.0 更新了主页设计, JupyterLab, PGWEB, Pev2 & pgbadger 支持

v1.1.0

  • 【增强功能】 增加 pg_dummy_filesize 以创建文件系统空间占位符
  • 【增强功能】 主页大改版
  • 【增强功能】 增加 Jupyter Lab 整合
  • 【增强功能】 增加 pgweb 控制台整合
  • 【增强功能】 增加 pgbadger 支持
  • 【增强功能】 增加 pev2 支持,解释可视化工具
  • 【增强功能】 增加 pglog 工具
  • 【增强功能】 更新默认的 pkg.tgz 软件版本:
    • PostgreSQL 升级至 v13.4(支持官方的 pg14)
    • pgbouncer 升级至 v1.16(指标定义更新)
    • Grafana 升级至 v8.1.4
    • Prometheus 升级至 v2.2.29
    • node_exporter 升级至 v1.2.2
    • haproxy 升级至 v2.1.1
    • consul 升级至 v1.10.2
    • vip-manager 升级至 v1.0.1

API 变更

  • nginx_upstream 现在持有不同的结构。(不兼容)
  • 新的配置条目:app_list,渲染至主页的导航条目
  • 新的配置条目:docs_enabled,在默认服务器上设置本地文档
  • 新的配置条目:pev2_enabled,设置本地的 pev2 工具
  • 新的配置条目:pgbadger_enabled,创建日志概要/报告目录
  • 新的配置条目:jupyter_enabled,在元节点上启用 Jupyter Lab 服务器
  • 新的配置条目:jupyter_username,指定运行 Jupyter Lab 的用户
  • 新的配置条目:jupyter_password,指定 Jupyter Lab 的默认密码
  • 新的配置条目:pgweb_enabled,在元节点上启用 pgweb 服务器
  • 新的配置条目:pgweb_username,指定运行 pgweb 的用户
  • 将内部标记 repo_exist 重命名为 repo_exists
  • 现在 repo_address 的默认值为 pigsty 而非 yum.pigsty
  • 现在 haproxy 的访问点为 http://pigsty 而非 http://h.pigsty

v1.1.1

  • 【功能增强】 用 timescale 版本替换 timescaledb 的 apache 版本
  • 【功能增强】 升级 prometheus 到 2.30
  • 【BUG修复】 现在 pg_exporter 配置目录的属主是 {{ pg_dbsu }},而不再是 prometheus

如何从v1.1.0升级?

这个版本的主要变动是 TimescaleDB,使用 TimescaleDB License (TSL)的官方版本替代了 PGDG 仓库中的 Apache License v2 的版本。

stop/pause postgres instance with timescaledb
yum remove -y timescaledb_13

[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/$basearch
repo_gpgcheck=0
gpgcheck=0
enabled=1

yum install timescaledb-2-postgresql13 

v1.0.0 发布注记

v1.0.0 Release

v1.0.0

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 的用户列表和数据库列表将会被生成

v1.0.1

2021-09-14

  • 文档更新
    • 现已支持中文文档
    • 现已支持机器翻译的英文文档
  • 错误修复:pgsql-remove 不会移除主实例
  • 错误修复:用 pg_cluster + pg_seq 替换 pg_instance
    • Start-At-Task 可能因为 pg_instance 未定义而失败
  • 错误修复:从默认共享预加载库中移除 citus
    • citus 会强制 max_prepared_transaction 的值为非零
  • 错误修复:在 configure 中进行 ssh sudo 检查:
    • 现在使用 ssh -t sudo -n ls 进行权限检查
  • 笔误修复:pg-backup 脚本的笔误
  • 警报调整:移除 NTP 合理性检查警报(与 ClockSkew 重复)
  • 导出器调整:移除 collector.systemd 以减少开销

v0.9.0 发布注记

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

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

v0.8.0 发布注记

Pigsty v0.8 重做了服务供给部分,提供了集成外部负载均衡器的扩展接口。

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

v0.7.0 发布注记

Pigsty v0.7 新增了仅监控部署模式,改进了数据库与用户的供给接口。

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文件。

v0.6.0 发布注记

Pigsty v0.6 对数据库供给方案进行了大量改进

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 覆盖

v0.5.0 发布注记

Pigsty v0.5.0 对数据库内部的定制模板进行了大幅改进。

v0.5.0

大纲

  • Pigsty官方文档站正式上线!
  • 添加了数据库模板的定制支持,用户可以通过配置文件定制所需的数据库内部对象。
  • 对默认访问控制模型进行了改进
  • 重构了HBA管理的逻辑,现在将由Pigsty替代Patroni直接负责生成HBA
  • 将Grafana监控系统的供给方案从sqlite改为JSON文件静态Provision
  • pg-cluster-replication面板加入Pigsty开源免费套餐。
  • 最新的经过测试的离线安装包:pkg.tgz (v0.5)

定制数据库

您是否烦恼过单实例多租户的问题?比如总有研发拿着PostgreSQL当MySQL使,明明是一个Schema就能解决的问题,非要创建一个新的数据库出来,在一个实例中创建出几十个不同的DB。 不要忧伤,不要心急。Pigsty已经提供数据库内部对象的Provision方案,您可以轻松地在配置文件中指定所需的数据库内对象,包括:

  • 角色
    • 用户/角色名
    • 密码
    • 用户属性
    • 用户备注
    • 用户所属的权限组
  • 数据库
    • 属主
    • 额外的模式
    • 额外的扩展插件
    • 数据库级的自定义配置参数
  • 数据库
    • 属主
    • 额外的模式
    • 额外的扩展插件
    • 数据库级的自定义配置参数
  • 默认权限
    • 默认情况下这里配置的权限会应用至所有由 超级用户 和 管理员用户创建的对象上。
  • 默认扩展
    • 所有新创建的业务数据库都会安装有这些默认扩展
  • 默认模式
    • 所有新创建的业务数据库都会创建有这些默认的模式

配置样例

# 通常是每个DB集群配置的变量
pg_users:
  - username: test
    password: test
    comment: default test user
    groups: [ dbrole_readwrite ]    # dborole_admin|dbrole_readwrite|dbrole_readonly
pg_databases:                       # create a business database 'test'
  - name: test
    extensions: [{name: postgis}]   # create extra extension postgis
    parameters:                     # overwrite database meta's default search_path
      search_path: public,monitor

# 通常是整个环境统一配置的全局变量
# - system roles - #
pg_replication_username: replicator           # system replication user
pg_replication_password: DBUser.Replicator    # system replication password
pg_monitor_username: dbuser_monitor           # system monitor user
pg_monitor_password: DBUser.Monitor           # system monitor password
pg_admin_username: dbuser_admin               # system admin user
pg_admin_password: DBUser.Admin               # system admin password

# - default roles - #
pg_default_roles:
  - username: dbrole_readonly                 # sample user:
    options: NOLOGIN                          # role can not login
    comment: role for readonly access         # comment string

  - username: dbrole_readwrite                # sample user: one object for each user
    options: NOLOGIN
    comment: role for read-write access
    groups: [ dbrole_readonly ]               # read-write includes read-only access

  - username: dbrole_admin                    # sample user: one object for each user
    options: NOLOGIN BYPASSRLS                # admin can bypass row level security
    comment: role for object creation
    groups: [dbrole_readwrite,pg_monitor,pg_signal_backend]

  # NOTE: replicator, monitor, admin password are overwritten by separated config entry
  - username: postgres                        # reset dbsu password to NULL (if dbsu is not postgres)
    options: SUPERUSER LOGIN
    comment: system superuser

  - username: replicator
    options: REPLICATION LOGIN
    groups: [pg_monitor, dbrole_readonly]
    comment: system replicator

  - username: dbuser_monitor
    options: LOGIN CONNECTION LIMIT 10
    comment: system monitor user
    groups: [pg_monitor, dbrole_readonly]

  - username: dbuser_admin
    options: LOGIN BYPASSRLS
    comment: system admin user
    groups: [dbrole_admin]

  - username: dbuser_stats
    password: DBUser.Stats
    options: LOGIN
    comment: business read-only user for statistics
    groups: [dbrole_readonly]


# object created by dbsu and admin will have their privileges properly set
pg_default_privilegs:
  - GRANT USAGE                         ON SCHEMAS   TO dbrole_readonly
  - GRANT SELECT                        ON TABLES    TO dbrole_readonly
  - GRANT SELECT                        ON SEQUENCES TO dbrole_readonly
  - GRANT EXECUTE                       ON FUNCTIONS TO dbrole_readonly
  - GRANT INSERT, UPDATE, DELETE        ON TABLES    TO dbrole_readwrite
  - GRANT USAGE,  UPDATE                ON SEQUENCES TO dbrole_readwrite
  - GRANT TRUNCATE, REFERENCES, TRIGGER ON TABLES    TO dbrole_admin
  - GRANT CREATE                        ON SCHEMAS   TO dbrole_admin
  - GRANT USAGE                         ON TYPES     TO dbrole_admin

# schemas
pg_default_schemas: [monitor]

# extension
pg_default_extensions:
  - { name: 'pg_stat_statements',  schema: 'monitor' }
  - { name: 'pgstattuple',         schema: 'monitor' }
  - { name: 'pg_qualstats',        schema: 'monitor' }
  - { name: 'pg_buffercache',      schema: 'monitor' }
  - { name: 'pageinspect',         schema: 'monitor' }
  - { name: 'pg_prewarm',          schema: 'monitor' }
  - { name: 'pg_visibility',       schema: 'monitor' }
  - { name: 'pg_freespacemap',     schema: 'monitor' }
  - { name: 'pg_repack',           schema: 'monitor' }
  - name: postgres_fdw
  - name: file_fdw
  - name: btree_gist
  - name: btree_gin
  - name: pg_trgm
  - name: intagg
  - name: intarray

# postgres host-based authentication rules
pg_hba_rules:
  - title: allow meta node password access
    role: common
    rules:
      - host    all     all                         10.10.10.10/32      md5

  - title: allow intranet admin password access
    role: common
    rules:
      - host    all     +dbrole_admin               10.0.0.0/8          md5
      - host    all     +dbrole_admin               172.16.0.0/12       md5
      - host    all     +dbrole_admin               192.168.0.0/16      md5

  - title: allow intranet password access
    role: common
    rules:
      - host    all             all                 10.0.0.0/8          md5
      - host    all             all                 172.16.0.0/12       md5
      - host    all             all                 192.168.0.0/16      md5

  - title: allow local read-write access (local production user via pgbouncer)
    role: common
    rules:
      - local   all     +dbrole_readwrite                               md5
      - host    all     +dbrole_readwrite           127.0.0.1/32        md5

  - title: allow read-only user (stats, personal) password directly access
    role: replica
    rules:
      - local   all     +dbrole_readonly                               md5
      - host    all     +dbrole_readonly           127.0.0.1/32        md5
pg_hba_rules_extra: []

# pgbouncer host-based authentication rules
pgbouncer_hba_rules:
  - title: local password access
    role: common
    rules:
      - local  all          all                                     md5
      - host   all          all                     127.0.0.1/32    md5

  - title: intranet password access
    role: common
    rules:
      - host   all          all                     10.0.0.0/8      md5
      - host   all          all                     172.16.0.0/12   md5
      - host   all          all                     192.168.0.0/16  md5
pgbouncer_hba_rules_extra: []

数据库模板

权限模型

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

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

供给方式

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

v0.4.0 发布注记

Pigsty 第二个公开测试版v0.4现已正式发行

v0.4.0

第二个公开测试版v0.4现已正式发行

Pigsty v0.4对监控系统进行了整体升级改造,精心挑选了10个面板作为标准的Pigsty开源内容。同时,针对Grafana 7.3的不兼容升级进行了大量适配改造工作。使用升级的pg_exporter v0.3.1作为默认指标导出器,调整了监控报警规则的监控面板连接。

Pigsty开源版

Pigsty开源版选定了以下10个Dashboard作为开源内容。其他Dashboard作为可选的商业支持内容提供。

  • PG Overview
  • PG Cluster
  • PG Service
  • PG Instance
  • PG Database
  • PG Query
  • PG Table
  • PG Table Catalog
  • PG Table Detail
  • Node

尽管进行了少量阉割,这10个监控面板所涵盖的内容仍然可以吊打所有同类软件。

软件升级

Pigsty v0.4进行了大量软件适配工作,包括:

  • Upgrade to PostgreSQL 13.1, Patroni 2.0.1-4, add citus to repo.
  • Upgrade to pg_exporter 0.3.1
  • Upgrade to Grafana 7.3, Ton’s of compatibility work
  • Upgrade to prometheus 2.23, with new UI as default
  • Upgrade to consul 1.9

其他改进

  • Update prometheus alert rules
  • Fix alertmanager info links
  • Fix bugs and typos.
  • add a simple backup script

离线安装包

  • v0.4的离线安装包(CentOS 7.8)已经可以从Github下载:pkg.tgz

v0.3.0 发布注记

Pigsty v0.3.0 第一个公开的试用版本现已释出!

v0.3.0

首个Pigsty公开测试版本现在已经释出!

监控系统

Pigsty v0.3 包含以下8个监控面板作为开源内容:

  • PG Overview
  • PG Cluster
  • PG Service
  • PG Instance
  • PG Database
  • PG Table Overview
  • PG Table Catalog
  • Node

离线安装包

  • v0.3 离线安装包(CentOS 7.8)已经可以从Github下载:pkg.tgz