这是本节的多页打印视图。 .
部署
与 快速上手 不同,企业生产环境 Pigsty 部署需要更多 架构规划 与 准备工作。
本章将帮助您理解 Pigsty 的完整部署流程,并提供生产环境部署的最佳实践建议。
我们建议您在真实的生产环境部署之前,使用 Pigsty 提供的 沙箱环境 进行测试与演练,确保对部署流程有充分的了解。 您可以使用 Vagrant 在本地快速创建一个四节点的 Pigsty 沙箱环境用于测试,或者利用 Terraform 在云端置备一个更大规模的仿真环境。
对于生产环境部署,您通常需要准备至少三个 节点 以实现高可用。您需要进一步了解 Pigsty 的 相关概念 以及常见操作的管理 SOP。 包括如何通过 参数配置 进行定制,如何执行 Ansible 剧本 进行部署。以及如何加固部署的 安全性 以满足企业合规要求。
1 - 生产部署
本文是 Pigsty 生产环境多节点部署指南,部署单机版本 Demo/Dev 环境可以参考 快速上手 文档。
摘要
准备 几台 具有 SSH 权限 的 节点,
安装 兼容的 Linux 系统,使用具有免密 ssh 和 sudo 权限的 管理用户 执行:
该命令会执行 安装 脚本,下载并提取 Pigsty 源码至家目录并安装依赖,接下来依次完成 配置 与 部署 即可完成交付。
在执行 deploy.yml 进行部署前,您可能需要进一步审视与编辑 配置清单:pigsty.yml 文件,确认部署细节。
安装完成后,您可以通过 IP / 域名 + 80/443 端口访问 Web 用户界面,
并通过 5432 端口访问 PostgreSQL 服务。
完整流程根据服务器规格/网络条件需 3~10 分钟,离线安装 时能够显著加速;无需监控时可使用 精简安装 进一步加速。
视频样例:20 节点生产仿真环境(Ubuntu 24.04 x86_64)
准备
在生产环境中部署安装 Pigsty 涉及一些 准备工作,以下为完整检查清单,供您参考。
| 项目 | 要求 | 项目 | 要求 |
|---|---|---|---|
| 节点 | 至少 1C2G,上不封顶 |
规格 | 多个同质节点,2 / 3 / 4 / 或更多 |
| 磁盘 | /data 作为默认主挂载点 |
FS | 推荐使用 xfs,按需使用 ext4 / zfs |
| VIP | L2 VIP,可选 (云环境不可用) | 网络 | 静态 IPv4 地址,单节点无固定 IP 可使用 127.0.0.1 |
| CA | 可以使用自签名 CA 或指定已有证书 | 域名 | 本地 / 公网域名,可选,默认 i.pigsty 自签名域名 |
| 内核 | Linux x86_64 / aarch64 |
Linux | el8, el9, el10, d12, d13, u22, u24, u26 |
| Locale | C.UTF-8 或 C |
防火墙 | 端口:80 / 443 / 22 / 5432 (可选) |
| 用户 | 避免使用 root 和 postgres |
Sudo | sudo 权限,最好带有 nopass 免密选项 |
| SSH | 通过公钥 nopass SSH 登陆纳管节点 |
可达性 | ssh <ip|alias> sudo ls 无错误 |
安装
您可以使用以下命令自动安装 Pigsty 源码包 至 ~/pigsty 目录(推荐),部署所需依赖(Ansible)会自动安装。
如果您不希望执行远程脚本,可以手动 下载 或克隆源码。使用 git 克隆安装时,请务必检出特定版本后再使用。
手工下载克隆安装时,请额外执行 bootstrap 脚本以手动安装 Ansible 等部署依赖,您也可以 自行安装。
配置
在 Pigsty 中,部署的蓝图细节由 配置清单 所定义,也就是 pigsty.yml 配置文件,您可以通过声明式配置进行定制。
Pigsty 提供了 configure 脚本作为可选的 配置向导,
它将根据您的环境和输入,生成具有良好默认值的 配置清单:
配置过程生成的配置文件默认位于:~/pigsty/pigsty.yml,您可以在安装前进行检查,按需修改与定制。
有许多 配置模板 供您参考与使用,但您也完全可以跳过配置向导,直接编辑 pigsty.yml 配置文件进行定制。
配置向导只会为您替换 当前节点 的 IP(如果您不想要替换,使用 -s 参数),所以对于一个多节点的部署,您需要自己替换其他节点的 IP 地址。
同时,你还需要按需对配置文件进行进一步的定制,例如修改默认密码、添加更多节点等。
配置脚本常用参数:
| 参数 | 说明 |
|---|---|
-c|--conf |
用于指定使用的 配置模板,相对于 conf/ 目录,不带 .yml 后缀的配置名称 |
-v|--version |
指定 PostgreSQL 大版本 14~19;PG19 当前为 Beta |
-r|--region |
用于指定上游软件源的区域,加速下载: (default|china|europe) |
-n|--non-interactive |
直接使用命令行参数提供首要 IP 地址,跳过交互式向导 |
-x|--proxy |
使用当前环境变量配置 proxy_env 变量 |
如果您的机器网卡绑定了多个 IP 地址,那么需要使用 -i|--ip <ipaddr> 显式指定一个当前节点的首要 IP 地址,或在交互式问询中提供。
该脚本将把 IP 占位符 10.10.10.10 替换为当前节点的主 IPv4 地址。选用的地址应为静态 IP 地址,请勿使用公网 IP 地址。
配置过程生成的配置文件默认位于:~/pigsty/pigsty.yml,您可以在安装前进行检查与修改定制。
安装前应修改配置文件中的默认密码与凭据,详见 安全建议。
部署
Pigsty 的 deploy.yml 剧本 会将 配置 中生成的蓝图应用至 所有的目标节点。
当您看到输出尾部如果带有 pgsql init done,PLAY RECAP 等字样,说明安装已经完成!
警告: 在已经完成部署的环境中再次完整运行 deploy.yml 可能会重启相关服务并覆盖配置,请务必注意!
界面
假设您使用 四节点 部署模版,那么 Pigsty 部署完成后,您的环境应该具有类似下面的部署结构:
| ID | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|
| 1 | 10.10.10.10 |
pg-meta-1 |
infra-1 |
etcd-1 |
| 2 | 10.10.10.11 |
pg-test-1 |
- | - |
| 3 | 10.10.10.12 |
pg-test-2 |
- | - |
| 4 | 10.10.10.13 |
pg-test-3 |
- | - |
INFRA 模块通过浏览器提供了一个 图形化管理界面,您可以直接通过这台节点上的 Nginx 的 80/443 端口访问。
PGSQL 模块提供了一个 PostgreSQL 数据库服务器,监听 5432 端口,也可通过 Pgbouncer / HAProxy 代理访问。
对于生产环境的多节点高可用 PostgreSQL 集群来说,您需要通过 服务接入 来使用数据库服务,实现流量自动路由。
更多
安装完成后,您可以探索 用户界面,并通过 5432 端口访问 PostgreSQL 服务。
您还可以使用 Pigsty 部署和监控 更多集群:向 配置清单 添加定义并运行:
2 - 资源准备
Pigsty 运行在节点(物理机或虚拟机)之上,本文档介绍硬件相关的规划与准备。
节点
Pigsty 目前运行在 Linux 内核和 x86_64 / aarch64 架构的节点上。
"节点" 指的是 SSH 可访问 且提供裸 Linux 操作系统环境的资源。
它可以是物理机、虚拟机或配备 systemd、sudo 和 sshd 的类似操作系统的容器。
部署 Pigsty 至少需要 1 个节点,您可以准备更多,并在 执行部署剧本 中一次性部署所有节点,或稍后添加并单独部署。
最小节点规格要求是 1C1G,建议至少使用 1C2G。越高越好,没有上限。系统参数将根据可用资源自动调优。
所需节点的数量,取决于您的需求,更多详情请参考 架构规划。 尽管带有 外部备份 的 单机部署 也提供一定程度上的兜底, 但我们建议在生产部署中使用复数个节点,起作用的 高可用配置 至少需要 3 个节点才能工作,2 个节点则提供 半高可用。
磁盘
Pigsty 将使用 /data 作为默认数据目录,如果您有专用的主数据磁盘,建议将其挂载到那里,并为额外的磁盘驱动器使用 /data1、/data2、/dataN。
如果你想使用其他的数据目录,可以通过以下参数进行配置:
| 名称 | 描述 | 默认值 |
|---|---|---|
node_data |
节点主数据目录 | /data |
pg_fs_main |
PG 主数据目录 | /data/postgres |
pg_fs_backup |
PG 备份数据目录 | /data/backups |
etcd_data |
ETCD 数据目录 | /data/etcd |
infra_data |
Infra 数据目录 | /data/infra |
nginx_data |
Nginx 数据目录 | /data/nginx |
minio_data |
Silo 数据目录 | /data/minio |
redis_fs_main |
Redis 数据目录 | /data/redis |
kafka_data |
Kafka 数据目录 | /data/kafka |
原生 MySQL 8.4 试点模块当前不提供数据目录参数,固定使用 /var/lib/mysql。
文件系统
您可以使用任何支持的 Linux 文件系统来格式化数据磁盘,但对于生产环境部署,我们建议使用 xfs。
xfs 是 Linux 的标配之一,提供了最佳的性能与便利的 CoW 机制,允许你瞬间克隆大型数据库集群。使用 Silo 多盘部署时,必须使用 xfs 文件系统。
ext4 是另一个可用的选择,但缺乏 CoW 功能,但有着更为丰富的数据恢复工具生态。zfs 可以提供 RAID,快照功能,但性能折损较大且需要单独安装。
我们推荐您在这三种文件系统中按需权衡,择一使用。
如果有特殊需求,您也可以使用其他文件系统,但我们强烈不建议使用 NFS 网络文件系统来运行数据库服务。
Pigsty 的工作假设是 /data 目录属于 root:root,权限为 755。
管理员可以分配一级目录的所有权和权限。每个应用在其子目录中运行时将使用专用用户。
Pigsty 使用的目录结构说明,请参考 FHS 文档说明。
网络
Pigsty 默认使用在线安装模式,需要出站互联网访问。 使用 离线安装 模式则不再需要互联网访问。
在内网中,Pigsty 需要 静态网络 才能工作,您应该为每个节点明确分配一个 固定的 IPv4 地址。
IP 地址将用作节点的 唯一标识符,它应该是绑定到用于 内部 网络通信的主网络接口的主 IP 地址。
作为特例,单机部署 时如果没有固定 IP 地址,可以使用本地环回地址 127.0.0.1 作为变通。
使用公网 IP 地址作为节点标识符可能导致安全和连接问题,请务必使用内网 IP 地址作为标识。
VIP
Pigsty 支持 NODE 集群(keepalived)和 PGSQL 集群(vip-manager)的可选 L2 VIP。
要使用 L2 VIP 功能,您必须为节点集群/数据库集群明确分配指定一个 L2 VIP 地址。 在您自己的硬件上运行时这不是大问题,但在公有云环境中工作时可能成为问题。
要使用可选的节点 VIP 和 PG VIP 功能,请确保所有节点位于同一 L2 网络内。
CA
Pigsty 默认为每一套部署生成一套自签名的 CA 基础设施,用于签发环境中所有的加密证书。
如果您已经有了正规的企业 CA,或者已经有了自签名的 CA,您也可以选择使用已有的 CA 来签发 Pigsty 所需的证书。
域名
Pigsty 默认使用一个本地静态域名 i.pigsty 来访问 WebUI,这是可选的,你也可以直接使用 IP 地址访问。
对于生产环境部署来说,建议您使用域名来访问服务,只有使用域名,才能启用 HTTPS 支持,加密您的数据传输。 同时,域名访问允许您在同一个端口上运行多种不同的服务,并通过不同的域名进行区分。
如果您的部署提供 互联网访问,那么可以使用公共 DNS 供应商(如 Cloudflare、阿里云 DNS、AWS Route53 等)来管理您的域名解析。 将您的域名指向 Pigsty 节点的 公网 IP 地址 即可。 如果您的部署针对 局域网/办公网 开放,那么可以使用内部 DNS 服务器来管理域名解析。 将您的域名指向 Pigsty 节点的 办公网 IP 地址 即可。
如果您的访问仅限于本机,或特定的几台机器,那么可以使用本地静态解析来管理域名解析。
将以下记录添加到(用于访问 Pigsty WebUI 的机器) /etc/hosts 文件(本地静态解析)中,即可从浏览器中访问。
Linux
Pigsty 运行在 Linux 操作系统上,支持 8 个发行版大版本在双架构上的 16 个当前平台目标:兼容操作系统列表
我们推荐使用 Rocky Linux 9.8 / 10.2、Debian 12.15 / 13.6,或 Ubuntu 22.04.5 / 24.04.4 / 26.04.0 作为默认操作系统选项。
在 MacOS 和 Windows 上,您可以用各种虚拟机软件或者 Docker systemd 镜像来安装 Pigsty。
我们 强烈建议 使用全新安装的操作系统环境,如果您的服务器已经运行了 Nginx / PostgreSQL 等服务,请考虑使用新的节点进行部署。
多节点部署时,请确保所有节点使用相同的 Linux 发行版,架构与版本。异构节点部署虽然可能可以工作,但不受支持且可能导致不可预见的问题。
Locale
我们建议您将 en_US 设置为操作系统的主要语言,至少确保该 Locale 可用,从而确保 PG 日志打印英文。
一些发行版可能默认没有提供 en_US 区域设置,例如 Debian。使用以下命令启用 en_US 区域设置:
对于 PostgreSQL 来说,我们强烈建议您默认使用 PG 17+ 内置的 C.UTF-8 作为默认排序规则。
在 配置向导 中如果检测到 PG 版本满足或者操作系统支持,就默认配置 C.UTF-8 作为排序规则。
Ansible
Pigsty 使用 Ansible 从管理节点发起对所有被管理节点的控制, 安装 Ansible 会介绍更多细节。
Pigsty 默认会在 Infra 节点上安装 Ansible,所以 Infra 节点是可以作为管理节点(或备用管理节点)使用。 在 单机部署 的时候,您当前执行安装的节点,既是运行 ansible 管理命令的 管理节点,也是部署基础设施的 INFRA节点。
Pigsty
您可以使用以下方式 安装 最新稳定版本的 Pigsty 源代码:
要 安装 最新特定版本的 Pigsty,可以使用 -s <version> 参数:
要 安装 最新 Beta 版本的 Pigsty 源代码,可以使用 beta 脚本:
如果你是开发者,或者想要获取最新的开发版本,可以直接 git 克隆 Pigsty 代码仓库:
如果您的环境没有互联网访问,也可以直接从 GitHub Release 页面,或者 Pigsty 仓库下载源码包:
3 - 架构规划
Pigsty 采用 模块化架构,您可以像搭积木一样组合出自己想要的部署方案,并用简单的 声明式配置 表达您的意图。
常见方案
这里有一些常见的组合模式供您参考,您可以根据自己的需求进行进一步的定制与调整:
| 方案 | INFRA | ETCD | PGSQL | MINIO | 说明 |
|---|---|---|---|---|---|
单机部署(meta) |
1 | 1 | 1 | 单机部署 默认配置,经典方案 | |
单机部署(slim) |
1 | 1 | 不要监控设施,只要数据库 | ||
基础设施(infra) |
1 | 只要监控基础设施 | |||
单机部署(rich) |
1 | 1 | 1 | 1 | 单机 + 对象存储 + 本地仓库/扩展 |
| 多节点方案 | INFRA | ETCD | PGSQL | MINIO | 说明 |
|---|---|---|---|---|---|
双节点(dual) |
1 | 1 | 2 | 2节点半 HA,可容忍坏特定一个 | |
三节点(trio) |
3 | 3 | 3 | 标准3节点 HA,可容忍坏一个 | |
四节点(full) |
1 | 1 | 1+3 | 演示专用,1 INFRA/ETCD | |
生产部署(simu) |
2 | 3 | n | n | 2个 INFRA,3个 ETCD |
| 大规模生产(自定义) | 3 | 5 | n | n | 3个 INFRA,5个 ETCD |
使用什么样的架构规划方案,取决于您对数据库可靠性的要求,以及手头可用的资源。 通常来说,严肃的生产环境部署至少需要 3 个节点以实现 高可用配置。 如果您只有 2 个节点,则可以使用 半高可用配置。
我们提供 架构咨询服务(¥2,000)为您筹划合适的 Pigsty 配置方案。
利弊权衡
- 若要使用 Pigsty 的监控系统,则至少需要 1 个 INFRA 节点,生产部署通常使用 2 个,大规模部署 3 个。
- 若要启用 PG 高可用,则至少需要 1 个 ETCD 节点;生产部署通常使用 3 个,大规模环境中使用 5 个。偶数成员也能运行,但不会比少一个成员的奇数集群提高故障容忍数,因此应优先采用奇数规模。
- 若要启用 MINIO 模块的 Silo 对象存储,则至少需要 1 个 MINIO 节点,严肃使用时通常使用 4+ 节点部署 MNMD 集群。
- PG 生产集群通常至少为两节点主从配置;严肃场景通常使用 3 节点;高只读负载可以有更多从库(几十个)
- 此外对于 PostgreSQL 来说,您还可以按需使用 离线实例,同步实例,备份集群,延迟集群等等高级配置。
单节点配置
最简单的配置,所有内容都在单个节点上运行,默认安装四个基本模块,通常用于 Demo,Devbox,或测试环境。
如果为备份/PITR 配置了外部 S3 / MinIO 备份仓库 提供兜底的 RTO/RPO,此配置亦可用于普通标准的生产环境。
单节点配置有多种变体:
- 充血版(
rich):生产版本的单机部署模版,带有本地 Silo 对象存储,使用本地软件仓库,下载所有 PG 扩展。 - 瘦身版(
slim):只安装 PGSQL 和 ETCD,不安装监控设施 —— 精简安装 也可以扩充为 多节点高可用部署 - 监控版(
infra):与slim相反,只安装 INFRA 监控基础设施,不安装数据库服务,只用来监控其他实例。 - 内核替换:用衍生分支
pgsql、mssql、polar、ivory、mysql、pgtde、oriole、agens、pgedge替换原生 PG
双节点配置
双节点配置 将启用数据库复制和 半高可用 能力,提供更好的数据冗余,以及有限的故障转移支持:
双节点配置的高可用自动切换机制有限制,这种"半 HA"设置只能从特定节点故障中自动恢复:
- 如果
node-1故障,无自动故障转移:需要手动提升node-2 - 如果
node-2故障,自动故障转移有效:node-1自动提升
三节点配置
三节点模板 提供真正的基础高可用配置,可以容忍任意一个节点的故障,并从中自动恢复。
| ID | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|
| 1 | node-1 |
pg-meta-1 |
infra-1 |
etcd-1 |
| 2 | node-2 |
pg-meta-2 |
infra-2 |
etcd-2 |
| 3 | node-3 |
pg-meta-3 |
infra-3 |
etcd-3 |
四节点配置
| ID | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|
| 1 | node-1 |
pg-meta-1 |
infra-1 |
etcd-1 |
| 2 | node-2 |
pg-test-1 |
||
| 3 | node-3 |
pg-test-2 |
||
| 4 | node-4 |
pg-test-3 |
在这里我们出于演示目的,不配置 INFRA / ETCD 模块的高可用,您也可以对其进行进一步的调整
| ID | NODE | PGSQL | INFRA | ETCD | MINIO |
|---|---|---|---|---|---|
| 1 | node-1 |
pg-meta-1 |
infra-1 |
etcd-1 |
minio-1 |
| 2 | node-2 |
pg-test-1 |
infra-2 |
etcd-2 |
|
| 3 | node-3 |
pg-test-2 |
etcd-3 |
||
| 4 | node-4 |
pg-test-3 |
更多节点
如果您有着完善的虚拟化设施或充足的资源,完全可以 使用更多的节点,让每个模块都采用 独占式部署,从而获得最佳的可靠性,可观测性与性能表现。
| ID | NODE | INFRA | ETCD | MINIO | PGSQL |
|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
infra-1 |
pg-meta-1 |
||
| 2 | 10.10.10.11 |
infra-2 |
pg-meta-2 |
||
| 3 | 10.10.10.21 |
etcd-1 |
|||
| 4 | 10.10.10.22 |
etcd-2 |
|||
| 5 | 10.10.10.23 |
etcd-3 |
|||
| 6 | 10.10.10.31 |
minio-1 |
|||
| 7 | 10.10.10.32 |
minio-2 |
|||
| 8 | 10.10.10.33 |
minio-3 |
|||
| 9 | 10.10.10.34 |
minio-4 |
|||
| 10 | 10.10.10.40 |
pg-src-1 |
|||
| 11 | 10.10.10.41 |
pg-src-2 |
|||
| 12 | 10.10.10.42 |
pg-src-3 |
|||
| 13 | 10.10.10.50 |
pg-test-1 |
|||
| 14 | 10.10.10.51 |
pg-test-2 |
|||
| 15 | 10.10.10.52 |
pg-test-3 |
|||
| 16 | …… |
4 - 管理机制
Pigsty 需要一个在所有被管理节点上具有免密 SSH 和 Sudo 权限的操作系统 管理用户。
这个用户需要能够通过 ssh 访问到所有被管理节点,并且能够在这些节点上执行 sudo 命令。
要想将节点纳入 Pigsty 中管理,
用户
通常我们会选择 dba 或 admin 这样的用户名称,并避免使用 root 与 postgres:
- 使用
root进行部署是可行的,但不符合生产最佳实践。 - 使用
postgres(pg_dbsu)作为管理员用户是严格禁止的。
免密码
如果您可以接受为每个 ssh 和 sudo 命令输入密码,则免密码要求是可选的。
您可以在 执行剧本 时使用 -k|--ask-pass 来提示输入 SSH 密码,
以及 -K|--ask-become-pass 来提示输入 sudo 密码。
一些企业的安全策略可能不允许免密 ssh 或 sudo,在这种情况下,您可以使用上述选项。
或者考虑配置一个 sudo 密码缓存时间较长的 sudoers 规则,以减少密码提示的频率。
创建管理员用户
通常,您的服务器/虚拟机供应商会为您创建一个初始管理员用户。
如果你对这个用户不满意,Pigsty 的部署剧本可以为你创建一个 新的管理员用户。
假设您在节点上有 root 权限,或有一个现有的管理员用户,您可以使用 Pigsty 本身创建管理员用户:
它将利用现有的管理员创建新的管理员,创建由以下参数描述的专用 dba(uid=88)用户,并正确配置 sudo / ssh。
| 名称 | 描述 | 默认值 |
|---|---|---|
node_admin_enabled |
启用节点管理员用户 | true |
node_admin_uid |
节点管理员用户的 UID | 88 |
node_admin_username |
节点管理员用户名 | dba |
Sudo
所有 管理员用户 都应该在所有被管理节点上具有 sudo 权限【最好带有免密码执行权限】。
如果您想从头开始配置具有免密 sudo 权限的管理员用户,可以编辑/创建 suoder 文件(假设用户名为 vagrant):
假设您的管理员用户名选择是 dba,那么 /etc/sudoers.d/dba 内容应该是:
如果您的安全策略不允许免密码 sudo,请将 NOPASSWD: 部分删除:
Ansible 依赖 sudo 在被管理节点上以 root 权限执行命令。
在 sudo 不可用的环境中(比如 Docker 容器内)需要先安装 sudo 才能正确部署。
SSH
您的当前用户应该能够以相应的管理员用户身份免密 SSH 访问所有被管理节点。
您的当前用户可以是管理员用户本身,但不是必需的,只要您能以管理员用户身份 SSH。
SSH 配置是 Linux 101,但我们会在此处介绍基础知识,以防您不熟悉:
生成 SSH 密钥
如果您没有 SSH 密钥对,请生成一个:
如果您没有密钥对,Pigsty 会在 bootstrap 阶段为您完成此操作。
复制 SSH 密钥
您需要将生成的公钥分发到远程(和本地)服务器,并将其放入所有节点上管理员用户的 ~/.ssh/authorized_keys 文件中。
可以使用 ssh-copy-id 工具。
使用别名
当无法直接 SSH 访问时(由于跳板机、其他端口、凭据等),考虑在 ~/.ssh/config 中配置 SSH 别名:
并在清单中引用别名,使用 ansible_host 指定真实的 SSH 别名:
SSH 参数可以直接在 Ansible 中使用,详情请查看 Ansible Inventory Guide。 通过这种技术,您可以使用跳板机访问私有网络中的节点,或者使用不同的端口和凭据访问节点。 或者是利用本地笔记本作为管理节点。
验证可达性
您应该能够从管理节点通过当前用户免密 ssh 访问所有被管理节点。
远程用户(管理员用户)应该有权限运行免密 sudo 命令。
要验证免密 ssh sudo 是否工作,在管理节点上对所有被管理节点运行此命令:
如果没有密码提示或错误,免密 ssh/sudo 按预期工作。
防火墙
在生产环境部署时,通常需要设置防火墙,以阻止未经授权的端口访问。
默认情况下,你可以阻断办公网/互联网对节点的入站访问,只开放下列端口:
- 要通过 ssh 访问节点,您必须允许 SSH 端口
22入站访问。 - 要访问 WebUI 服务,您必须允许 HTTP(
80)/ HTTPS(443)入站访问。 - 要访问 PostgreSQL 数据库服务,您必须允许 PostgreSQL 的
5432入站访问。
如果您通过其他端口访问 PostgreSQL 服务,请相应地允许它们。 Pigsty 组件使用的端口列表,请参考:使用的端口。
5432:PostgreSQL 数据库6432:Pgbouncer 连接池5433:PG 主要服务5434:PG 副本服务5436:PG 默认服务5438:PG 离线服务
5 - 沙箱环境
Pigsty 提供了一个标准的四节点 沙箱环境,用于学习、测试与功能演示。
沙箱使用固定的 IP 地址和预定义的身份标识符,便于复现各种演示用例。
环境描述
默认的沙箱环境由 4 个节点组成,默认使用配置文件 ha/full.yml。
| ID | IP 地址 | 节点名 | PostgreSQL | INFRA | ETCD | MINIO |
|---|---|---|---|---|---|---|
| 1 | 10.10.10.10 |
meta |
pg-meta-1 |
infra-1 |
etcd-1 |
minio-1 |
| 2 | 10.10.10.11 |
node-1 |
pg-test-1 |
|||
| 3 | 10.10.10.12 |
node-2 |
pg-test-2 |
|||
| 4 | 10.10.10.13 |
node-3 |
pg-test-3 |
沙箱的配置可以概括表示为以下配置文件:

PostgreSQL 集群
沙箱带有一个位于 meta 节点上的单实例 PostgreSQL 集群 pg-meta:
沙箱中还有一个由三个实例组成的 PostgreSQL 高可用集群 pg-test,部署在另外三个节点上:
两个可选的 L2 VIP 分别绑定在 pg-meta 和 pg-test 集群的主实例上。
基础设施
在 meta 节点上还部署有:
- ETCD 集群:单节点
etcd集群,为 PostgreSQL HA 提供 DCS 服务 - Silo 集群:由 MINIO 模块管理的单节点
minio集群,提供 S3 兼容对象存储服务
ha/full.yml 还声明了三种 Redis 示例拓扑,并在 Infra 节点启用了 Docker 安装开关;标准 deploy.yml 不会部署这两个可选模块,需要按需另行执行 ./redis.yml 与 ./docker.yml。
创建沙箱
Pigsty 提供了开箱即用的模板,您可以使用 Vagrant 在本地创建沙箱,或使用 Terraform 在云上创建沙箱。
当然,您也可以自己手工准备并置备这些节点。
本地沙箱(Vagrant)
本地沙箱使用 VirtualBox/libvirt 创建本地虚拟机,可以在您的 Mac / PC 上免费运行。
运行完整的 4 节点沙箱,您的机器应至少拥有 4 核 CPU 与 8GB 内存。
当前 Vagrant 配置统一使用 Vagrant Cloud 上的 cloud-image/* Box。可用镜像、源码固定的版本以及架构说明以 Vagrant 文档 为准;未在源码中固定版本的 Box 会由 Vagrant 解析其当前可用版本。
云沙箱(Terraform)
云沙箱使用公有云 API 创建虚拟机,可以轻松创建和销毁,按需付费,非常适合快速测试。
使用 spec/aliyun-full.tf 模板在阿里云上创建 4 节点沙箱:
更多详情请参考 Terraform 文档。
其他规格
除了标准的 4 节点沙箱,Pigsty 还提供了其他规格的环境:
以下 Makefile 快捷目标均在 ~/pigsty/vagrant 目录中执行:
单节点开发箱(meta)
最简单的 1 节点环境,用于快速上手、开发和测试:
双节点环境(dual)
2 节点环境,用于测试主从复制:
三节点环境(trio)
3 节点环境,用于测试基本高可用:
生产仿真环境(simu)
20 节点的大型仿真环境,用于模拟生产环境进行完整测试:
该环境包含:
- 3 个基础设施节点(
meta1,meta2,meta3) - 2 个 HAProxy 代理节点
- 4 个 MINIO(Silo)节点
- 5 个 ETCD 节点
- 6 个 PostgreSQL 节点(2 个集群,每个 3 节点)
6 - Vagrant
Vagrant 是一个流行的本地虚拟化工具,可以按照声明式的方式创建本地虚拟机。
Pigsty 需要 Linux 环境运行,您可以使用 Vagrant 轻松在本地创建 Linux 虚拟机进行测试。
当前推荐并验证的基线为 Rocky Linux 9.8 / 10.2、Debian 12.15 / 13.6,以及 Ubuntu 22.04.5 / 24.04.4 / 26.04.0;Vagrant 的大版本别名会映射到对应的固定 Box 版本。
安装依赖
首先,确保您的系统中已经安装了 Vagrant 和虚拟机软件(VirtualBox, libvirt,Hyper-V,Parallel,……)。
在 MacOS 上,您可以使用 Homebrew 一键安装 vagrant 与 virtualbox; 在 Linux 上,您可以使用 VirtualBox 或 vagrant-libvirt 作为虚拟机管理软件; 在 Windows 专业版上,可以使用 VirtualBox 与 Hyper-V 作为提供商。
创建虚拟机
使用 Pigsty 提供的 make 快捷方式创建虚拟机:
您可以使用变体别名指定不同的操作系统镜像:
可用的操作系统后缀:8(EL8)、9(EL9)、10(EL10)、12(Debian 12.15)、13(Debian 13.6)、22(Ubuntu 22.04.5)、24(Ubuntu 24.04.4)、26(Ubuntu 26.04.0)
构建环境
您还可以使用以下别名创建 Pigsty 构建环境,这些模板不会替换基础镜像:
规格配置
Pigsty 在 vagrant/spec/ 目录下提供了多种预定义的虚拟机规格:
| 模板 | 节点数 | 规格 | 说明 | 别名 |
|---|---|---|---|---|
| meta.rb | 1 节点 | 2c4g x 1 | 单节点开发箱 | Devbox |
| dual.rb | 2 节点 | 1c2g x 2 | 双节点环境 | |
| trio.rb | 3 节点 | 1c2g x 3 | 三节点环境 | |
| full.rb | 4 节点 | 2c4g + 1c2g x 3 | 4 节点完整沙箱 | Sandbox |
| deci.rb | 10 节点 | 混合 | 10 节点环境 | |
| simu.rb | 20 节点 | 混合 | 20 节点生产仿真环境 | Simubox |
| minio.rb | 4 节点 | 1c2g x 4 + 磁盘 | MINIO(Silo)测试环境 | |
| citus.rb | 13 节点 | 混合 | Citus 协调节点与 6 组双副本 Worker | |
| oss.rb | 7 节点 | 2c2g x 7 | 7 平台 OSS 构建环境 | |
| pro.rb | 7 节点 | 2c2g x 7 | 7 平台 PRO 构建环境 | |
| rpm.rb | 2 节点 | 1c2g x 2 | 2 节点 EL 构建环境 | |
| deb.rb | 5 节点 | 1c2g x 5 | 5 节点 Deb 构建环境 | |
| all.rb | 7 节点 | 1c2g x 7 | 7 节点全量构建环境 |
每个规格文件包含一个描述虚拟机节点的 Specs 变量。例如,full.rb 包含 4 节点沙箱的定义:
当前 Vagrant 模板会为每台虚拟机显式置备 32 GB 主系统盘。普通节点另外创建一个数据盘,容量由规格中的 disk 指定、未指定时为 128 GB;
名称以 minio 开头的对象存储节点则创建四块 32 GB 数据盘并挂载到 /data1 至 /data4。
这些磁盘依赖 Vagrant 的实验性 disks 功能:使用仓库 Makefile 时已自动导出 VAGRANT_EXPERIMENTAL=disks,直接运行 vagrant 时需自行设置。
simu 规格详情
simu.rb 提供了一个 20 节点的生产环境仿真配置:
- 3 x infra 节点(
meta1-3):4c16g - 2 x haproxy 节点(
proxy1-2):1c2g - 4 x minio 节点(
minio1-4):1c2g - 5 x etcd 节点(
etcd1-5):1c2g - 6 x pgsql 节点(
pg-src-1-3,pg-dst-1-3):2c4g
配置脚本
使用 vagrant/config 脚本可以根据规格和选项生成最终的 Vagrantfile:
镜像别名
config 脚本支持多种镜像别名:
| 发行版 | 别名 | Vagrant Box |
|---|---|---|
| Rocky 8 | el8, rocky8, r8 |
cloud-image/rocky-8 |
| Rocky 9 | el9, rocky9, el, r9 |
cloud-image/rocky-9 |
| Rocky 10 | el10, rocky10, r10 |
cloud-image/rocky-10 |
| Debian 12 | d12, debian12, deb12 |
cloud-image/debian-12 |
| Debian 13 | d13, debian13, deb13 |
cloud-image/debian-13 |
| Ubuntu 22.04.5 | u22, ubuntu22, ubuntu2204 |
cloud-image/ubuntu-22.04 |
| Ubuntu 24.04.4 | u24, ubuntu24, ubuntu2404, ubuntu |
cloud-image/ubuntu-24.04 |
| Ubuntu 26.04.0 | u26, ubuntu26, ubuntu2604 |
cloud-image/ubuntu-26.04 |
| AlmaLinux 8 | alma8 |
cloud-image/almalinux-8 |
| AlmaLinux 9 | alma9 |
cloud-image/almalinux-9 |
| AlmaLinux 10 | alma10 |
cloud-image/almalinux-10 |
| RHEL 8 / 9 | rhel8, rhel9 |
generic/rhel8, generic/rhel9 |
| Oracle Linux 8 / 9 | oracle8, oracle9 |
generic/oracle8, generic/oracle9 |
历史别名 d11/debian11/deb11 与 u20/ubuntu20/ubuntu2004 仍可在脚本映射表中看到,但当前会被显式拒绝,不属于支持镜像。
资源缩放
您可以使用环境变量 VM_SCALE 来调整资源倍数,默认值为 1:
例如,使用 VM_SCALE=4 配置 meta 规格,会将默认的 2c4g 调整为 8c16g:
simu 和 deci 规格不支持资源缩放,scale 参数会被自动重置为 1,因为其资源配置已经针对仿真场景优化。
虚拟机管理
vagrant/Makefile 提供了一系列快捷方式来管理虚拟机;以下命令在该目录中执行:
SSH 密钥
Pigsty Vagrant 模板默认使用您的 ~/.ssh/id_rsa[.pub] 作为虚拟机的 SSH 密钥。
在开始之前,请确保您有一个有效的 SSH 密钥对。如果没有,可以使用以下命令生成:
支持的镜像
标准 EL、Debian、Ubuntu、AlmaLinux 镜像矩阵使用 Vagrant Cloud 上的 cloud-image/* Box;显式的 RHEL / Oracle Linux 直连别名使用 generic/* Box。当前配置脚本对 VirtualBox、libvirt 以及 amd64、arm64 使用同一套 cloud-image/* 名称映射;具体 Box 载荷是否可用仍由 Vagrant Cloud 在运行时解析。
VirtualBox 与 libvirt 使用同一套映射。vagrant/config 会为所有受支持的 cloud-image/* 镜像写入下表中的已验证版本,以保证 amd64 与 arm64 环境可复现:
| 系统 | Vagrant Box | 源码版本策略 |
|---|---|---|
| Rocky 8 | cloud-image/rocky-8 |
8.10.20240528.0 |
| Rocky 9 | cloud-image/rocky-9 |
9.8.20260525.0 |
| Rocky 10 | cloud-image/rocky-10 |
10.2.20260525.0 |
| Debian 12 | cloud-image/debian-12 |
20260806.2562.0 |
| Debian 13 | cloud-image/debian-13 |
20260810.2566.0 |
| Ubuntu 22.04 | cloud-image/ubuntu-22.04 |
20260810.0.0 |
| Ubuntu 24.04 | cloud-image/ubuntu-24.04 |
20260801.0.0 |
| Ubuntu 26.04 | cloud-image/ubuntu-26.04 |
20260731.0.0 |
| AlmaLinux 8 | cloud-image/almalinux-8 |
8.10.20260803 |
| AlmaLinux 9 | cloud-image/almalinux-9 |
9.8.20260810 |
| AlmaLinux 10 | cloud-image/almalinux-10 |
10.2.20260526.0 |
已停止支持但仍保留显式别名的 Debian 11 与 Ubuntu 20.04 也分别固定为 20260618.2513.0 与 20250624.0.0;generic/* 的 RHEL、Oracle Linux 与 CentOS 7 兼容实验镜像固定为其最后发布的 4.3.12。这些旧镜像不属于当前支持矩阵。
环境变量
您可以使用以下环境变量来控制 Vagrant 行为:
注意事项
使用较旧版本的 VirtualBox 作为 Vagrant 提供商时,需要额外配置才能使用 10.x.x.x CIDR 作为 Host-Only 网络:
第一次使用 Vagrant 启动特定操作系统时,会下载相应的 Box 镜像文件(通常 1-2 GB)。下载完成后,镜像会被缓存,后续创建虚拟机时会直接复用。
如果您使用 libvirt 作为提供商,可以使用 make info 查看虚拟机、网络和存储卷,使用 make nuke 强制销毁所有相关资源。
7 - Terraform
Terraform 是一个流行的"基础设施即代码"工具,您可以使用它在公有云上一键创建虚拟机。
Pigsty 当前提供阿里云、AWS(全球与中国区)、Azure、GCP、腾讯云、Hetzner、Vultr、DigitalOcean 与 Linode 的 Terraform 示例模板;其中 aliyun-s3.tf 还会为 S3/pgBackRest 场景创建私有 OSS Bucket 与专用 RAM 读写凭据。
快速开始
安装 Terraform
在 macOS 上,您可以使用 Homebrew 安装 Terraform:
其他平台请参考 Terraform 官方安装指南。
初始化与应用
进入 Terraform 目录,选择模板,初始化提供商插件,然后应用配置:
运行 apply 命令后,按提示输入 yes 确认,Terraform 将为您创建虚拟机及相关云资源。
获取 IP 地址
创建完成后,打印管理节点的公网 IP 地址:
配置 SSH 访问
全球云模板通常同时提供可直接执行的 ssh_command 输出:
仓库中的 ./ssh 是面向旧式“全部输出都是 IP、root 密码为 PigstyDemo4”模板的兼容脚本:它会遍历 每一个 Terraform 输出,将其当作 IP 写入 ~/.ssh/pigsty_config,再用 sshpass 分发密钥。因此它适用于 aliyun.tf、aliyun-full.tf、aliyun-oss.tf、aliyun-pro.tf 这类兼容模板;不要对包含 ssh_command、私网 IP 或访问密钥输出的现代模板运行它。
使用兼容脚本时:
如果您希望使用 ~/.ssh/pigsty_config 中的配置,请确保在 ~/.ssh/config 中包含以下内容:
销毁资源
测试完成后,可以一键销毁所有创建的云资源:
模板规格
Pigsty 在 terraform/spec/ 目录下提供了多种预定义的云资源模板:
| 模板文件 | 云厂商 | 说明 |
|---|---|---|
aliyun.tf |
阿里云 | 单节点元节点模板,支持所有发行版和 AMD/ARM(默认) |
aliyun-s3.tf |
阿里云 | 单节点 + 私有 OSS Bucket 与 RAM 读写凭据,供 S3/pgBackRest 使用 |
aliyun-full.tf |
阿里云 | 4 节点沙箱模板,支持所有发行版和 AMD/ARM |
aliyun-oss.tf |
阿里云 | 6 节点构建模板,支持所有发行版和 AMD/ARM |
aliyun-pro.tf |
阿里云 | 7 节点多发行版测试模板,用于跨操作系统测试 |
aws.tf |
AWS | AWS 全球区域单节点,Debian 12/13,AMD/ARM |
aws-cn.tf |
AWS | AWS 中国区旧式单节点环境 |
azure.tf |
Azure | Azure 单节点,Debian 12/13,AMD/ARM |
gcp.tf |
GCP | GCP 单节点,Debian 12/13,AMD/ARM |
qcloud.tf |
腾讯云 | 腾讯云单节点环境 |
hetzner.tf |
Hetzner | 单节点,Debian 12/13,AMD/ARM |
vultr.tf |
Vultr | 单节点,Debian 12/13,当前仅 AMD |
digitalocean.tf |
DigitalOcean | 单节点,Debian 12/13,当前仅 AMD |
linode.tf |
Linode | 单节点,Debian 12/13,当前仅 AMD |
使用模板时,将模板文件复制为 terraform.tf:
变量配置
各模板的变量并不完全相同。阿里云模板支持完整的多发行版矩阵,默认 u26;AWS 全球、Azure、GCP、腾讯云与 Hetzner 支持 Debian 12/13 并可选 AMD/ARM,默认 d12/amd64;Vultr、DigitalOcean 与 Linode 当前只提供 AMD 实例选择。
架构与发行版
资源配置
阿里云模板可在 locals 块中配置以下资源参数;其他云模板使用各自提供商的实例、磁盘与网络变量或本地值,请以所选 .tf 文件为准:
阿里云配置
凭证设置
将您的阿里云凭证添加到环境变量中,例如在 ~/.bash_profile 或 ~/.zshrc 中:
支持的镜像
以下是阿里云中常用的 ECS 公共操作系统镜像 前缀:
当前推荐并验证的基线为 Rocky Linux 9.8 / 10.2、Debian 12.15 / 13.6,以及 Ubuntu 22.04.5 / 24.04.4 / 26.04.0。
| 发行版 | 代码 | x86_64 镜像前缀 | aarch64 镜像前缀 |
|---|---|---|---|
| CentOS 7.9 | el7 |
centos_7_9_x64 |
- |
| Rocky 8.10 | el8 |
rockylinux_8_10_x64 |
rockylinux_8_10_arm64 |
| Rocky 9.8 | el9 |
rockylinux_9_8_x64 |
rockylinux_9_8_arm64 |
| Rocky 10.2 | el10 |
rockylinux_10_2_x64 |
rockylinux_10_2_arm64 |
| Debian 11.11 | d11 |
debian_11_11_x64 |
- |
| Debian 12.15 | d12 |
debian_12_15_x64 |
debian_12_15_arm64 |
| Debian 13.6 | d13 |
debian_13_6_x64 |
debian_13_6_arm64 |
| Ubuntu 22.04.5 LTS | u22 |
ubuntu_22_04_x64_20G |
ubuntu_22_04_arm64_20G |
| Ubuntu 24.04.4 LTS | u24 |
ubuntu_24_04_x64_20G |
ubuntu_24_04_arm64_20G |
| Ubuntu 26.04.0 LTS | u26 |
ubuntu_26_04_x64_20G |
ubuntu_26_04_arm64_20G |
| Anolis 8.10 | an8 |
anolisos_8_10_x64 |
anolisos_8_10_arm64 |
| Alibaba Cloud Linux 3 | al3 |
aliyun_3_x64_20G_alibase_[0-9]+ |
aliyun_3_arm64_20G_alibase_[0-9]+ |
OSS 存储配置
aliyun-s3.tf 模板会额外创建 OSS 存储桶及相关权限,用于 PostgreSQL 的 PITR 备份:
- OSS Bucket:创建名为
pigsty-oss的私有存储桶 - RAM 用户:创建专用的
pigsty-oss-user用户 - 访问密钥:生成 AccessKey 并保存到
~/pigsty.sk - RAM 策略:面向读写场景,为该用户授予存储桶及桶内对象的
oss:*权限
AWS 配置
凭证设置
全球与中国区模板都可以读取标准 AWS 环境变量或凭证文件:
aws.tf 默认读取 ~/.ssh/id_rsa.pub;旧式中国区 aws-cn.tf 则读取以下专用公钥:
aws.tf 使用 Debian 官方 AMI 的滚动查询;aws-cn.tf 使用中国区硬编码 AMI 与 ~/.aws/pigsty-key.pub,部署前应核对目标区域、AMI 与密钥。
腾讯云配置
凭证设置
将腾讯云凭证添加到环境变量中:
腾讯云模板是社区贡献的示例,可能需要根据您的具体需求进行调整。
其他云凭证
GCP 模板还要求提供 project 变量,例如 terraform apply -var="project=my-project"。除 AWS 中国区外,使用密钥认证的当前模板默认读取 ~/.ssh/id_rsa.pub;如需其他公钥路径,请直接修改所选模板。
快捷命令
Pigsty 提供了一些 Makefile 快捷命令用于 Terraform 操作:
对于带有 ssh_command、私网 IP 或其他非 IP 输出的现代模板,请直接运行 terraform apply,不要使用会随后调用旧式 ./ssh 的 make u。
注意事项
使用 Terraform 创建的云资源会产生费用。测试完成后,请及时使用 terraform destroy 销毁资源,避免不必要的开支。
建议使用按量付费的实例类型进行测试。模板默认使用竞价实例(Spot Instance)以降低成本。
阿里云模板与腾讯云模板默认设置 root 密码 PigstyDemo4;Linode 因密码复杂度要求使用 PigstyDemo4!。
AWS、Azure、GCP、Hetzner、Vultr 与 DigitalOcean 的当前模板主要使用 SSH 公钥认证,并没有统一的默认 root 密码。示例密码只能用于临时测试,生产环境必须更换或禁用密码登录。
这些模板面向演示/开发,当前安全组或云防火墙会从 0.0.0.0/0(部分同时含 ::/0)开放全部或近乎全部入站流量,而不只是 Pigsty 必需端口。
部署前应先限制来源网段与端口;不要原样用于生产环境。
创建完成后,使用以下命令 SSH 登录到管理节点:
兼容旧式输出与密码约定的阿里云模板还可以使用 ./ssh 或 make ssh 写入 SSH 别名;其他模板请使用其 ssh_command 输出。
8 - 安全考量
Pigsty 默认配置面向受信内网中的开发、测试和演示。生产部署需要根据实际威胁模型完成凭据、网络、认证、证书、备份和审计配置。
安全机制及其边界见 安全与合规,可执行检查项见 合规实践。ha/safe 是加固配置示例,不替代逐项审查。
机密性
重要文件
重点保护以下资产:
pigsty.yml与其他 inventory:通常包含系统和业务凭据;files/pki/ca/ca.key:可以签发受部署信任的证书;- 管理用户 SSH 私钥:默认可以在纳管节点上执行 sudo;
- 客户端证书私钥与备份加密密钥;
- 自动化过程中生成的
/pg/tmp/pg-user-*.sql。
应限制管理节点和配置仓库访问,避免把完整配置或私钥提交到公开仓库。CA 私钥和恢复所需配置应进行受控备份。
密码
生产部署必须替换所有公开默认凭据。建议先使用:
该选项不会替换 pgBackRest cipher_pass、ha/safe 中的全部 Silo 示例凭据,也不会处理用户自定义值。应按照 默认凭据 复核生成结果。
PostgreSQL 默认使用 SCRAM-SHA-256 保存新设置或更新的口令。需要强制复杂度时,在 pg_libs 中预加载 passwordcheck,或配置 credcheck。账号有效期可以通过 expire_in 或 expire_at 声明。
凭据轮换还需要同步更新数据库用户、PgBouncer 用户列表、组件配置和使用方连接信息。执行前应准备回退方案。
网络边界
IP地址
PostgreSQL 默认监听 0.0.0.0。需要收敛监听地址时,可设置:
监听地址不是唯一边界。生产环境应同时检查:
- 云安全组或上游防火墙;
node_firewall_public_port;node_firewall_intranet是否把过大的网段视为可信;- PostgreSQL 与 PgBouncer HBA;
- Patroni REST API 的 allowlist。
演示配置 pigsty.yml 会额外向公网放行 5432,生产环境通常应移除。需要直接连接数据库时,应限制到明确的业务网段。
网络流量
- PostgreSQL 服务端默认启用 TLS,但内网 HBA 默认不强制 TLS;
- PgBouncer TLS 默认关闭,由
pgbouncer_sslmode控制; - Patroni REST API HTTPS 默认关闭,由
patroni_ssl_enabled控制; - Nginx 与 MINIO 模块所选对象存储后端默认启用 HTTPS;etcd 客户端和对等通信使用 TLS。
HBA 的 auth: ssl 只要求加密连接。客户端还应使用 sslmode=verify-full 和可信 CA 验证数据库服务端,详见 加密通信。
Grafana、VictoriaMetrics 等组件可能监听节点端口,默认防火墙不会将其直接开放到公网。对外访问应优先通过 Nginx,并限制管理页面的来源地址和身份。
身份认证与访问控制
- 使用 HBA 明确用户、数据库、来源地址和认证方式,避免宽泛的
world规则; - 为高权限远程用户使用
auth: cert,并建立客户端证书交付与吊销流程; - 通过 内置角色 分配业务权限,不向普通业务账号授予超级用户;
- 为多业务共享集群设置
revokeconn: true,并检查实际数据库 ACL; - 使用声明的数据库属主或受控管理角色创建对象,确保默认权限生效;
- 需要隔离离线查询时,显式为
dbrole_offline的 HBA 规则设置role: offline。
变更 HBA、用户或角色后,应同时核对配置清单和数据库中的实际状态。
完整性
Pigsty 默认启用页级数据校验和,用于发现写入后发生的页面损坏。校验和不能检测所有内存错误、逻辑错误和应用写入错误。
CRIT 模板 启用 Patroni 严格同步模式和更详细的连接日志。同步模式以不丢失已确认事务为目标,但依赖 synchronous_commit、同步副本状态和故障切换条件;没有同步副本时会阻塞写入。
watchdog 在 CRIT 中配置为 automatic,只有系统存在可用 watchdog 设备时才会启用。是否需要 required 模式应结合硬件和可用性要求评估。
可用性
- 关键集群通常应至少部署三个实例,并把实例分散到独立故障域;
- 使用 HAProxy、VIP 或 DNS 服务名接入,避免客户端绑定固定主库地址;
- etcd 应使用奇数节点,并分散到独立故障域;
- INFRA、DNS、监控和软件仓库也应根据可用性要求消除单点;
- 使用
pg_rpo和pg_rto时,应理解其配置含义并通过演练验证目标。
副本只解决部分节点故障,不能替代备份。
备份与恢复
- 本地 pgBackRest 仓库默认不加密,并与数据库主机共享故障域;
pgbackrest_method: minio对象存储仓库默认启用 AES-256-CBC,但cipher_pass: pgBackRest是公开值,必须替换;ha/safe中的pgBR.${pg_cluster}也是示例值,不应作为最终密钥;- 重要备份应保存到独立故障域,并评估对象锁、版本控制或离线副本;
- 定期执行全量恢复和 PITR 演练,验证 WAL、密钥、恢复时间和应用一致性。
具体机制见 数据安全 与 时间点恢复;配置与操作见 PGSQL 备份恢复。
审计与响应
默认 OLTP 模板记录 DDL、慢查询和 PostgreSQL 18 的连接授权事件;CRIT 模板进一步记录连接和断开事件。
pgaudit 需要安装、预加载并配置审计策略,单纯安装软件包不会产生 SQL 审计日志。启用 Vector 和 VictoriaLogs 后,还应根据要求调整日志保留周期、访问权限与归档方式。
指标、日志和告警只提供事件输入。生产环境还需建立告警分级、值班、事件判定、响应、取证和复盘流程。
主机与软件供应链
- 根据兼容性验证结果将 SELinux 从默认
permissive调整为enforcing; - 禁用不需要的 SSH 口令和 root 远程登录,并考虑堡垒机或多因素认证;
- 审查管理用户和数据库系统用户的 sudo 范围;
- 及时升级受支持的 Pigsty 和上游组件版本;
- 核对软件仓库 GPG 公钥指纹,并按需要启用逐包签名验证。
供应链与漏洞响应说明见 合规实践。
