这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

参考

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

1 - Linux 兼容性

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

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

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

概述

Pigsty 推荐使用的操作系统版本:RockyLinux 10.1、Ubuntu 24.04.4、Debian 13.3。

发行版架构系统代码PG18PG17PG16PG15PG14PG13
RHEL / Rocky / Alma 10x86_64el10.x86_64
RHEL / Rocky / Alma 10aarch64el10.aarch64
Ubuntu 24.04 (noble)x86_64u24.x86_64
Ubuntu 24.04 (noble)aarch64u24.aarch64
Debian 13 (trixie)x86_64d13.x86_64
Debian 13 (trixie)aarch64d13.aarch64

EL

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

EL 发行版架构系统代码PG18PG17PG16PG15PG14PG13
RHEL10 / Rocky10 / Alma10x86_64el10.x86_64
RHEL10 / Rocky10 / Alma10aarch64el10.aarch64
RHEL9 / Rocky9 / Alma9x86_64el9.x86_64
RHEL9 / Rocky9 / Alma9aarch64el9.aarch64
RHEL8 / Rocky8 / Alma8x86_64el8.x86_64
RHEL8 / Rocky8 / Alma8aarch64el8.aarch64
RHEL7 / CentOS7x86_64el7.x86_64
RHEL7 / CentOS7aarch64-

Ubuntu

Pigsty 支持 Ubuntu 24.04 / 22.04:

Ubuntu 发行版架构系统代码PG18PG17PG16PG15PG14PG13
Ubuntu 24.04 (noble)x86_64u24.x86_64
Ubuntu 24.04 (noble)aarch64u24.aarch64
Ubuntu 22.04 (jammy)x86_64u22.x86_64
Ubuntu 22.04 (jammy)aarch64u22.aarch64
Ubuntu 20.04 (focal)x86_64u20.x86_64
Ubuntu 20.04 (focal)aarch64-

Debian

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

Debian 发行版架构系统代码PG18PG17PG16PG15PG14PG13
Debian 13 (trixie)x86_64d13.x86_64
Debian 13 (trixie)aarch64d13.aarch64
Debian 12 (bookworm)x86_64d12.x86_64
Debian 12 (bookworm)aarch64d12.aarch64
Debian 11 (bullseye)x86_64d11.x86_64
Debian 11 (bullseye)aarch64-

Vagrant

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

系统镜像
AlmaLinux 8.10cloud-image/almalinux-8
Rocky 9.7bento/rockylinux-9
AlmaLinux 10.1cloud-image/almalinux-10
Debian 12.13cloud-image/debian-12
Debian 13.3cloud-image/debian-13
Ubuntu 22.04.5cloud-image/ubuntu-22.04
Ubuntu 24.04.4bento/ubuntu-24.04

Terraform

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

x86_64镜像
Rocky 8.10rockylinux_8_10_x64_20G_alibase_20240923.vhd
Rocky 9.7rockylinux_9_7_x64_20G_alibase_20260119.vhd
Rocky 10.1rockylinux_10_1_x64_20G_alibase_20260119.vhd
Ubuntu 22.04.5ubuntu_22_04_x64_20G_alibase_20240926.vhd
Ubuntu 24.04.4ubuntu_24_04_x64_20G_alibase_20240923.vhd
Debian 12.13debian_12_13_x64_20G_alibase_20241201.vhd
Debian 13.3debian_13_3_x64_20G_alibase_20250101.vhd
aarch64镜像
Rocky 8.10rockylinux_8_10_arm64_20G_alibase_20251120.vhd
Rocky 9.7rockylinux_9_7_arm64_20G_alibase_20260119.vhd
Rocky 10.1rockylinux_10_1_arm64_20G_alibase_20260119.vhd
Ubuntu 22.04.5ubuntu_22_04_arm64_20G_alibase_20251126.vhd
Ubuntu 24.04.4ubuntu_24_04_arm64_20G_alibase_20251126.vhd
Debian 12.13debian_12_13_arm64_20G_alibase_20250825.vhd
Debian 13.3debian_13_3_arm64_20G_alibase_20251121.vhd

2 - 模块列表

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

正式模块

模块类别状态文档入口简介
PGSQL核心GA/docs/pgsql高可用 PostgreSQL 集群,内置备份、监控、SOP 与扩展生态。
INFRA核心GA/docs/infra本地软件仓库 + VictoriaMetrics/Logs/Traces + Grafana 等基础设施。
NODE核心GA/docs/node节点初始化与收敛:系统调优、管理员、HAProxy、Vector、Docker 等。
ETCD核心GA/docs/etcdPostgreSQL 高可用 DCS(服务发现、配置、选主元数据)。
MINIO扩展GA/docs/minioS3 兼容对象存储,可作为 PostgreSQL 备份仓库。
REDIS扩展GA/docs/redisRedis 独立/哨兵/集群模式部署与监控。
FERRET扩展GA/docs/ferretFerretDB 模块(MONGO API 兼容),为 PG 提供 MongoDB 协议访问。
DOCKER扩展GA/docs/dockerDocker Daemon 及容器化应用运行基础能力。
JUICE扩展BETA/docs/juiceJuiceFS 分布式文件系统,使用 PostgreSQL 作为元数据引擎。
VIBE扩展BETA/docs/vibe浏览器化开发环境,集成 Code-Server、JupyterLab、Node.js 与 Claude Code。

核心模块

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

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

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


扩展模块

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

  • MINIO:S3 兼容的简单对象存储服务器,可作为可选的 PostgreSQL 数据库备份仓库,带有生产部署支持与监控。
  • REDIS:Redis 服务器,高性能数据结构服务器,支持独立主从、哨兵、集群模式生产部署,并带有完善的监控支持。
  • MONGO:FerretDB 原生部署支持 —— 它为 PostgreSQL 添加了 MongoDB 线缆协议级别的 API 兼容支持!
  • DOCKER:Docker Daemon 服务,允许用户一键拉起容器化的无状态软件工具模板,为 Pigsty 加装各种功能!
  • JUICE:JuiceFS 分布式文件系统模块,以 PostgreSQL 作为元数据引擎,提供可共享的 POSIX 存储能力。
  • VIBE:浏览器化开发环境模块,集成 Code-Server、JupyterLab、Node.js 与 Claude Code,开箱即用。

生态模块

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

3 - 文件结构

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

Pigsty FHS

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

#------------------------------------------------------------------------------
# pigsty
#  ^-----@app                    # 额外的示例应用资源
#  ^-----@bin                    # bin 脚本
#  ^-----@docs                   # 文档(可docsify化)
#  ^-----@files                  # ansible 文件资源
#            ^-----@victoria     # Victoria 规则与运维脚本(bin/rules)
#            ^-----@grafana      # grafana 仪表盘
#            ^-----@postgres     # /pg/bin/ 脚本
#            ^-----@migration    # pgsql 迁移任务定义
#            ^-----@pki          # 自签名 CA 和证书
#  ^-----@roles                  # ansible 剧本实现
#  ^-----@templates              # ansible 模板文件
#  ^-----@vagrant                # Vagrant 沙箱虚拟机定义模板
#  ^-----@terraform              # Terraform 云虚拟机申请模板
#  ^-----configure               # 配置向导脚本
#  ^-----ansible.cfg             # ansible 默认配置文件
#  ^-----pigsty.yml              # pigsty 默认配置文件
#  ^-----*.yml                   # ansible 剧本
#------------------------------------------------------------------------------
# /infra -> /data/infra          # infra 运行时目录软链接
# /data/infra                    # root:infra 0771
#  ^-----@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 服务器证书
#  ^-----@mongo                              # (local_user) 0755,mongodb/ferretdb 服务器证书
#  ^-----@mysql                              # (local_user) 0755,mysql 服务器证书(占位符)

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

/etc/pki/ca.crt                             # root:root 0644,所有节点都添加的根证书
/etc/pki/ca-trust/source/anchors/ca.crt     # 软链接到系统受信任的锚点

所有 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)
#            ^-----@mongo                  # mongo 目标(文件 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

每个组件的默认数据目录都位于这个数据库目录下,如下所示:

/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 数据目录)
#  ^-----@...                         # 其他组件的数据目录

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 静态目标
#            ^-----@mongo            # mongo 静态目标
#            ^-----@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)

Postgres FHS

以下参数与PostgreSQL数据库目录结构相关:

  • pg_dbsu_home: Postgres 默认用户的家目录,默认为/var/lib/pgsql
  • pg_bin_dir: Postgres二进制目录,默认为/usr/pgsql/bin/
  • pg_data:Postgres数据库目录,默认为/pg/data
  • pg_fs_main:Postgres主数据目录,默认为/data/postgres
  • pg_fs_backup:Postgres 备份盘挂载点,默认为 /data/backups(可选,也可以选择备份到主数据盘上的子目录)
  • 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

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 维护)

Redis FHS

Pigsty 提供了对 Redis 部署与监控的基础支持。

Redis 二进制通常由系统包管理器安装(服务调用路径为 /bin/*,在多数发行版上由 /usr/bin/* 软链接兼容):

redis-server    
redis-cli       
redis-sentinel  
redis-check-rdb 
redis-check-aof 
redis-benchmark 
/usr/libexec/redis-shutdown

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

/usr/lib/systemd/system/redis-test-1-6379.service     # root:root 0644(Debian系为 /lib/systemd/system)
/etc/redis/                                           # redis:redis 0700
/etc/redis/redis-test-1-6379.conf                     # redis:redis 0700
/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

对于 Ubuntu / Debian 而言,systemd 服务的默认目录不是 /usr/lib/systemd/system/ 而是 /lib/systemd/system/

4 - 参数列表

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

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

按照当前文档口径,正式模块合计约 360 个参数,分布在 10 个模块中。


模块参数导航

模块参数组参数量说明
PGSQL9125PostgreSQL 高可用集群配置
INFRA1072软件仓库与 Victoria 可观测基础设施
NODE1173节点初始化、系统调优与运维基线
ETCD213ETCD 集群与移除保护参数
MINIO221MinIO 部署与移除参数
REDIS221Redis 部署与移除参数
FERRET19FerretDB(Mongo API)参数
DOCKER18Docker 引擎参数
JUICE12JuiceFS 实例与缓存参数
VIBE116Code/Jupyter/Node.js/Claude 配置

参数组速览

模块主要参数组
PGSQLPG_IDPG_BUSINESSPG_INSTALLPG_BOOTSTRAPPG_PROVISIONPG_BACKUPPG_ACCESSPG_MONITORPG_REMOVE
INFRAMETACAINFRA_IDREPOINFRA_PACKAGENGINXDNSVICTORIAPROMETHEUSGRAFANA
NODENODE_IDNODE_DNSNODE_PACKAGENODE_TUNENODE_SECNODE_ADMINNODE_TIMENODE_VIP
HAPROXYNODE_EXPORTERVECTOR
ETCDETCDETCD_REMOVE
MINIOMINIOMINIO_REMOVE
REDISREDISREDIS_REMOVE
FERRETFERRET
DOCKERDOCKER
JUICEJUICE
VIBEVIBE

使用建议

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

5 - 剧本列表

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

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

模块剧本导航

模块数量剧本
INFRA3deploy.yml infra.yml infra-rm.yml
NODE2node.yml node-rm.yml
ETCD2etcd.yml etcd-rm.yml
PGSQL7pgsql.yml pgsql-rm.yml
pgsql-user.yml pgsql-db.yml
pgsql-monitor.yml pgsql-migration.yml pgsql-pitr.yml
REDIS2redis.yml redis-rm.yml
MINIO2minio.yml minio-rm.yml
FERRET1mongo.yml
DOCKER1docker.yml
JUICE1juice.yml
VIBE1vibe.yml

剧本总表

剧本模块主要用途
deploy.ymlINFRA一次性部署核心链路(Infra/Node/Etcd/PGSQL,按配置启用 MinIO)
infra.ymlINFRA初始化基础设施节点
infra-rm.ymlINFRA移除基础设施组件
node.ymlNODE节点纳管与基线配置
node-rm.ymlNODE节点去纳管
etcd.ymlETCDETCD 安装/扩容
etcd-rm.ymlETCDETCD 移除/缩容
pgsql.ymlPGSQL初始化 PostgreSQL 集群或新增实例
pgsql-rm.ymlPGSQL移除 PostgreSQL 集群/实例
pgsql-user.ymlPGSQL增加业务用户
pgsql-db.ymlPGSQL增加业务数据库
pgsql-monitor.ymlPGSQL纳管远程 PostgreSQL 监控
pgsql-migration.ymlPGSQL生成迁移手册与脚本
pgsql-pitr.ymlPGSQL时间点恢复(PITR)
redis.ymlREDISRedis 部署
redis-rm.ymlREDISRedis 移除
minio.ymlMINIOMinIO 部署
minio-rm.ymlMINIOMinIO 移除
mongo.ymlFERRETFerretDB(Mongo API)部署
docker.ymlDOCKERDocker 引擎部署
juice.ymlJUICEJuiceFS 实例部署/移除
vibe.ymlVIBEVIBE 开发环境部署

辅助剧本

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

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

剧本使用注意事项

保护机制

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

默认情况下,这些 safeguard 参数均未启用(未定义)。建议在生产环境中为已初始化的集群显式设置为 true

当保护开关设置为 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_safeguard=false

限制执行范围

执行剧本时建议使用 -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                     # 一次性完整部署 Pigsty
./infra.yml                      # 初始化基础设施
./infra-rm.yml                   # 移除基础设施
./cache.yml                      # 从现有仓库创建离线安装包
./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                    # 移除 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 集群
./minio-rm.yml -l <cls>          # 移除 MinIO 集群

FERRET 模块

./mongo.yml -l ferret            # 安装 FerretDB

DOCKER 模块

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

6 - 端口列表

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

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

模块组件端口参数状态
NODEnode_exporter9100node_exporter_port✅ 默认启用
NODEhaproxy9101haproxy_exporter_port✅ 默认启用
NODEvector9598vector_port✅ 默认启用
NODEkeepalived_exporter9650vip_exporter_port⚠️ 按需启用
NODEchronyd123-✅ 默认启用
DOCKERdocker9323docker_exporter_port⚠️ 按需启用
INFRAnginx80nginx_port✅ 默认启用
INFRAnginx443nginx_ssl_port✅ 默认启用
INFRAnginx_exporter9113nginx_exporter_port✅ 默认启用
INFRAgrafana3000grafana_port✅ 默认启用
INFRAvictoriaMetrics8428vmetrics_port✅ 默认启用
INFRAvictoriaLogs9428vlogs_port✅ 默认启用
INFRAvictoriaTraces10428vtraces_port✅ 默认启用
INFRAvmalert8880vmalert_port✅ 默认启用
INFRAalertmanager9059alertmanager_port✅ 默认启用
INFRAblackbox_exporter9115blackbox_port✅ 默认启用
INFRAdnsmasq53dns_port✅ 默认启用
ETCDetcd2379etcd_port✅ 默认启用
ETCDetcd2380etcd_peer_port✅ 默认启用
MINIOminio9000minio_port✅ 默认启用
MINIOminio9001minio_admin_port✅ 默认启用
REDISredis6379redis_instances⚠️ 按需启用
REDISredis_exporter9121redis_exporter_port⚠️ 按需启用
FERRETferretdb27017mongo_port⚠️ 按需启用
FERRETferretdb (TLS)27018mongo_ssl_port⚠️ 按需启用
FERRETmongo_exporter9216mongo_exporter_port✅ 默认启用
VIBEcode-server8443code_port⚠️ 按需启用
VIBEjupyterlab8888jupyter_port⚠️ 按需启用
PGSQLpostgres5432pg_port✅ 默认启用
PGSQLpgbouncer6432pgbouncer_port✅ 默认启用
PGSQLpatroni8008patroni_port✅ 默认启用
PGSQLpg_exporter9630pg_exporter_port✅ 默认启用
PGSQLpgbouncer_exporter9631pgbouncer_exporter_port✅ 默认启用
PGSQLpgbackrest_exporter9854pgbackrest_exporter_port✅ 默认启用
PGSQL{{ pg_cluster }}-primary5433pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-replica5434pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-default5436pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-offline5438pg_default_services✅ 默认启用
PGSQL{{ pg_cluster }}-<service>543xpg_services⚠️ 按需启用

公网开放端口建议

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

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

不建议直接对公网开放:etcd2379/2380)、patroni8008)、各类 exporter(9xxx)、minio9000/9001)、redis6379)、ferretdb27017/27018)等内部组件端口。

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