跳转到主要内容

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

返回本页常规视图.

准备

为严肃的部署准备资源
硬件
    节点、规格、磁盘、网络、VIP、域名...
Linux 操作系统
    支持的 Linux 操作系统发行版列表
软件
    区域设置、防火墙、Ansible、Pigsty...
管理员
    用户、Sudo、SSH、可访问性...

您可以利用 IaC 工具如 TerraformVagrant 来帮助您准备环境并完成繁重的工作。

Ansible
    Ansible 101,pigsty 用户的基础知识
沙盒
    用于学习和测试的四节点沙盒
Vagrant
    使用 vagrant 置备本地虚拟机
Terraform
    使用 terraform 置备云服务器

这里有一个检查清单,帮助您为生产环境中的严肃 Pigsty 部署准备环境。

项目 要求 项目 要求
节点 至少 1C1G,推荐 2C2G,无上限 规格 至少 1 个节点,2 个用于半高可用,3+ 个用于真正的高可用
磁盘 /data,主挂载点,ext4xfs 网络 静态内网,IPv4 地址,最好有互联网访问
VIP 为 VIP 保留一个 L2 IP (可选 域名 使用本地 / 公共域名(可选
内核 Linux,MacOS 可用作管理控制器 发行版 EL (8/9)、Debian (12)、Ubuntu (22/24)、x86_64 / aarch64
区域设置 C.UTF-8C 防火墙 端口:80 / 443 / 22 / 5432
用户 避免使用 rootpostgres Sudo nopass sudo 权限
SSH 通过公钥 nopass 可访问 ssh <ip|alias> sudo ls 有效

1 - 硬件置备

节点、规格、磁盘、网络、VIP、域名…

节点

Pigsty 目前运行在具有 Linux 内核和 x86_64 / aarch64 架构的节点上。

节点” 指的是 SSH 可访问 且提供裸 Linux 操作系统环境的资源。 它可以是物理机、虚拟机或配备 systemdsudosshd 的类似操作系统的容器。

部署 pigsty 至少需要 1 个节点, 您可以准备更多并在 一次性 中设置所有内容,或稍后添加它们。 最小节点规格要求是 1C1G,建议至少使用 2C2G。 越高越好,没有上限。参数将根据可用资源自动调优。

生产部署使用多个节点

功能性 HA 设置至少需要 3 个节点才能工作,或使用 2 个节点进行半 HA 设置


规格

您需要多少个节点?这取决于您的资源和需求。

单节点设置

最简单的设置,所有内容都在单个节点上运行,安装四个基本模块:

ID NODE PGSQL INFRA ETCD
1 node-1 pg-meta-1 infra-1 etcd-1

如果为备份/PITR 配置了外部 S3/MinIO,此设置可用于生产。

双节点设置

双节点设置启用数据库复制和半 HA 功能:

ID NODE PGSQL INFRA ETCD
1 node-1 pg-meta-1 (主节点) infra-1 etcd-1
2 node-2 pg-meta-2 (副本)

虽然比单节点设置更强大,但 HA 有限制:

  • 如果 node-1 故障,无自动故障转移 - 需要手动提升 node-2
  • 如果 node-2 故障,自动故障转移有效 - node-1 自动提升

这种"半 HA"设置只能从特定节点故障中自动恢复。

三节点设置

真正的 HA 设置,可以从任何单个节点故障中自动恢复:

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
四节点设置

Pigsty 沙盒 使用的标准演示环境:

ID NODE PGSQL INFRA ETCD
1 node-1 pg-meta-1 infra-1 etcd-1
2 node-2 pg-test-1 etcd-2
3 node-3 pg-test-2 etcd-3
4 node-4 pg-test-3

磁盘

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

我们建议使用 ext4xfs 作为数据磁盘的文件系统。它们对 PostgreSQL 有最佳性能。

虽然 ext4 有更多的数据恢复工具,但 xfs 对小文件更高效。 如果您运行 MinIO,建议使用 xfs,否则,建议使用 ext4 作为默认选项。

Pigsty 的工作假设是 /data 目录属于 root:root,权限为 755。 管理员可以分配一级目录的所有权和权限。每个应用在其子目录中运行时将使用专用用户。


网络

Pigsty 需要静态网络才能工作,您应该为每个节点明确分配一个固定的 IPv4 地址。

没有固定 IP?

在单节点安装中,如果没有固定 IP 地址,可以使用 127.0.0.1 作为变通方法。

IP 地址将用作节点的唯一标识符,它应该是绑定到用于内部网络通信的主网络接口的主 IP 地址。

永远不要使用公共 IP 作为标识符

使用公共 IP 地址作为节点标识符可能导致安全和连接问题。

L2 VIP 需要 L2 网络

要使用可选的节点 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 供应商。

10.10.10.10 h.pigsty g.pigsty p.pigsty a.pigsty

2 - Linux 系统

与 Pigsty 兼容的 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 9.6
推荐使用 Debian 12.11
推荐使用 Ubuntu 24.04.2

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

RockyLinux 9.6 提供了完整的扩展插件支持,是 Pigsty 首要支持并推荐使用的 EL 系统版本。

EL 7 EOL

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.2 LTS

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.11

Debian 12 带有完整的扩展支持,是 Pigsty 首要支持并推荐使用的 Linux 系统版本。

Debian 11 支持

Debian 11 支持已经不再维护,如果您需要在过时系统上运行,考虑我们的专业服务。

3 - 软件置备

区域设置、防火墙、Ansible、Pigsty…

Linux

Pigsty 运行在 Linux 操作系统上,它支持 14 种主流 Linux 发行版:兼容操作系统列表

我们推荐使用 RockyLinux 9.6Debian 12.11Ubuntu 24.04.5 作为默认操作系统选项。

在 macOS 上运行 pigsty?

您可以在 macOS 上安装 pigsty,并使用 ansible 从本地笔记本电脑发起控制。(用作管理节点) 但数据库/基础设施/节点/etcd 服务仍在 Linux 节点上运行。

我们强烈建议使用全新安装的操作系统环境,并将 en_US 设置为主要语言。

如何启用 en_US 区域设置?

在使用其他主要语言时确保 en_US 区域设置可用:

localedef -i en_US -f UTF-8 en_US.UTF-8
localectl set-locale LANG=en_US.UTF-8

Pigsty 使用容器,主要组件针对特定发行版主版本打包。

在所有节点上使用相同的操作系统版本

请在单个部署中的所有节点上使用相同的操作系统主版本和次版本。


文件系统

Pigsty 建议使用 ext4xfs 文件系统,两者在 PostgreSQL 用例上都有最好的性能表现。 如果您清楚知道自己在做什么,也可以考虑使用 zfs 这样的文件系统,但切勿使用 nfs 等网络文件系统运行数据库服务。

如果您需要使用到 MinIO,建议使用 xfs 文件系统,这是 MinIO 唯一推荐使用到文件系统。 它在大量小文件的场景中有更好的性能表现,但工具生态(例如数据恢复)略逊于 ext4

如果您只是运行标准 PostgreSQL 服务,我们建议您默认使用 Linux ext4 文件系统。


防火墙

您的安全策略和防火墙设置应该允许访问所需的端口。

要访问 WebUI 服务,您必须允许 HTTP(80)/ HTTPS(443)访问。

要访问 PostgreSQL 数据库服务,您必须允许 postgres 的 5432 端口。

您可以通过其他端口访问 postgres 服务
  • 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
sudo apt install -y ansible python3-jmespath
sudo dnf install -y ansible python3-jmespath
sudo dnf install -y ansible python3.12-jmespath
sudo yum install -y ansible python-jmespath
brew install ansible
pip3 install jmespath

Ansible 只在管理节点上需要,您可以在 macOS 上运行 ansible 将您的笔记本电脑用作管理节点。


Pigsty

推荐)您可以使用以下方式获取并提取最新稳定版本的 pigsty 源代码:

curl -fsSL https://repo.pigsty.io/get | bash -s v3.7.0; cd ~/pigsty
curl -fsSL https://repo.pigsty.cc/get | bash -s v3.7.0; cd ~/pigsty   # 中国镜像

要安装特定版本,将版本字符串作为第一个参数传递:

curl -fsSL https://repo.pigsty.io/get | bash -s v3.7.0; cd ~/pigsty
curl -fsSL https://repo.pigsty.cc/get | bash -s v3.7.0; cd ~/pigsty # 中国镜像

您也可以使用 gitGitHub 克隆 Pigsty 源代码仓库:

克隆最新版本
git clone https://github.com/pgsty/pigsty.git; cd ~/pigsty; git checkout v3.7.0
使用前检出特定版本

默认的 main 分支可能处于不稳定的开发状态,使用前请 git checkout v3.7.0

$ curl -fssL https://repo.pigsty.cc/get | bash -s v3.7.0
[v3.7.0] ===========================================
$ curl -fsSL https://repo.pigsty.cc/get | bash -s v3.7.0
[Docs] https://doc.pgsty.com
[Demo] https://g.pgsty.com
[Repo] https://github.com/pgsty/pigsty
[Download] ===========================================
[ OK ] version = v3.7.0 (from arg)
curl -fSL https://repo.pigsty.cc/src/pigsty-v3.7.0.tgz -o /tmp/pigsty-v3.7.0.tgz
[WARN] tarball = /tmp/pigsty-v3.7.0.tgz exists, size = 1472486, use it
[ OK ] md5sums = df64ac0c2b5aab39dd29698a640daf2e  /tmp/pigsty-v3.7.0.tgz
[Install] ===========================================
[ OK ] install = /home/vagrant/pigsty, from /tmp/pigsty-v3.7.0.tgz
[Bootstrap] ===========================================
[ OK ] ansible = ready
[ OK ] bootstrap = skip
you can run ./bootstrap to extrac offline package and install ansible
[TodoList] ===========================================
cd /home/vagrant/pigsty
./configure      # [可选] 预检和配置生成
./install.yml    # 部署配置描述的所有内容

您也可以从 GitHub Release Page 手动下载 pigsty 源代码(pigsty-<version>.tar.gz):

wget https://repo.pigsty.io/src/pigsty-v3.7.0.tgz
wget https://pigsty.cc/pgsty/pigsty/releases/download/v3.7.0/pigsty-v3.7.0.tgz
wget https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-v3.7.0.tgz

如果您的环境没有互联网访问,请考虑与源代码压缩包一起下载离线软件包并将其上传到您的节点。

详情请查看 离线安装

4 - 管理用户

用户、区域设置、Sudo、SSH、可访问性…

用户

Pigsty 需要一个在所有被管理节点上具有免密 sshsudo 权限的操作系统用户


命名约定

通常我们会选择 dbaadmin 这样的名称, 但避免使用 rootpostgres

避免使用 root 用户

虽然可能,但出于安全原因,不建议使用 root 作为管理员用户。

不要使用 postgres dbsu 作为管理员用户

DBSU(默认为 postgres不应该用作管理员用户。 这会导致意外的安全问题。

如果您使用不同的 dbsu 用户,也避免将其用作管理员用户。


提供密码

如果您可以接受每个 sshsudo 命令的密码提示,则免密要求是可选的。

使用密码提示运行 playbook

您可以在运行 playbook 时使用 -k|--ask-pass 来提示输入 ssh 密码。

并使用 -K|--ask-become-pass 来提示输入 sudo 密码。

./install.yml -k -K

创建管理员用户

在服务器置备阶段,用户/供应商有责任创建并交付这样的管理员用户。 但如果您没有这样的管理员用户,或者该用户受到限制,您可以使用 pigsty 本身创建一个:

使用 pigsty 创建管理员用户

假设您在节点上有 root 或现有的管理员用户,您可以使用 pigsty 本身创建管理员用户。

./node.yml -k -K -t node_admin -e ansible_user=[existing_admin_user]

它将利用现有的管理员创建新的管理员用户。 它将创建由以下参数描述的专用 dba(uid=88)用户, 并正确配置 sudo / ssh。

名称 描述 默认值
node_admin_enabled 启用节点管理员用户 true
node_admin_uid 节点管理员用户的 uid 88
node_admin_username 节点管理员用户名 dba

Sudo 权限

所有 管理员用户 都应该在所有被管理节点上具有免密 sudo 权限。

如果您想从头开始配置具有免密 sudo 权限的管理员用户:

允许免密 sudo

要手动允许用户执行免密 sudo 命令:

为您的管理员用户创建 sudoers 文件(假设是 vagrant,请替换为您选择的名称):

echo '%vagrant ALL=(ALL) NOPASSWD: ALL' | sudo tee /etc/sudoers.d/vagrant

假设您的管理员用户名选择是 dba,那么 /etc/sudoers.d/dba 内容应该是

%dba ALL=(ALL) NOPASSWD: ALL

Ansible 依赖 sudo 在被管理节点上以 root 权限执行命令。 因此,在 sudo 不可用的环境中(比如在精简容器内),您可能需要先安装 sudo


SSH

您的当前用户应该能够以相应的管理员用户身份免密 SSH 访问所有被管理节点。

您的当前用户可以是管理员用户本身,但不是必需的,只要您能以管理员用户身份 SSH。

SSH 配置是 Linux 101,但我们会在此处介绍基础知识,以防您不熟悉:


生成 SSH 密钥

如果您没有 SSH 密钥对,请生成一个

生成 SSH 密钥
ssh-keygen -t rsa -b 2048 -N '' -f ~/.ssh/id_rsa -q

如果您没有密钥对,Pigsty 会在 bootstrap 阶段为您完成此操作。


复制 SSH 密钥

您需要将生成的公钥分发到远程(和本地)服务器,并将其放入 所有节点上管理员用户的 ~/.ssh/authorized_keys 文件中。 可以使用 ssh-copy-id 工具。

将您的 ssh 密钥分发到其他节点

将公钥复制到所有被管理节点,使用 ssh-copy-id 或手动添加到 ~/.ssh/authorized_keys

ssh-copy-id <ip>                        # 交互式密码输入

您可以使用 sshpass 工具直接传递密码而不提示,但这很危险:

sshpass -p <password> ssh-copy-id <ip>  # 非交互式(谨慎使用)

使用别名

当无法直接 SSH 访问时(由于跳板机、其他端口、凭据等…),考虑:

使用 SSH 别名

~/.ssh/config 中配置 SSH 别名,并在那里放置别名的自定义参数。

Host meta
    HostName 10.10.10.10
    User dba                      # <--- 远程上不同的用户
    IdentityFile /etc/dba/id_rsa  # <--- 不是普通密钥
    Port 24                       # <--- 不是众所周知的端口

并在清单中引用别名,使用 ansible_host 指定真实的 SSH 别名。

nodes:
  hosts:          # 如果节点 `10.10.10.10` 需要 SSH 别名 `meta`
    10.10.10.10: { ansible_host: meta }  # <---- 通过 `ssh meta` 访问

SSH 参数可以直接在 ansible 中使用,详情请查看 Ansible Inventory Guide


检查可访问性

您应该能够从管理节点通过当前用户免密 ssh 访问所有被管理节点。 远程用户(管理员用户)应该有权限运行免密 sudo 命令。

验证免密 ssh sudo 是否工作

在管理节点上对所有被管理节点运行此命令:

ssh <ip|alias> 'sudo ls'

如果没有密码提示或错误,免密 ssh/sudo 按预期工作。

5 - 沙箱环境

用于学习和测试的 4 节点环境

Pigsty 有一个沙盒,这是一个具有固定 IP 地址和其他标识符的 4 节点部署。

我们将使用它作为学习和测试目的的标准演示环境。

pigsty-sandbox.jpg

描述

沙盒由具有固定 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 绑定到它。

10.10.10.10 meta pg-meta-1
10.10.10.2  pg-meta

沙盒中还有三个额外的节点,组成一个 3 实例的 PostgreSQL HA 集群 pg-test。 有一个可选的 L2 VIP 10.10.10.3 和集群 DNS pg-test 绑定到集群领导者。

10.10.10.11 node-1 pg-test-1
10.10.10.12 node-2 pg-test-2
10.10.10.13 node-3 pg-test-3
10.10.10.3  pg-test

meta 节点上还有一个 1 节点的 etcd 集群和 1 节点的 minio 集群。

10.10.10.10 minio-1
10.10.10.10 etcd-1

实现

您可以使用 Vagrant 创建本地沙盒,或使用 Terraform 创建云沙盒。

要使用本地 vagrant 模板:

make full9     # 使用 RockyLinux 9 创建 4 节点沙盒
make full12     # 使用 Debian 12 创建 4 节点沙盒
make full24     # 使用 Ubuntu 24.04 创建 4 节点沙盒

要使用云 terraform 模板,请使用 spec/aliyun-full.tf 作为示例, 阿里云 4 节点沙盒模板适用于所有发行版和 amd/arm。

make tu     # terraform up
make td     # terraform destroy
make tssh   # 将 ssh 别名写入 ~/.ssh/pigsty_config

6 - Vagrant

使用 vagrant 置备本地虚拟机

Pigsty 需要 Linux 环境,您可以使用 Vagrant 轻松创建本地 linux 虚拟机。

您还需要一个虚拟机提供商,(比如笔记本电脑的 VirtualBox 和服务器的 libvirt)


入门

您可以在 macOS 上使用 homebrew 安装 vagrant、virtualbox、ansible:

在 macos 上安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install vagrant virtualbox ansible

您已准备就绪!使用 make 快捷方式创建虚拟机:

~/pigsty
make meta       # 1 节点开发箱,用于快速启动、开发、测试和实验
make full       # 4 节点沙盒,用于 HA 测试和功能演示
make simu       # 36 节点模拟箱,用于生产环境模拟
...
make meta9      # 使用 bento/rockylinux-9 镜像创建单例元节点
make full22     # 使用 generic/ubuntu2204 镜像创建 4 节点沙盒
make simu12     # 使用 generic/debian12 镜像创建 36 节点模拟环境

配置

您必须在启动前在 Vagrantfile 中定义虚拟机。 默认的 Vagrantfile 定义了一个 el9(bento/rockylinux-9)1 节点虚拟机,使用本地 virtualbox VM 提供商。

我们在 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 包含:

# full: pigsty 全功能 4 节点沙盒,用于 HA 测试、教程和实践

Specs = [
  { "name" => "meta"   , "ip" => "10.10.10.10" ,  "cpu" => "2" ,  "mem" => "4096" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-1" , "ip" => "10.10.10.11" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-2" , "ip" => "10.10.10.12" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
  { "name" => "node-3" , "ip" => "10.10.10.13" ,  "cpu" => "1" ,  "mem" => "2048" ,  "image" => "bento/rockylinux-9"  },
]

您可以使用规格与 config 脚本,它将根据规格和环境变量(资源、镜像、vm 提供商等…)渲染 Vagrantfile

cd ~/pigsty
vagrant/config [spec] [image] [scale] [provider]

vagrant/config meta                # 使用 1 节点规格,默认 el8 镜像
vagrant/config dual el9            # 使用 2 节点规格,使用 el9 镜像
vagrant/config trio d12 2          # 使用 3 节点规格,使用 debian12 镜像,双倍 cpu/mem 资源
vagrant/config full u22 4          # 使用 4 节点规格,使用 ubuntu22 镜像,使用 4x cpu/mem 资源
vagrant/config simu u24 1 libvirt  # 使用 36 节点规格,使用 ubuntu24 镜像,使用 libvirt 作为提供商而不是 virtualbox

您可以使用环境变量 VM_SCALE 扩展资源单位,默认值为 1

例如,VM_SCALE=2 vagrant/config meta 将使 meta 规格的 cpu / mem 资源翻倍

Specs = [
  { "name" => "meta" , "ip" => "10.10.10.10", "cpu" => "8" , "mem" => "16384" , "image" => "bento/rockylinux-9" },
]

快捷方式

配置后,您可以使用 vagrant up 命令创建虚拟机。

Pigsty 模板将使用您的 ~/.ssh/id_rsa[.pub] 作为 vagrant 置备的默认 ssh 密钥。 在开始之前确保您有有效的 ssh 密钥对,您可以通过以下方式生成一个:ssh-keygen -t rsa -b 2048

有一些包装 vagrant 命令的快捷方式,您可以使用它们来管理虚拟机。

~/pigsty/vagrant
make         # = make start
make new     # 销毁现有 vm 并创建新的
make ssh     # 将 VM ssh 配置写入 ~/.ssh/     (必需)
make dns     # 将 VM DNS 记录写入 /etc/hosts (可选)
make start   # 启动 VM 并写入 ssh 配置    (up + ssh)
make up      # 使用 vagrant up 启动 VM
make halt    # 关闭 VM (down,dw)
make clean   # 销毁 VM (clean/del/destroy)
make status  # 显示 VM 状态 (st)
make pause   # 暂停 VM (suspend,pause)
make resume  # 恢复 VM (resume)
make nuke    # 使用 virsh 销毁所有 vm 和卷(如果使用 libvirt)

版本

Pigsty 目前使用以下 vagrant 盒子进行测试:

x86_64
$ vagrant box list

el8 :  bento/rockylinux-8     (libvirt, 202502.21.0, (amd64))
el9 :  bento/rockylinux-9     (libvirt, 202502.21.0, (amd64))

d11 :  generic/debian11       (libvirt, 4.3.12, (amd64))
d12 :  generic/debian12       (libvirt, 4.3.12, (amd64))

u20 :  generic/ubuntu2004     (libvirt, 4.3.12, (amd64))
u22 :  generic/ubuntu2204     (libvirt, 4.3.12, (amd64))
u24 :  bento/ubuntu-24.04     (libvirt, 20250316.0.0, (amd64))

它们并非都有 arm64 架构支持,所以在使用 Apple Silicon MacOS 时要注意。

aarch64
bento/rockylinux-9 (virtualbox, 202502.21.0, (arm64))
bento/ubuntu-24.04 (virtualbox, 202502.21.0, (arm64))

您可以在 https://app.vagrantup.com/bento/boxes 上找到支持的 Box 镜像


注意事项

Virtualbox 网络配置

当使用较旧版本的 virtualbox 作为 vagrant 提供商时,需要额外设置才能使用默认的 10.x.x.x CIDR 作为仅主机网络:将其添加到 /etc/vbox/networks.conf

echo "10.0.0.0/8" | sudo tee -a /etc/vbox/networks.conf

7 - Terraform

使用 terraform 置备云虚拟机

Terraform 是一个流行的 IaC 工具。您可以使用一个命令在公有云上创建虚拟机。

阿里云和 AWS 模板用作示例提供商。您可以将 terraform.tf 作为示例。


入门

您可以在 macOS 上使用 homebrew 安装 terraform

安装 homebrew 和 terraform
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
brew install terraform

然后初始化 terraform 云提供商,调整 terraform.tf 配置文件并应用它:

cd ~/pigsty/terraform
terraform init
terraform apply #-auto-approve

打印公共 IP 地址:

terraform output | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

AWS 设置

您必须设置 aws 配置和凭据才能使用 AWS 提供商。

# ~/.aws

# ~/.aws/config
[default]
region = cn-northwest-1

# ~/.aws/credentials
[default]
aws_access_key_id = <YOUR_AWS_ACCESS_KEY>
aws_secret_access_key =  <AWS_ACCESS_SECRET>

# ~/.aws/pigsty-key
# ~/.aws/pigsty-key.pub

有一个 AWS(Amazon Web Services)的贡献示例,但它没有得到积极维护。


阿里云设置

您可以将您的阿里云凭据添加到环境文件中,例如 ~/.bash_profile

export ALICLOUD_ACCESS_KEY="<your_access_key>"
export ALICLOUD_SECRET_KEY="<your_secret_key>"
export ALICLOUD_REGION="cn-beijing"

示例配置文件:

  • 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

腾讯云设置

有一个腾讯云的贡献示例,但它没有得到积极维护。