跳转到主要内容

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

返回本页常规视图.

参考

详细的参考信息与列表:支持的操作系统,模块,参数,监控指标,数据库扩展,同类对比,术语表等。

1 - Linux 兼容性

Pigsty 兼容的 Linux 操作系统发行版大版本,以及芯片架构指令集

Pigsty 运行于 Linux 操作系统上,支持 amd64/x86_64arm64/aarch64 架构,支持 ELDebianUbuntu 三大主流 Linux 发行版。

Pigsty 不使用任何虚拟化容器化技术,直接运行于裸操作系统上。我们为三大主流 Linux 发行版生命周期内的主流大版本与两种架构提供支持。

概述

Pigsty 推荐使用的操作系统版本:Rocky Linux 9.8 / 10.2、Debian 12.15 / 13.6、Ubuntu 22.04.5 / 24.04.4 / 26.04.0。

发行版 架构 系统代码 PG18 PG17 PG16 PG15 PG14
RHEL / Rocky / Alma 10 x86_64 el10.x86_64
RHEL / Rocky / Alma 10 aarch64 el10.aarch64
RHEL / Rocky / Alma 9 x86_64 el9.x86_64
RHEL / Rocky / Alma 9 aarch64 el9.aarch64
Ubuntu 26.04 (resolute) x86_64 u26.x86_64
Ubuntu 26.04 (resolute) aarch64 u26.aarch64
Ubuntu 24.04 (noble) x86_64 u24.x86_64
Ubuntu 24.04 (noble) aarch64 u24.aarch64
Ubuntu 22.04 (jammy) x86_64 u22.x86_64
Ubuntu 22.04 (jammy) aarch64 u22.aarch64
Debian 13 (trixie) x86_64 d13.x86_64
Debian 13 (trixie) aarch64 d13.aarch64
Debian 12 (bookworm) x86_64 d12.x86_64
Debian 12 (bookworm) aarch64 d12.aarch64

以上七个小版本是当前验证基线。扩展仓库仍保留 EL8 双架构兼容性,因此完整软件包矩阵共有 16 个 Linux 平台;EL8 已进入退役过渡期,不再属于推荐部署基线。


EL

Pigsty 支持 RHEL / Rocky / Alma / Anolis / CentOS 8、9、10 版本。

EL 发行版 架构 系统代码 PG18 PG17 PG16 PG15 PG14
RHEL10 / Rocky10 / Alma10 x86_64 el10.x86_64
RHEL10 / Rocky10 / Alma10 aarch64 el10.aarch64
RHEL9 / Rocky9 / Alma9 x86_64 el9.x86_64
RHEL9 / Rocky9 / Alma9 aarch64 el9.aarch64
RHEL8 / Rocky8 / Alma8 x86_64 el8.x86_64
RHEL8 / Rocky8 / Alma8 aarch64 el8.aarch64
RHEL7 / CentOS7 x86_64 el7.x86_64
RHEL7 / CentOS7 aarch64 -
推荐使用 Rocky Linux 9.8 / 10.2

请注意,PGDG Yum 仓库 从 EL9 / EL10 开始,针对 EL 小版本 进行构建,目前建议使用的小版本为:9.8 / 10.2。 建议离线安装包/自建离线仓库与系统 EL 小版本(例如 Rocky Linux 9.8 / 10.2)保持一致,跨小版本可能因 OpenSSL 等依赖版本跳变导致不可用。

EL8 即将不再支持

EL8 将于 2029 年进入 EOL,建议尽早规划升级。鉴于 EL10 适配已经完成,我们将在下个版本移除对 EL8 的支持。

EL 7 @ 2024-06

Red Hat Enterprise Linux 7 已经于 2024年6月停止维护,PGDG 也不再为 PostgreSQL 16/17/18 提供 EL7 二进制包支持。

如需在老旧操作系统上获得运行支持,请考虑我们的 专业订阅服务


Ubuntu

Pigsty 支持 Ubuntu 26.04 / 24.04 / 22.04:

Ubuntu 发行版 架构 系统代码 PG18 PG17 PG16 PG15 PG14
Ubuntu 26.04 (resolute) x86_64 u26.x86_64
Ubuntu 26.04 (resolute) aarch64 u26.aarch64
Ubuntu 24.04 (noble) x86_64 u24.x86_64
Ubuntu 24.04 (noble) aarch64 u24.aarch64
Ubuntu 22.04 (jammy) x86_64 u22.x86_64
Ubuntu 22.04 (jammy) aarch64 u22.aarch64
推荐使用 Ubuntu 22.04.5 / 24.04.4 / 26.04.0 LTS

Ubuntu 26.04 是最新 LTS 基线;如果您希望采用更保守的 Ubuntu 生产环境基线,也可以继续使用 Ubuntu 24.04。


Debian

Pigsty 支持 Debian 12 / 13,推荐使用最新的 Debian 13.6。

Debian 发行版 架构 系统代码 PG18 PG17 PG16 PG15 PG14
Debian 13 (trixie) x86_64 d13.x86_64
Debian 13 (trixie) aarch64 d13.aarch64
Debian 12 (bookworm) x86_64 d12.x86_64
Debian 12 (bookworm) aarch64 d12.aarch64
Debian 11 (bullseye) x86_64 d11.x86_64(历史)
Debian 11 (bullseye) aarch64 -
推荐使用 Debian 12.15 / 13.6
Debian 11 EOL @ 2024-07

Debian 11 已经于 2024-07 进入 EOL。如需在老旧操作系统上获得扩展支持,请考虑我们的 专业订阅服务


Vagrant

当您使用本地虚拟机部署 Pigsty 时,可以考虑使用以下 Vagrant 操作系统镜像,这也是 Pigsty 开发测试使用的镜像。

系统 镜像
Rocky 8.10 cloud-image/rocky-8
Rocky 9.8 cloud-image/rocky-9
Rocky 10.2 cloud-image/rocky-10
Debian 12.15 cloud-image/debian-12
Debian 13.6 cloud-image/debian-13
Ubuntu 22.04.5 cloud-image/ubuntu-22.04
Ubuntu 24.04.4 cloud-image/ubuntu-24.04
Ubuntu 26.04.0 cloud-image/ubuntu-26.04

Terraform

当您使用云服务器部署 Pigsty 时,可以考虑在 Terraform 中使用以下操作系统基础镜像,以 阿里云 为例:

x86_64 阿里云镜像前缀
Rocky 8.10 rockylinux_8_10_x64
Rocky 9.8 rockylinux_9_8_x64
Rocky 10.2 rockylinux_10_2_x64
Ubuntu 22.04.5 ubuntu_22_04_x64_20G
Ubuntu 24.04.4 ubuntu_24_04_x64_20G
Ubuntu 26.04.0 ubuntu_26_04_x64_20G
Debian 12.15 debian_12_15_x64
Debian 13.6 debian_13_6_x64
aarch64 阿里云镜像前缀
Rocky 8.10 rockylinux_8_10_arm64
Rocky 9.8 rockylinux_9_8_arm64
Rocky 10.2 rockylinux_10_2_arm64
Ubuntu 22.04.5 ubuntu_22_04_arm64_20G
Ubuntu 24.04.4 ubuntu_24_04_arm64_20G
Ubuntu 26.04.0 ubuntu_26_04_arm64_20G
Debian 12.15 debian_12_15_arm64
Debian 13.6 debian_13_6_arm64

2 - 模块列表

本文列出了 Pigsty 中可用的功能模块,以及后续的功能模块规划。

正式模块

模块 类别 状态 文档入口 简介
PGSQL 核心 GA /docs/pgsql 高可用 PostgreSQL 集群,内置备份、监控、SOP 与扩展生态。
INFRA 核心 GA /docs/infra 本地软件仓库 + VictoriaMetrics/Logs/Traces + Grafana 等基础设施。
NODE 核心 GA /docs/node 节点初始化与收敛:系统调优、管理员、HAProxy、Vector、Keepalived 等。
ETCD 核心 GA /docs/etcd PostgreSQL 高可用 DCS(服务发现、配置、选主元数据)。
MINIO 扩展 GA /docs/minio 部署 Silo S3 兼容对象存储,可作为 PostgreSQL 备份仓库。
REDIS 扩展 GA /docs/redis Redis(默认)或 Valkey 的独立/哨兵/集群模式部署与监控。
DOCKER 扩展 GA /docs/docker Docker Daemon 及容器化应用运行基础能力。
JUICE 扩展 BETA /docs/juice JuiceFS 分布式文件系统,使用 PostgreSQL 作为元数据引擎。
VIBE 扩展 BETA /docs/vibe 浏览器化开发环境,集成 Code-Server、JupyterLab、Node.js、Claude Code 与 Codex CLI。
KAFKA 扩展 BETA /docs/kafka Apache Kafka 4.x dynamic KRaft 集群部署、安全基线与监控。

核心模块

Pigsty 提供了四个 基础 功能模块,对于提供完整高可用的 PostgreSQL 服务非常重要:

  • PGSQL:带有高可用,时间点恢复,IaC,SOP,监控系统,以及 575 个扩展插件的自治的 PostgreSQL 集群。
  • INFRA:本地软件仓库、VictoriaMetrics、VictoriaLogs、VictoriaTraces、Grafana、Alertmanager、Blackbox Exporter…
  • NODE:调整节点到所需状态、名称、时区、NTP、SSH、sudo、HAProxy、Vector、Keepalived
  • ETCD:分布式键值存储,用作高可用 Postgres 集群的 DCS:共识选主/配置管理/服务发现。

尽管这四个模块通常会同时安装,但单独使用也是可行的 —— 只有 NODE 模块通常是必选的。


扩展模块

Pigsty 提供了六个 扩展 功能模块,它们对于核心功能来说并非必须,但可以用于增强 PostgreSQL 的能力:

  • MINIO:S3 兼容对象存储模块,通过统一清单部署 Silo,可作为 PostgreSQL 备份仓库并提供对应监控。
  • REDIS:Redis 服务器,高性能数据结构服务器,支持独立主从、哨兵、集群模式生产部署,并带有完善的监控支持。
  • DOCKER:Docker Daemon 服务,允许用户一键拉起容器化的无状态软件工具模板,为 Pigsty 加装各种功能!
  • JUICE:JuiceFS 分布式文件系统模块,以 PostgreSQL 作为元数据引擎,提供可共享的 POSIX 存储能力。
  • VIBE:浏览器化开发环境模块,集成 Code-Server、JupyterLab、Node.js、Claude Code 与 Codex CLI。
  • KAFKA:Apache Kafka 4.x dynamic KRaft 集群,提供 TLS/SCRAM/ACL 安全基线、声明式 Topic/User 与完整监控。

生态模块

以下模块与 PostgreSQL 生态紧密相关,属于可选生态能力,不计入上述 10 个正式模块:

3 - 文件结构

Pigsty 的文件系统结构是如何设计与组织的,以及各个模块使用的目录结构。

Pigsty FHS

Pigsty 的主目录默认放置于 ~/pigsty,该目录下的文件结构如下所示:

~/pigsty 源码树

  • app/
    • 应用模板资源
  • bin/
    • 管理与运维脚本
  • files/
    • victoria/
      • 规则与运维脚本
    • grafana/
      • Grafana 仪表盘
    • postgres/
      • PostgreSQL 管理脚本
    • migration/
      • 数据迁移任务定义
    • pki/
      • 自签名 CA 与证书
  • roles/
    • Ansible 角色实现
  • templates/
    • Ansible 模板文件
  • vagrant/
    • Vagrant 沙箱定义
  • terraform/
    • Terraform 云资源模板
  • configure
  • ansible.cfg
  • pigsty.yml
  • *.yml

/infra/data/infra 的运行时软链接,集中存放可观测性数据与生成的配置:

/data/infra
metrics/           # VictoriaMetrics TSDB 数据
logs/              # VictoriaLogs 数据
traces/            # VictoriaTraces 数据
alertmgr/           # AlertManager 数据
rules/              # 规则定义(含 agent.yml)
targets/            # FileSD 监控目标
dashboards/         # Grafana 仪表盘定义
datasources/        # Grafana 数据源定义
prometheus.yml      # Victoria 的 Prometheus 兼容配置

CA FHS

Pigsty 的 自签名 CA 位于 Pigsty 主目录下的 files/pki/

你必须妥善保管 CA 的密钥文件files/pki/ca/ca.key,该密钥是在 deploy.ymlinfra.ymlca 角色负责生成的。

# pigsty/files/pki                           # (local_user) 0755
#  ^-----@ca                                 # (local_user) 0700
#         ^-----@ca.key                      # 0600,非常重要:保守其秘密
#         ^-----@ca.crt                      # 0644,非常重要:在所有地方都受信任
#  ^-----@csr                                # (local_user) 0755,签名请求 csr
#  ^-----@misc                               # (local_user) 0755,杂项证书,已签发证书
#  ^-----@etcd                               # (local_user) 0755,etcd 服务器证书
#  ^-----@minio                              # (local_user) 0755,minio 服务器证书
#  ^-----@nginx                              # (local_user) 0755,nginx SSL 证书
#  ^-----@infra                              # (local_user) 0755,infra 客户端证书
#  ^-----@pgsql                              # (local_user) 0755,pgsql 服务器证书
#  ^-----@kafka                              # (local_user) 0755,kafka 服务器证书
#  ^-----@mysql                              # (local_user) 0755,mysql 服务器证书

被 Pigsty 所管理的节点将安装以下证书文件:

/etc/pki/ca.crt                             # root:root 0644,所有节点都添加的根证书
/etc/pki/ca-trust/source/anchors/ca.crt     # EL 系统受信任锚点
/usr/local/share/ca-certificates/ca.crt     # Debian/Ubuntu 系统受信任锚点

所有 infra 节点都会有以下证书:

/etc/pki/infra.crt                          # root:infra 0644,infra 节点证书
/etc/pki/infra.key                          # root:infra 0640,infra 节点密钥

当您的管理节点出现故障时,files/pki 目录与 pigsty.yml 文件应当在备份的管理节点上可用。你可以用 rsync 做到这一点。

# run on meta-1, rsync to meta2
cd ~/pigsty;
rsync -avz ./ meta-2:~/pigsty  

INFRA FHS

infra 角色会创建 infra_data(默认 /data/infra)并建立 /infra -> /data/infra 软链接。/data/infra 的权限为 root:infra 0771,子目录默认权限为 *:infra 0750,覆盖项如下:

# /infra -> /data/infra
# /data/infra                              # root:infra 0771
#  ^-----@pgadmin                          # 5050:5050 0700
#  ^-----@alertmgr                         # prometheus:infra 0700
#  ^-----@conf                             # root:infra 0750
#            ^-----patronictl.yml          # root:admin 0640
#  ^-----@tmp                              # root:infra 0750
#  ^-----@hosts                            # dnsmasq:dnsmasq 0755(DNS 记录)
#            ^-----default                 # root:root 0644
#  ^-----@datasources                      # root:infra 0750
#            ^-----*.json                  # 0600(register 生成)
#  ^-----@dashboards                       # grafana:infra 0750
#  ^-----@metrics                          # victoria:infra 0750
#  ^-----@logs                             # victoria:infra 0750
#  ^-----@traces                           # victoria:infra 0750
#  ^-----@bin                              # victoria:infra 0750
#            ^-----check|new|reload|status # root:infra 0755
#  ^-----@rules                            # victoria:infra 0750
#            ^-----agent.yml               # victoria:infra 0644
#            ^-----infra.yml               # victoria:infra 0644
#            ^-----node.yml                # victoria:infra 0644
#            ^-----pgsql.yml               # victoria:infra 0644
#            ^-----redis.yml               # victoria:infra 0644
#            ^-----etcd.yml                # victoria:infra 0644
#            ^-----minio.yml               # victoria:infra 0644
#            ^-----kafka.yml               # victoria:infra 0644
#            ^-----mysql.yml               # victoria:infra 0644
#  ^-----@targets                          # victoria:infra 0750
#            ^-----@infra                  # infra 组件目标(文件 0640)
#            ^-----@node                   # 节点目标(文件 0640)
#            ^-----@ping                   # ping 目标(文件 0640)
#            ^-----@etcd                   # etcd 目标(文件 0640)
#            ^-----@pgsql                  # pgsql 目标(文件 0640)
#            ^-----@pgrds                  # pgrds 目标(文件 0640)
#            ^-----@redis                  # redis 目标(文件 0640)
#            ^-----@minio                  # minio 目标(文件 0640)
#            ^-----@juice                  # juicefs 目标(文件 0640)
#            ^-----@mysql                  # mysql 目标(文件 0640)
#            ^-----@kafka                  # kafka 目标(文件 0640)
#            ^-----@docker                 # docker 目标(文件 0640)
#            ^-----@patroni                # patroni SSL 目标(文件 0640)
#  ^-----prometheus.yml                    # victoria:infra 0644

上述结构由以下实现生成:roles/infra/tasks/dir.ymlroles/infra/tasks/victoria.ymlroles/infra/tasks/register.ymlroles/infra/tasks/dns.ymlroles/infra/tasks/env.yml


NODE FHS

节点的数据目录由参数 node_data 指定,默认为 /data,由 root:root 持有,权限为 0755

多数核心组件的默认数据目录位于这个目录下;个别试点模块使用自身固定目录,如原生 MySQL 8.4 当前使用 /var/lib/mysql

/data                                 # root:root 0755
#  ^-----@postgres                    # postgres:postgres 0700(默认 pg_fs_main)
#  ^-----@backups                     # postgres:postgres 0700(默认 pg_fs_backup)
#  ^-----@redis                       # redis:redis 0700(多实例共用)
#  ^-----@minio                       # minio:minio 0750(单机单盘模式)
#  ^-----@etcd                        # etcd:etcd 0700(etcd_data)
#  ^-----@infra                       # root:infra 0771(infra 模块数据目录)
#  ^-----@docker                      # root:root 0755(Docker 数据目录)
#  ^-----@kafka                       # kafka:kafka 0700(kafka_data)
#  ^-----@...                         # 其他组件的数据目录

HAProxy

Pigsty 使用自带的 systemd 单元启动 HAProxy,并将主配置与服务片段分开管理:

/etc/systemd/system/haproxy.service   # Pigsty 渲染的 systemd 单元
/etc/haproxy/haproxy.cfg              # HAProxy 主配置
/etc/haproxy/conf.d/*.cfg             # 节点与 PostgreSQL 服务片段
/etc/default/haproxy                  # 可选的用户环境文件,Pigsty 不主动创建

如需在 /etc/default/haproxy 中追加启动参数,请使用 EXTRAOPTS,并保留默认的 -S /run/haproxy-master.sock;配置文件已经由 systemd 单元通过 -f 显式加载,不要再把 -f 写入 EXTRAOPTS


Victoria FHS

监控配置已经从旧的 /etc/prometheus 目录布局迁移为 /infra 运行时布局。主配置模板位于 roles/infra/templates/victoria/prometheus.yml,渲染结果为 /infra/prometheus.yml

files/victoria/bin/*files/victoria/rules/* 会被同步到 /infra/bin//infra/rules/,各模块再向 /infra/targets/* 注册 FileSD 目标。

# /infra
#  ^-----prometheus.yml              # Victoria 主配置(Prometheus 兼容格式)0644
#  ^-----@bin                        # 工具脚本(check/new/reload/status)0755
#  ^-----@rules                      # 记录与告警规则(*.yml 0644)
#            ^-----agent.yml         # Agent 预聚合规则
#            ^-----infra.yml         # infra 规则和告警
#            ^-----etcd.yml          # etcd 规则和告警
#            ^-----node.yml          # node 规则和告警
#            ^-----pgsql.yml         # pgsql 规则和告警
#            ^-----redis.yml         # redis 规则和告警
#            ^-----minio.yml         # minio 规则和告警
#            ^-----kafka.yml         # kafka 规则和告警
#            ^-----mysql.yml         # mysql 规则和告警
#  ^-----@targets                    # FileSD 服务发现目标(*.yml 0640)
#            ^-----@infra            # infra 静态目标
#            ^-----@node             # node 静态目标
#            ^-----@pgsql            # pgsql 静态目标
#            ^-----@pgrds            # pgsql 远程 RDS 目标
#            ^-----@redis            # redis 静态目标
#            ^-----@minio            # minio 静态目标
#            ^-----@mysql            # mysql 静态目标
#            ^-----@etcd             # etcd 静态目标
#            ^-----@ping             # ping 静态目标
#            ^-----@kafka            # kafka 静态目标
#            ^-----@juice            # juicefs 静态目标
#            ^-----@docker           # docker 静态目标
#            ^-----@patroni          # patroni 静态目标(启用 SSL 时)
# /etc/default/vmetrics              # vmetrics 启动参数(victoria:infra 0644)
# /etc/default/vlogs                 # vlogs 启动参数(victoria:infra 0644)
# /etc/default/vtraces               # vtraces 启动参数(victoria:infra 0644)
# /etc/default/vmalert               # vmalert 启动参数(victoria:infra 0644)
# /etc/alertmanager.yml              # 告警组件主配置(prometheus:infra 0644)
# /etc/default/alertmanager          # 告警组件环境变量(prometheus:infra 0640)
# /etc/blackbox.yml                  # 黑盒探测主配置(prometheus:infra 0644)
# /etc/default/blackbox_exporter     # 黑盒探测环境变量(prometheus:infra 0644)

Pigsty 自行渲染的 INFRA 单元统一位于 /etc/systemd/system/,包括 vmetricsvlogsvtracesvmalertalertmanagerblackbox_exporternginx_exporterdnsmasq;发行版软件包自带的单元目录不是这些角色的写入目标。


Postgres FHS

以下参数和内部变量均与 PostgreSQL 数据库目录结构相关:

  • pg_dbsu_home: Postgres 默认用户的家目录,默认为 /var/lib/pgsql
  • pg_bin_dir: Postgres 二进制目录,默认为 /usr/pgsql/bin/
  • pg_fs_main:Postgres 主数据目录,默认为 /data/postgres
  • pg_fs_backup:Postgres 备份盘挂载点,默认为 /data/backups(可选,也可以选择备份到主数据盘上的子目录)
  • pg_data:内部变量,固定表示 Postgres 数据目录软链 /pg/data
  • pg_cluster_dir:派生变量,{{ pg_fs_main }}/{{ pg_cluster }}-{{ pg_version }}
  • pg_backup_dir:派生变量,{{ pg_fs_backup }}/{{ pg_cluster }}-{{ pg_version }}
#--------------------------------------------------------------#
# 工作假设:
#   {{ pg_fs_main   }} 主数据目录,默认位置:`/data/postgres` [SSD]
#   {{ pg_fs_backup }} 备份数据盘,默认位置:`/data/backups`  [HDD]
#--------------------------------------------------------------#
# 默认配置(pg_cluster=pg-test, pg_version=18):
#     pg_fs_main = /data/postgres      高速SSD
#     pg_fs_backup = /data/backups     廉价HDD (可选)
#
#     /pg        -> /data/postgres/pg-test-18
#     /pg/data   -> /data/postgres/pg-test-18/data
#     /pg/backup -> /data/backups/pg-test-18/backup
#--------------------------------------------------------------#
- name: create pgsql directories
  tags: pg_dir
  become: true
  block:

    - name: create pgsql directories
      file: path={{ item.path }} state=directory owner={{ item.owner|default(pg_dbsu) }} group={{ item.group|default('postgres') }} mode={{ item.mode }}
      with_items:
        - { path: "{{ pg_fs_main }}"            ,mode: "0700" }
        - { path: "{{ pg_fs_backup }}"          ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}"        ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/bin"    ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/log"    ,mode: "0750" }
        - { path: "{{ pg_cluster_dir }}/tmp"    ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/cert"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/conf"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/data"   ,mode: "0700" }
        - { path: "{{ pg_cluster_dir }}/spool"  ,mode: "0700" }
        - { path: "{{ pg_backup_dir }}/backup"  ,mode: "0700" }
        - { path: "/var/run/postgresql"         ,owner: root, group: root, mode: "0755" }

    - name: link pgsql directories
      file: src={{ item.src }} dest={{ item.dest }} state=link
      with_items:
        - { src: "{{ pg_backup_dir }}/backup" ,dest: "{{ pg_cluster_dir }}/backup" }
        - { src: "{{ pg_cluster_dir }}"       ,dest: "/pg" }

数据文件结构

# 真实目录
{{ pg_fs_main }}     /data/postgres                    # postgres:postgres 0700,主数据目录
{{ pg_cluster_dir }} /data/postgres/pg-test-18         # postgres:postgres 0700,集群目录
                     /data/postgres/pg-test-18/bin     # postgres:postgres 0700(脚本文件 root:postgres 0755)
                     /data/postgres/pg-test-18/log     # postgres:postgres 0750,日志目录
                     /data/postgres/pg-test-18/tmp     # postgres:postgres 0700,临时文件
                     /data/postgres/pg-test-18/cert    # postgres:postgres 0700,证书
                     /data/postgres/pg-test-18/conf    # postgres:postgres 0700,配置索引
                     /data/postgres/pg-test-18/data    # postgres:postgres 0700,主数据目录
                     /data/postgres/pg-test-18/spool   # postgres:postgres 0700,pgBackRest spool
                     /data/postgres/pg-test-18/backup  # -> /data/backups/pg-test-18/backup

{{ pg_fs_backup  }}  /data/backups                     # postgres:postgres 0700,可选备份盘目录/挂载点
{{ pg_backup_dir }}  /data/backups/pg-test-18          # postgres:postgres 0700,集群备份目录
                     /data/backups/pg-test-18/backup   # postgres:postgres 0700,实际备份位置

# 软链接
/pg             ->   /data/postgres/pg-test-18         # pg 根软链接
/pg/data        ->   /data/postgres/pg-test-18/data    # pg 数据目录
/pg/backup      ->   /data/backups/pg-test-18/backup   # pg 备份目录

二进制文件结构

在 EL 兼容发行版上(使用 yum),PostgreSQL 默认安装位置为

/usr/pgsql-${pg_version}/

Pigsty 会创建一个名为 /usr/pgsql 的软连接,指向由 pg_version 参数指定的实际版本,例如

/usr/pgsql -> /usr/pgsql-18

因此,默认的 pg_bin_dir/usr/pgsql/bin/,而该路径会被添加至系统的 PATH 环境变量中,定义文件为:/etc/profile.d/pgsql.sh.

export PATH="/usr/pgsql/bin:/pg/bin:$PATH"
export PGHOME=/usr/pgsql
export PGDATA=/pg/data

在 Ubuntu/Debian 上,PostgreSQL Deb 包的默认安装位置是:

/usr/lib/postgresql/${pg_version}/bin

Pigsty 渲染的 PostgreSQL 运行单元同样统一位于 /etc/systemd/system/,主要包括 patroni.servicepostgres.servicepgbouncer.servicepg_exporter.servicepgbackrest_exporter.servicepgbouncer_exporter.service,以及启用 VIP 时的 vip-manager.service


Pgbouncer FHS

Pgbouncer 使用与 {{ pg_dbsu }}(默认为 postgres)相同的用户运行,配置文件位于 /etc/pgbouncer

  • pgbouncer.ini:连接池主配置文件(postgres:postgres 0640
  • database.txt:定义连接池中的数据库(postgres:postgres 0600
  • useropts.txt:业务用户连接参数(postgres:postgres 0600
  • userlist.txt:由 /pg/bin/pgb-user 维护的用户密码文件
  • pgb_hba.conf:连接池访问控制文件(postgres:postgres 0600
/etc/pgbouncer/                # postgres:postgres 0750
/etc/pgbouncer/pgbouncer.ini   # postgres:postgres 0640
/etc/pgbouncer/database.txt    # postgres:postgres 0600
/etc/pgbouncer/useropts.txt    # postgres:postgres 0600
/etc/pgbouncer/userlist.txt    # postgres:postgres (由 pgb-user 维护)
/etc/pgbouncer/pgb_hba.conf    # postgres:postgres 0600
/pg/log/pgbouncer              # postgres:postgres 0750
/var/run/postgresql            # {{ pg_dbsu }}:postgres 0755(tmpfiles 维护)

Object Storage FHS

MINIO 模块当前只部署 Silo,但继续使用 minio_* 参数与目录命名保持兼容:

/etc/default/silo                             # root:minio 0640,服务环境变量
/etc/systemd/system/silo.service              # root:root 0644,Pigsty 渲染的单元
/data/minio/                                  # minio:minio 0750,默认数据目录
/infra/targets/minio/<cluster>-<seq>.yml      # victoria:infra 0640,FileSD 目标
/home/minio/.mcli/config.json                 # mcli 客户端别名(执行用户家目录亦会写入)

Silo 的证书位于 /home/minio/.minio/certs/。模块名、角色参数、数据目录和 FileSD 路径仍使用 MINIO / minio_* 兼容命名。


Redis FHS

Pigsty 使用同一套目录与实例命名管理 Redis 或 Valkey。

服务单元会按 redis_type 调用对应二进制(/bin/* 在多数发行版上与 /usr/bin/* 兼容):

/bin/redis-server  /bin/redis-cli    # redis_type: redis
/bin/valkey-server /bin/valkey-cli   # redis_type: valkey

对于一个名为 redis-test-1-6379 的 Redis 实例,与其相关的资源如下所示:

/etc/systemd/system/redis-test-1-6379.service         # root:root 0644(Pigsty 渲染)
/etc/systemd/system/redis_exporter.service            # root:root 0644(Pigsty 渲染)
/etc/redis/                                           # redis:redis 0700
/etc/redis/redis-test-1-6379.conf                     # redis:redis 0600
/data/redis/                                          # redis:redis 0700
/data/redis/redis-test-1-6379                         # redis:redis 0700
/data/redis/redis-test-1-6379/redis-test-1-6379.rdb   # RDB 文件
/data/redis/redis-test-1-6379/redis-test-1-6379.aof   # AOF 文件
/var/log/redis/                                       # redis:redis 0700
/var/log/redis/redis-test-1-6379.log                  # 日志
/var/run/redis/                                       # redis:redis 0700(开机 tmpfiles 为 0755)
/var/run/redis/redis-test-1-6379.pid                  # PID

Pigsty 渲染的 Redis/Valkey 实例与 exporter 单元统一放在 /etc/systemd/system/,实例单元使用 Type=notify;软件包自带的单元可能仍位于发行版目录,但不是角色写入的位置。

4 - 参数列表

Pigsty v4.x 配置参数总览与模块参数导航

本文是 Pigsty v4.x 的参数导航页,不重复展开每个参数的详细解释。 参数细节请进入各模块的 param 页面查看。

按照当前源码与参数参考页逐项对账,10 个正式模块合计 373 个公开参数。原生 MySQL 8.4 仍是试点模块,其 13 个公开参数单列,不计入正式模块合计。


模块参数导航

模块 参数组 参数量 说明
PGSQL 9 124 PostgreSQL 高可用集群配置
INFRA 10 73 软件仓库与 Victoria 可观测基础设施
NODE 11 73 节点初始化、系统调优与运维基线
ETCD 2 13 ETCD 集群与移除保护参数
MINIO 2 22 Silo 部署、观测与移除参数
REDIS 2 22 Redis/Valkey 部署与移除参数
DOCKER 1 8 Docker 引擎参数
JUICE 1 2 JuiceFS 实例与缓存参数
VIBE 1 18 Code/Jupyter/Node.js/Claude/Codex 配置
KAFKA 2 18 Kafka 部署参数与移除保护参数

试点模块:原生 MYSQL 8.4 当前公开 13 个参数,其中 11 个用于部署、2 个用于受保护移除;固定的端口、路径、软件版本和定时器不属于公开参数。


参数组速览


使用建议

  • 首次部署优先阅读:NODEINFRAPGSQL
  • 生产环境务必审查:*_safeguard、密码凭据、端口与网络暴露参数
  • 变更前先在单集群小范围验证,再扩展到全局参数

5 - 剧本列表

Pigsty v4.x 预置 Ansible 剧本导航与执行要点

本文汇总 Pigsty v4.x 各模块剧本入口与执行要点,详细任务标签请进入对应模块 playbook 文档。

模块剧本导航

模块 数量 剧本
INFRA 3 deploy.yml infra.yml infra-rm.yml
NODE 2 node.yml node-rm.yml
ETCD 2 etcd.yml etcd-rm.yml
PGSQL 7 pgsql.yml pgsql-rm.yml
pgsql-user.yml pgsql-db.yml
pgsql-monitor.yml pgsql-migration.yml pgsql-pitr.yml
REDIS 2 redis.yml redis-rm.yml
MINIO 2 minio.yml minio-rm.yml
DOCKER 1 docker.yml
JUICE 1 juice.yml
VIBE 1 vibe.yml
KAFKA 2 kafka.yml kafka-rm.yml
MYSQL(试点) 2 mysql.yml mysql-rm.yml

剧本总表

剧本 模块 主要用途
deploy.yml INFRA 一次性部署核心链路(Infra/Node/Etcd/PGSQL,按配置启用 MINIO)
infra.yml INFRA 初始化基础设施节点
infra-rm.yml INFRA 移除基础设施组件
node.yml NODE 节点纳管与基线配置
node-rm.yml NODE 节点去纳管
etcd.yml ETCD ETCD 安装/扩容
etcd-rm.yml ETCD ETCD 移除/缩容
pgsql.yml PGSQL 初始化 PostgreSQL 集群或新增实例
pgsql-rm.yml PGSQL 移除 PostgreSQL 集群/实例
pgsql-user.yml PGSQL 增加业务用户
pgsql-db.yml PGSQL 增加业务数据库
pgsql-monitor.yml PGSQL 纳管远程 PostgreSQL 监控
pgsql-migration.yml PGSQL 生成迁移手册与脚本
pgsql-pitr.yml PGSQL 时间点恢复(PITR)
redis.yml REDIS Redis 部署
redis-rm.yml REDIS Redis 移除
minio.yml MINIO Silo 部署
minio-rm.yml MINIO 移除 Silo、配置与可选数据
docker.yml DOCKER Docker 引擎部署
juice.yml JUICE JuiceFS 实例部署/移除
vibe.yml VIBE VIBE 开发环境部署
kafka.yml KAFKA 创建或收敛完整的 dynamic KRaft 集群
kafka-rm.yml KAFKA 移除 Kafka 集群,或安全退役单个成员
mysql.yml MYSQL 收敛原生 MySQL 8.4 单节点或三节点 InnoDB Cluster(试点)
mysql-rm.yml MYSQL 停止/退役原生 MySQL 实例或集群并保留本地状态(试点)

辅助剧本

以下剧本不归属于特定模块,提供一些辅助功能。

剧本 说明
cache.yml 构建离线安装包缓存
cert.yml 使用 Pigsty CA 签发证书
app.yml 使用 Docker Compose 安装应用模板
slim.yml 最小化组件安装场景

剧本使用注意事项

保护机制

多个模块提供了防误删保险,通过 *_safeguard 参数控制:

PGSQL、ETCD、MINIO、REDIS 与 KAFKA 的角色默认值均显式为 false;生产环境可在已初始化的集群上设置为 true。原生 MySQL 试点相反:mysql_safeguard 默认是 true,且即使显式关闭,也必须提供与目标实例或集群完全一致的 mysql_rm_confirm

当保护开关设置为 true 时,对应的 *-rm.yml 剧本会立即中止执行,防止误删。可以通过命令行参数强制覆盖:

./pgsql-rm.yml -l pg-test -e pg_safeguard=false
./etcd-rm.yml  -l etcd -e etcd_safeguard=false
./minio-rm.yml -l minio   -e minio_type=silo -e minio_safeguard=false
./redis-rm.yml -l redis-test -e redis_safeguard=false
./kafka-rm.yml -l kf-main -e kafka_safeguard=false
./mysql-rm.yml -l my-test -e mysql_safeguard=false -e mysql_rm_confirm=my-test

限制执行范围

执行剧本时建议使用 -l 参数限制命令执行的对象范围:

./pgsql.yml -l pg-meta            # 限制在集群 pg-meta 上执行
./node.yml -l 10.10.10.10         # 限制在特定节点上执行
./redis.yml -l redis-test         # 限制在 redis-test 集群上执行

在大规模部署上批量执行时,建议先在单集群灰度验证,再分批执行到全局。

幂等性

大部分剧本都是幂等的,可以重复执行。但需要注意:

  • infra.yml 默认 不会 清除数据,可安全重复执行。所有 clean 参数(vmetrics_cleanvlogs_cleanvtraces_cleangrafana_cleannginx_clean)默认均为 false
  • 如需清除基础设施数据重建,需显式设置对应的 clean 参数为 true
  • 重复执行 *-rm.yml 删除剧本需格外小心,确保在正确的目标上执行

任务标签

可以使用 -t 参数只执行特定的任务子集:

./pgsql.yml -l pg-test -t pg_service    # 只刷新集群 pg-test 的服务
./node.yml -t haproxy                   # 只在节点上设置 haproxy
./etcd.yml -t etcd_launch               # 只重启 etcd 服务

常用命令速查

INFRA 模块

./deploy.yml                     # 一次性部署核心链路
./infra.yml                      # 初始化基础设施
./infra-rm.yml                   # 移除基础设施
./cache.yml -l <infra-host>      # 从指定 Infra 节点的现有仓库创建离线安装包
./cert.yml -e cn=<name>          # 签发客户端证书

NODE 模块

./node.yml -l <cls|ip>           # 添加节点
./node-rm.yml -l <cls|ip>        # 移除节点
bin/node-add <cls|ip>            # 添加节点 (包装脚本)
bin/node-rm <cls|ip>             # 移除节点 (包装脚本)

ETCD 模块

./etcd.yml                       # 初始化 etcd 集群
./etcd-rm.yml -l etcd            # 默认删除该集群的本机数据与配置
bin/etcd-add <ip>                # 添加 etcd 成员 (包装脚本)
bin/etcd-rm <ip>                 # 移除 etcd 成员 (包装脚本)

PGSQL 模块

./pgsql.yml -l <cls>             # 初始化 PostgreSQL 集群
./pgsql-rm.yml -l <cls>          # 移除 PostgreSQL 集群
./pgsql-user.yml -l <cls> -e username=<user>   # 创建业务用户
./pgsql-db.yml -l <cls> -e dbname=<db>         # 创建业务数据库
./pgsql-monitor.yml -e clsname=<cls>           # 监控远程集群
./pgsql-migration.yml -e@files/migration/<cls>.yml  # 生成迁移手册
./pgsql-pitr.yml -l <cls> -e '{"pg_pitr": {}}'      # 执行 PITR 恢复

bin/pgsql-add <cls>              # 初始化集群 (包装脚本)
bin/pgsql-rm <cls>               # 移除集群 (包装脚本)
bin/pgsql-user <cls> <user>      # 创建用户 (包装脚本)
bin/pgsql-db <cls> <db>          # 创建数据库 (包装脚本)
bin/pgsql-svc <cls>              # 刷新服务 (包装脚本)
bin/pgsql-hba <cls>              # 重载 HBA (包装脚本)
bin/pgmon-add <cls>              # 监控远程集群 (包装脚本)

REDIS 模块

./redis.yml -l <cls>             # 初始化 Redis 集群
./redis-rm.yml -l <cls>          # 移除 Redis 集群

MINIO 模块

./minio.yml -l <cls>                       # 初始化 MINIO 模块的 Silo 集群
./minio-rm.yml -l <cls> -e minio_type=silo # 移除 Silo;该值必须显式确认

DOCKER 模块

./docker.yml -l <host>           # 安装 Docker
./app.yml -e app=<name>          # 部署 Docker Compose 应用

KAFKA 模块

./kafka.yml -l <cls>             # 创建/收敛完整 Kafka 集群
./kafka.yml -l <cls> --check     # 只读预检
./kafka-rm.yml -l <cls>          # 移除完整集群
./kafka-rm.yml -l <ip>           # 从集群退役单个成员

普通收敛的 -l 必须包含所选 Kafka 集群的全部已声明成员;kafka-rm.yml 才支持选择单个成员执行退役。

MYSQL 试点模块

./mysql.yml -l <cls> --check
./mysql.yml -l <cls>             # 只接受完整的 1 或 3 成员集群范围
./mysql-rm.yml -l <instance> --check \
  -e mysql_safeguard=false -e mysql_rm_confirm=<instance>
./mysql-rm.yml -l <cls> \
  -e mysql_safeguard=false -e mysql_rm_confirm=<cls>

mysql-rm.yml 会停止服务、写入退役标记并注销监控,但不会删除数据目录、备份、配置、证书、软件包或 InnoDB Cluster 元数据。

6 - 端口列表

Pigsty 中各个组件使用的端口一览,以及相关的配置参数与组件状态。

以下为 Pigsty 中各模块组件使用的默认端口及其对应参数,您可以按需调整,或者作为内部防火墙精细配置的参考。

模块 组件 端口 参数 状态
NODE node_exporter 9100 node_exporter_port ✅ 默认启用
NODE haproxy 9101 haproxy_exporter_port ✅ 默认启用
NODE vector 9598 vector_port ✅ 默认启用
NODE keepalived_exporter 9650 vip_exporter_port ⚠️ 按需启用
NODE chronyd 123 - ✅ 默认启用
DOCKER docker 9323 docker_exporter_port ⚠️ 按需启用
INFRA nginx 80 nginx_port ✅ 默认启用
INFRA nginx 443 nginx_ssl_port ✅ 默认启用
INFRA nginx_exporter 9113 nginx_exporter_port ✅ 默认启用
INFRA grafana 3000 grafana_port ✅ 默认启用
INFRA victoriaMetrics 8428 vmetrics_port ✅ 默认启用
INFRA victoriaLogs 9428 vlogs_port ✅ 默认启用
INFRA victoriaTraces 10428 vtraces_port ✅ 默认启用
INFRA vmalert 8880 vmalert_port ✅ 默认启用
INFRA alertmanager 9059 alertmanager_port ✅ 默认启用
INFRA blackbox_exporter 9115 blackbox_port ✅ 默认启用
INFRA dnsmasq 53 dns_port ✅ 默认启用
ETCD etcd 2379 etcd_port ✅ 默认启用
ETCD etcd 2380 etcd_peer_port ✅ 默认启用
MINIO Silo S3 API 9000 minio_port ⚠️ 按需启用
MINIO Silo 管理端口 9001 minio_admin_port ⚠️ 按需启用
REDIS Redis / Valkey 6379 redis_instances ⚠️ 按需启用
REDIS redis_exporter 9121 redis_exporter_port ⚠️ 按需启用
VIBE code-server 8443 code_port ⚠️ 按需启用
VIBE jupyterlab 8888 jupyter_port ⚠️ 按需启用
KAFKA broker 9092 kafka_port 🧪 BETA
KAFKA KRaft controller 9093 kafka_controller_port 🧪 BETA
KAFKA kafka_exporter 9308 kafka_exporter_port 🧪 BETA
KAFKA JMX exporter 9404 kafka_jmx_exporter_port 🧪 BETA
MYSQL mysqld 3306 固定值(当前试点不提供端口参数) 🧪 PILOT
MYSQL MySQL X Protocol 33060 固定值;单节点仅绑定回环地址,三节点拓扑对成员地址监听 🧪 PILOT
MYSQL Group Replication 33061 固定值;仅三节点 InnoDB Cluster 🧪 PILOT
MYSQL MySQL Router RW 6446 固定值;仅三节点 InnoDB Cluster 🧪 PILOT
MYSQL MySQL Router RO 6447 固定值;仅三节点 InnoDB Cluster 🧪 PILOT
MYSQL mysqld_exporter 9104 固定值;受 mysql_exporter_enabled 控制 🧪 PILOT
PGSQL postgres 5432 pg_port ✅ 默认启用
PGSQL pgbouncer 6432 pgbouncer_port ✅ 默认启用
PGSQL patroni 8008 patroni_port ✅ 默认启用
PGSQL pg_exporter 9630 pg_exporter_port ✅ 默认启用
PGSQL pgbouncer_exporter 9631 pgbouncer_exporter_port ✅ 默认启用
PGSQL pgbackrest_exporter 9854 pgbackrest_exporter_port ✅ 默认启用
PGSQL {{ pg_cluster }}-primary 5433 pg_default_services ✅ 默认启用
PGSQL {{ pg_cluster }}-replica 5434 pg_default_services ✅ 默认启用
PGSQL {{ pg_cluster }}-default 5436 pg_default_services ✅ 默认启用
PGSQL {{ pg_cluster }}-offline 5438 pg_default_services ✅ 默认启用
PGSQL {{ pg_cluster }}-<service> 543x pg_services ⚠️ 按需启用

原生 MySQL 试点的 MySQL Shell AdminAPI 复用 3306,XtraBackup 由本机 Systemd 定时任务调用,没有独立监听端口;MySQL Router 的 REST 管理接口被角色显式禁用。上表只列出当前角色实际管理的网络入口。

公网开放端口建议

如果您使用防火墙 zone 模式,建议通过 node_firewall_public_port 仅开放最小必要端口:

  • 最小管理面:22, 80, 443(推荐)
  • 需要公网直连数据库:额外开放 5432

不建议直接对公网开放:etcd2379/2380)、patroni8008)、各类 exporter(9xxx)、对象存储 S3/管理端口(9000/9001)、redis6379)、ferretdb27017/27018)、Kafka(9092/9093)及 MySQL Group Replication(33061)等内部组件端口。

node_firewall_mode: zone
node_firewall_public_port: [22, 80, 443]
# node_firewall_public_port: [22, 80, 443, 5432]  # only if public DB access is required