节点、规格、磁盘、网络、VIP、域名...
这是本节的多页打印视图。 .
准备
支持的 Linux 操作系统发行版列表
区域设置、防火墙、Ansible、Pigsty...
用户、Sudo、SSH、可访问性...
您可以利用 IaC 工具如 Terraform 和 Vagrant 来帮助您准备环境并完成繁重的工作。
Ansible 101,pigsty 用户的基础知识
用于学习和测试的四节点沙盒
使用 vagrant 置备本地虚拟机
使用 terraform 置备云服务器
这里有一个检查清单,帮助您为生产环境中的严肃 Pigsty 部署准备环境。
| 项目 | 要求 | 项目 | 要求 |
|---|---|---|---|
| 节点 | 至少 1C1G,推荐 2C2G,无上限 |
规格 | 至少 1 个节点,2 个用于半高可用,3+ 个用于真正的高可用 |
| 磁盘 | /data,主挂载点,ext4 或 xfs |
网络 | 静态内网,IPv4 地址,最好有互联网访问 |
| VIP | 为 VIP 保留一个 L2 IP (可选) | 域名 | 使用本地 / 公共域名(可选) |
| 内核 | Linux,MacOS 可用作管理控制器 |
发行版 | EL (8/9)、Debian (12)、Ubuntu (22/24)、x86_64 / aarch64 |
| 区域设置 | C.UTF-8 或 C |
防火墙 | 端口:80 / 443 / 22 / 5432 |
| 用户 | 避免使用 root 和 postgres |
Sudo | nopass sudo 权限 |
| SSH | 通过公钥 nopass |
可访问 | ssh <ip|alias> sudo ls 有效 |
1 - 硬件置备
节点
Pigsty 目前运行在具有 Linux 内核和 x86_64 / aarch64 架构的节点上。
“节点” 指的是 SSH 可访问 且提供裸 Linux 操作系统环境的资源。
它可以是物理机、虚拟机或配备 systemd、sudo 和 sshd 的类似操作系统的容器。
部署 pigsty 至少需要 1 个节点,
您可以准备更多并在 一次性 中设置所有内容,或稍后添加它们。
最小节点规格要求是 1C1G,建议至少使用 2C2G。
越高越好,没有上限。参数将根据可用资源自动调优。
功能性 HA 设置至少需要 3 个节点才能工作,或使用 2 个节点进行半 HA 设置
规格
您需要多少个节点?这取决于您的资源和需求。
磁盘
Pigsty 将使用 /data 作为默认数据目录,如果您有专用的主数据磁盘,建议将其挂载到那里,
并为额外的磁盘驱动器使用 /data1、/data2、/dataN。
如果您将其挂载到别处,您必须相应地更改以下参数:
| 名称 | 描述 | 默认值 |
|---|---|---|
node_data |
节点主数据目录 | /data |
pg_fs_main |
postgres 主数据目录 | /data |
pg_fs_backup |
postgres 备份数据目录 | /data/backups |
etcd_data |
etcd 数据目录 | /data/etcd |
prometheus_data |
prometheus 数据目录 | /data/prometheus |
loki_data |
loki 数据目录 | /data/loki |
minio_data |
minio 数据目录 | /data/minio |
redis_fs_main |
redis 数据目录 | /data/redis |
我们建议使用 ext4 或 xfs 作为数据磁盘的文件系统。它们对 PostgreSQL 有最佳性能。
虽然 ext4 有更多的数据恢复工具,但 xfs 对小文件更高效。
如果您运行 MinIO,建议使用 xfs,否则,建议使用 ext4 作为默认选项。
Pigsty 的工作假设是 /data 目录属于 root:root,权限为 755。
管理员可以分配一级目录的所有权和权限。每个应用在其子目录中运行时将使用专用用户。
网络
Pigsty 需要静态网络才能工作,您应该为每个节点明确分配一个固定的 IPv4 地址。
在单节点安装中,如果没有固定 IP 地址,可以使用 127.0.0.1 作为变通方法。
IP 地址将用作节点的唯一标识符,它应该是绑定到用于内部网络通信的主网络接口的主 IP 地址。
使用公共 IP 地址作为节点标识符可能导致安全和连接问题。
要使用可选的节点 VIP 和 PG VIP 功能,请确保所有节点位于同一 L2 网络内
执行标准(在线)安装 时需要互联网访问。 但 pigsty 可以通过离线软件包进行 离线安装, 在这种情况下不需要互联网访问。
VIP
Pigsty 支持 NODE 集群(keepalived)和 PGSQL 集群(vip-manager)的可选 L2 VIP。
要使用 L2 VIP 功能,您必须为它们明确分配一个 L2 VIP。 在您自己的硬件上运行时这不是大问题, 但在公有云环境中工作时可能成为问题。
域名
Pigsty 为以下具有 WebUI 的服务使用本地静态域名。
您可以为这些服务分配自定义域名,或使用真实域名。
只需在 infra_portal 中更改它们。
| 域名 | 名称 | 端口 | 组件 | 描述 |
|---|---|---|---|---|
h.pigsty |
home |
80/443 | Nginx | 默认服务器,本地仓库 |
g.pigsty |
grafana |
3000 | Grafana | 监控和可视化 |
p.pigsty |
prometheus |
9058 | Prometheus | 时间序列数据库 |
a.pigsty |
alertmanager |
9059 | AlertManager | 告警聚合和路由 |
域名是可选的,要使用它们,用户有责任将以下记录添加到您的 /etc/hosts 文件(本地静态解析),
或将它们添加到您的 DNS 服务器/公共 DNS 供应商。
2 - Linux 系统
系统建议
Pigsty 推荐使用以下操作系统:RockyLinux 9.6, Ubuntu 24.04.2,与 Debian 12.11。
| 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
| RHEL9 / Rocky9 / Alma9 | x86_64 | el9.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| RHEL9 / Rocky9 / Alma9 | aarch64 | el9.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 (noble) |
x86_64 | u24.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Ubuntu 24.04 (noble) |
aarch64 | u24.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
x86_64 | d12.x86_64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
Debian 12 (bookworm) |
aarch64 | d12.aarch64 |
✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
EL
Pigsty 支持 EL 8/9/10 兼容系统(RHEL / Rocky / Alma / Anolis / CentOS …… ),推荐使用 RockyLinux 9.6。
| EL 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
| 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 | - |
RockyLinux 9.6 提供了完整的扩展插件支持,是 Pigsty 首要支持并推荐使用的 EL 系统版本。
EL 7 支持已经不再维护,如果您需要在过时系统上运行,考虑我们的专业服务。
Ubuntu
Pigsty v3.7 支持 Ubuntu 24.04 / 22.04,建议使用 24.04.2。
| Ubuntu 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
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 24.04 提供了完整的扩展插件支持,是 Pigsty 首要支持并推荐使用的 Linux 系统版本。
Debian
Pigsty 可运行于 Debian 13 / 12 / 11 上,建议使用 12.11。
| Debian 发行版 | 架构 | 系统代码 | PG18 | PG17 | PG16 | PG15 | PG14 | PG13 |
|---|---|---|---|---|---|---|---|---|
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 带有完整的扩展支持,是 Pigsty 首要支持并推荐使用的 Linux 系统版本。
Debian 11 支持已经不再维护,如果您需要在过时系统上运行,考虑我们的专业服务。
3 - 软件置备
Linux
Pigsty 运行在 Linux 操作系统上,它支持 14 种主流 Linux 发行版:兼容操作系统列表
我们推荐使用 RockyLinux 9.6、Debian 12.11 或 Ubuntu 24.04.5 作为默认操作系统选项。
您可以在 macOS 上安装 pigsty,并使用 ansible 从本地笔记本电脑发起控制。(用作管理节点)
但数据库/基础设施/节点/etcd 服务仍在 Linux 节点上运行。
我们强烈建议使用全新安装的操作系统环境,并将 en_US 设置为主要语言。
在使用其他主要语言时确保 en_US 区域设置可用:
Pigsty 不使用容器,主要组件针对特定发行版主版本打包。
请在单个部署中的所有节点上使用相同的操作系统主版本和次版本。
文件系统
Pigsty 建议使用 ext4 或 xfs 文件系统,两者在 PostgreSQL 用例上都有最好的性能表现。
如果您清楚知道自己在做什么,也可以考虑使用 zfs 这样的文件系统,但切勿使用 nfs 等网络文件系统运行数据库服务。
如果您需要使用到 MinIO,建议使用 xfs 文件系统,这是 MinIO 唯一推荐使用到文件系统。
它在大量小文件的场景中有更好的性能表现,但工具生态(例如数据恢复)略逊于 ext4。
如果您只是运行标准 PostgreSQL 服务,我们建议您默认使用 Linux ext4 文件系统。
防火墙
您的安全策略和防火墙设置应该允许访问所需的端口。
要访问 WebUI 服务,您必须允许 HTTP(80)/ HTTPS(443)访问。
要访问 PostgreSQL 数据库服务,您必须允许 postgres 的 5432 端口。
5432: PostgreSQL 数据库6432: Pgbouncer 连接池5433: PG 主要服务5434: PG 副本服务5436: PG 默认服务5438: PG 离线服务
如果您通过其他端口访问 postgres 服务,请相应地允许它们
在典型的公有云 VPS 设置中,端口 22/80/443/5432 通常是开放的。
直接向互联网暴露数据库服务端口是非常危险的。 如果您需要这样做,请考虑咨询 安全最佳实践 并谨慎进行。
在典型的生产设置中,端口 22/80/443 从 LAN / 跳板机向 DBA/OPS 开放。
其他端口从内网访问。您必须确保它们在内部开放:使用的端口。
Ansible
Pigsty 使用 Ansible 从管理节点发起对所有被管理节点的控制。
您不需要关心细节,ansible 在 Bootstrap 阶段安装。
Ansible 只在管理节点上需要,您可以在 macOS 上运行 ansible 将您的笔记本电脑用作管理节点。
Pigsty
(推荐)您可以使用以下方式获取并提取最新稳定版本的 pigsty 源代码:
要安装特定版本,将版本字符串作为第一个参数传递:
您也可以使用 git 从 GitHub 克隆 Pigsty 源代码仓库:
默认的 main 分支可能处于不稳定的开发状态,使用前请 git checkout v3.7.0。
您也可以从 GitHub Release Page 手动下载 pigsty 源代码(pigsty-<version>.tar.gz):
如果您的环境没有互联网访问,请考虑与源代码压缩包一起下载离线软件包并将其上传到您的节点。
详情请查看 离线安装。
4 - 管理用户
用户
Pigsty 需要一个在所有被管理节点上具有免密 ssh 和 sudo 权限的操作系统用户。
命名约定
通常我们会选择 dba 或 admin 这样的名称,
但避免使用 root 或 postgres:
虽然可能,但出于安全原因,不建议使用 root 作为管理员用户。
DBSU(默认为 postgres)不应该用作管理员用户。
这会导致意外的安全问题。
如果您使用不同的 dbsu 用户,也避免将其用作管理员用户。
提供密码
如果您可以接受每个 ssh 和 sudo 命令的密码提示,则免密要求是可选的。
创建管理员用户
在服务器置备阶段,用户/供应商有责任创建并交付这样的管理员用户。 但如果您没有这样的管理员用户,或者该用户受到限制,您可以使用 pigsty 本身创建一个:
假设您在节点上有 root 或现有的管理员用户,您可以使用 pigsty 本身创建管理员用户。
它将利用现有的管理员创建新的管理员用户。
它将创建由以下参数描述的专用 dba(uid=88)用户,
并正确配置 sudo / ssh。
| 名称 | 描述 | 默认值 |
|---|---|---|
node_admin_enabled |
启用节点管理员用户 | true |
node_admin_uid |
节点管理员用户的 uid | 88 |
node_admin_username |
节点管理员用户名 | dba |
Sudo 权限
所有 管理员用户 都应该在所有被管理节点上具有免密 sudo 权限。
如果您想从头开始配置具有免密 sudo 权限的管理员用户:
要手动允许用户执行免密 sudo 命令:
为您的管理员用户创建 sudoers 文件(假设是 vagrant,请替换为您选择的名称):
假设您的管理员用户名选择是 dba,那么 /etc/sudoers.d/dba 内容应该是
Ansible 依赖 sudo 在被管理节点上以 root 权限执行命令。
因此,在 sudo 不可用的环境中(比如在精简容器内),您可能需要先安装 sudo。
SSH
您的当前用户应该能够以相应的管理员用户身份免密 SSH 访问所有被管理节点。
您的当前用户可以是管理员用户本身,但不是必需的,只要您能以管理员用户身份 SSH。
SSH 配置是 Linux 101,但我们会在此处介绍基础知识,以防您不熟悉:
生成 SSH 密钥
如果您没有 SSH 密钥对,请生成一个
如果您没有密钥对,Pigsty 会在 bootstrap 阶段为您完成此操作。
复制 SSH 密钥
您需要将生成的公钥分发到远程(和本地)服务器,并将其放入
所有节点上管理员用户的 ~/.ssh/authorized_keys 文件中。
可以使用 ssh-copy-id 工具。
将公钥复制到所有被管理节点,使用 ssh-copy-id 或手动添加到 ~/.ssh/authorized_keys。
您可以使用 sshpass 工具直接传递密码而不提示,但这很危险:
使用别名
当无法直接 SSH 访问时(由于跳板机、其他端口、凭据等…),考虑:
在 ~/.ssh/config 中配置 SSH 别名,并在那里放置别名的自定义参数。
并在清单中引用别名,使用 ansible_host 指定真实的 SSH 别名。
SSH 参数可以直接在 ansible 中使用,详情请查看 Ansible Inventory Guide。
检查可访问性
您应该能够从管理节点通过当前用户免密 ssh 访问所有被管理节点。
远程用户(管理员用户)应该有权限运行免密 sudo 命令。
在管理节点上对所有被管理节点运行此命令:
如果没有密码提示或错误,免密 ssh/sudo 按预期工作。
5 - 沙箱环境
Pigsty 有一个沙盒,这是一个具有固定 IP 地址和其他标识符的 4 节点部署。
我们将使用它作为学习和测试目的的标准演示环境。

描述
沙盒由具有固定 IP 地址和身份的 4 个节点组成:
| ID | IP 地址 | NODE | PGSQL | 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-1 |
|||
| 4 | 10.10.10.13 |
node-3 |
pg-test-1 |
在 meta 节点上有一个主要的单例 PostgreSQL 集群:pg-meta,
它可以独立使用,还有一个可选的 L2 VIP 10.10.10.2 和集群 DNS pg-meta 绑定到它。
沙盒中还有三个额外的节点,组成一个 3 实例的 PostgreSQL HA 集群 pg-test。
有一个可选的 L2 VIP 10.10.10.3 和集群 DNS pg-test 绑定到集群领导者。
在 meta 节点上还有一个 1 节点的 etcd 集群和 1 节点的 minio 集群。
实现
您可以使用 Vagrant 创建本地沙盒,或使用 Terraform 创建云沙盒。
要使用本地 vagrant 模板:
要使用云 terraform 模板,请使用 spec/aliyun-full.tf 作为示例, 阿里云 4 节点沙盒模板适用于所有发行版和 amd/arm。
6 - Vagrant
Pigsty 需要 Linux 环境,您可以使用 Vagrant 轻松创建本地 linux 虚拟机。
您还需要一个虚拟机提供商,(比如笔记本电脑的 VirtualBox 和服务器的 libvirt)
入门
您可以在 macOS 上使用 homebrew 安装 vagrant、virtualbox、ansible:
您已准备就绪!使用 make 快捷方式创建虚拟机:
配置
您必须在启动前在 Vagrantfile 中定义虚拟机。
默认的 Vagrantfile 定义了一个 el9(bento/rockylinux-9)1 节点虚拟机,使用本地 virtualbox VM 提供商。
vagrant/spec/Vagrantfile
我们在 vagrant/spec 文件夹中有一系列预定义的 VM 规格
| 模板 | 节点 | 规格 | 注释 | 别名 |
|---|---|---|---|---|
| meta.rb | 1 节点 | 2c4g x 1 | 单节点元数据 | 开发箱 |
| dual.rb | 2 节点 | 1c2g x 2 | 双节点 | |
| trio.rb | 3 节点 | 1c2G x 3 | 三节点 | |
| full.rb | 4 节点 | 2c4g + 1c2g x 3 | 全功能 4 节点 | 沙盒 |
| simu.rb | 36 节点 | 杂项 | 生产环境模拟 | 模拟箱 |
| oss.rb | 3 节点 | 1c2g x 3 | 3 节点 OSS 构建环境 | |
| pro.rb | 5 节点 | 1c2g x 5 | 5 节点 PRO 构建环境 |
每个规格文件包含一个描述 VM 节点的 Specs 变量。例如,full.rb 包含:
您可以使用规格与 config 脚本,它将根据规格和环境变量(资源、镜像、vm 提供商等…)渲染 Vagrantfile。
您可以使用环境变量 VM_SCALE 扩展资源单位,默认值为 1。
例如,VM_SCALE=2 vagrant/config meta 将使 meta 规格的 cpu / mem 资源翻倍
快捷方式
配置后,您可以使用 vagrant up 命令创建虚拟机。
Pigsty 模板将使用您的 ~/.ssh/id_rsa[.pub] 作为 vagrant 置备的默认 ssh 密钥。
在开始之前确保您有有效的 ssh 密钥对,您可以通过以下方式生成一个:ssh-keygen -t rsa -b 2048
有一些包装 vagrant 命令的快捷方式,您可以使用它们来管理虚拟机。
版本
Pigsty 目前使用以下 vagrant 盒子进行测试:
它们并非都有 arm64 架构支持,所以在使用 Apple Silicon MacOS 时要注意。
您可以在 https://app.vagrantup.com/bento/boxes 上找到支持的 Box 镜像
注意事项
当使用较旧版本的 virtualbox 作为 vagrant 提供商时,需要额外设置才能使用默认的 10.x.x.x CIDR 作为仅主机网络:将其添加到 /etc/vbox/networks.conf
7 - Terraform
Terraform 是一个流行的 IaC 工具。您可以使用一个命令在公有云上创建虚拟机。
阿里云和 AWS 模板用作示例提供商。您可以将 terraform.tf 作为示例。
入门
您可以在 macOS 上使用 homebrew 安装 terraform
然后初始化 terraform 云提供商,调整 terraform.tf 配置文件并应用它:
打印公共 IP 地址:
AWS 设置
您必须设置 aws 配置和凭据才能使用 AWS 提供商。
有一个 AWS(Amazon Web Services)的贡献示例,但它没有得到积极维护。
- spec/aws-cn.tf : AWS 4 节点 CentOS7 环境
阿里云设置
您可以将您的阿里云凭据添加到环境文件中,例如 ~/.bash_profile
示例配置文件:
- spec/aliyun-meta.tf : 阿里云 1 元节点模板,适用于所有发行版和 amd/arm(默认)
- spec/aliyun-full.tf : 阿里云 4 节点沙盒模板,适用于所有发行版和 amd/arm。
- spec/aliyun-oss.tf : 阿里云 5 节点构建模板,适用于所有发行版和 amd/arm。
以下是阿里云中使用的示例 ECS 公共操作系统镜像:
| 发行版 | 镜像前缀 | 镜像前缀 |
|---|---|---|
| CentOS 7.9 | centos_7_9_x64 |
rockylinux_8_10_arm6 |
| Rocky 8.10 | rockylinux_8_10_x64 |
rockylinux_9_6_arm64 |
| Rocky 9.6 | rockylinux_9_5_x64 |
|
| Debian 11.11 | debian_11_11_x64 |
|
| Debian 12.11 | debian_12_11_x64 |
debian_12_11_arm64 |
| Ubuntu 20.04 | ubuntu_20_04_x64 |
|
| Ubuntu 22.04 | ubuntu_22_04_x64 |
ubuntu_22_04_arm64 |
| Ubuntu 24.04 | ubuntu_24_04_x64 |
ubuntu_24_04_arm64 |
| Anolis 8.8 | anolisos_8_9_x64 |
腾讯云设置
有一个腾讯云的贡献示例,但它没有得到积极维护。
- spec/tencentcloud.tf : 腾讯云 4 节点 CentOS7 环境