# 架构规划

> 使用多少个节点？为哪些模块配置高可用？如何根据可用的资源与业务需求进行规划？

---

LLMS index: [llms.txt](/llms.txt)

---

Pigsty 采用 [**模块化架构**](/docs/concept/arch)，您可以像搭积木一样组合出自己想要的部署方案，并用简单的 [**声明式配置**](/docs/concept/iac) 表达您的意图。


## 常见方案

这里有一些常见的组合模式供您参考，您可以根据自己的需求进行进一步的定制与调整：

|                  方案                   | [**INFRA**](/docs/infra/) | [**ETCD**](/docs/etcd/) | [**PGSQL**](/docs/pgsql/) | [**MINIO**](/docs/minio) | 说明                                        |
|:-------------------------------------:|:-------------------------:|:-----------------------:|:-------------------------:|:------------------------:|-------------------------------------------|
|  单机部署（[**`meta`**](/docs/conf/meta)）  |             1             |            1            |             1             |                          | [**单机部署**](/docs/setup/install) 默认配置，经典方案 |
|  单机部署（[**`slim`**](/docs/conf/slim)）  |                           |            1            |             1             |                          | 不要监控设施，只要数据库                              |
| 基础设施（[**`infra`**](/docs/conf/infra)） |             1             |                         |                           |                          | 只要监控基础设施                                  |
|  单机部署（[**`rich`**](/docs/conf/rich)）  |             1             |            1            |             1             |            1             | 单机 + 对象存储 + 本地仓库/扩展                       |
{.full-width}

|                多节点方案                | [**INFRA**](/docs/infra/) | [**ETCD**](/docs/etcd/) | [**PGSQL**](/docs/pgsql/) | [**MINIO**](/docs/minio) | 说明                |
|:-----------------------------------:|:-------------------------:|:-----------------------:|:-------------------------:|:------------------------:|-------------------|
| 双节点（[**`dual`**](/docs/conf/dual)）  |             1             |            1            |             2             |                          | 2节点半 HA，可容忍坏特定一个  |
| 三节点（[**`trio`**](/docs/conf/trio)）  |             3             |            3            |             3             |                          | 标准3节点 HA，可容忍坏一个   |
| 四节点（[**`full`**](/docs/conf/full)）  |             1             |            1            |            1+3            |                          | 演示专用，1 INFRA/ETCD |
| 生产部署（[**`simu`**](/docs/conf/simu)） |             2             |            3            |             n             |            n             | 2个 INFRA，3个 ETCD  |
|             大规模生产（自定义）              |             3             |            5            |             n             |            n             | 3个 INFRA，5个 ETCD  |
{.full-width}

使用什么样的架构规划方案，取决于您对数据库可靠性的要求，以及手头可用的资源。
通常来说，严肃的生产环境部署至少需要 **3** 个节点以实现 [**高可用配置**](#三节点配置)。
如果您只有 **2** 个节点，则可以使用 [**半高可用配置**](#双节点配置)。

<div class="alert alert-info" role="alert"><div class="h4 alert-heading" role="heading" aria-level="4">专家咨询服务：架构规划</div>


我们提供 [**架构咨询服务**](/price)（¥2,000）为您筹划合适的 Pigsty 配置方案。

</div>



--------

## 利弊权衡

- 若要使用 Pigsty 的监控系统，则至少需要 **1** 个 INFRA 节点，生产部署通常使用 **2** 个，大规模部署 **3** 个。
- 若要启用 PG 高可用，则至少需要 **1** 个 ETCD 节点；生产部署通常使用 **3** 个，大规模环境中使用 **5** 个。偶数成员也能运行，但不会比少一个成员的奇数集群提高故障容忍数，因此应优先采用奇数规模。
- 若要启用 MINIO 模块的 Silo 对象存储，则至少需要 **1** 个 [**MINIO 节点**](/docs/minio/config#单机单盘)，严肃使用时通常使用 4+ 节点部署 [**MNMD**](/docs/minio/config#多机多盘) 集群。
- PG 生产集群通常至少为两节点主从配置；严肃场景通常使用 3 节点；高只读负载可以有更多从库（几十个）
- 此外对于 PostgreSQL 来说，您还可以按需使用 离线实例，同步实例，备份集群，延迟集群等等高级配置。



--------

## 单节点配置

最简单的配置，所有内容都在单个节点上运行，默认安装四个基本模块，通常用于 Demo，Devbox，或测试环境。

| ID | [NODE](/docs/node/) | [PGSQL](/docs/pgsql/) | [INFRA](/docs/infra/) | [**ETCD**](/docs/etcd/) |
|:--:|:-------------------:|:---------------------:|:---------------------:|:-----------------------:|
| 1  |      `node-1`       |      `pg-meta-1`      |       `infra-1`       |        `etcd-1`         |
{.full-width}

如果为备份/PITR 配置了外部 S3 / MinIO [**备份仓库**](/docs/pgsql/backup/repository/) 提供兜底的 RTO/RPO，此配置亦可用于普通标准的生产环境。

单节点配置有多种变体：

- **充血版**（[**`rich`**](/docs/conf/rich)）：生产版本的单机部署模版，带有本地 Silo 对象存储，使用本地软件仓库，下载所有 PG 扩展。
- **瘦身版**（[**`slim`**](/docs/conf/slim)）：只安装 [**PGSQL**](/docs/pgsql/) 和 [**ETCD**](/docs/etcd/)，不安装监控设施 —— [**精简安装**](/docs/setup/slim) 也可以扩充为 [**多节点高可用部署**](/docs/setup/slim#高可用集群)
- **监控版**（[**`infra`**](/docs/conf/infra)）：与 `slim` 相反，只安装 [**INFRA**](/docs/infra/) 监控基础设施，不安装数据库服务，只用来监控其他实例。
- **内核替换**：用衍生分支 [**`pgsql`**](/docs/conf/pgsql/)、[**`mssql`**](/docs/conf/mssql/)、[**`polar`**](/docs/conf/polar/)、[**`ivory`**](/docs/conf/ivory/)、[**`mysql`**](/docs/conf/mysql/)、[**`pgtde`**](/docs/conf/pgtde/)、[**`oriole`**](/docs/conf/oriole/)、[**`agens`**](/docs/conf/agens/)、[**`pgedge`**](/docs/conf/pgedge/) 替换原生 PG


--------

## 双节点配置

[**双节点配置**](/docs/conf/dual) 将启用数据库复制和 **半高可用** 能力，提供更好的数据冗余，以及有限的故障转移支持：

| ID | [NODE](/docs/node/) |  [PGSQL](/docs/pgsql/)  | [INFRA](/docs/infra/) | [**ETCD**](/docs/etcd/) |
|:--:|:-------------------:|:-----------------------:|:---------------------:|:-----------------------:|
| 1  |      `node-1`       | `pg-meta-1` (`replica`) |       `infra-1`       |        `etcd-1`         |
| 2  |      `node-2`       | `pg-meta-2` (`primary`) |                       |                         |
{.full-width}

双节点配置的高可用自动切换机制有限制，这种"半 HA"设置只能从特定节点故障中自动恢复：
- 如果 `node-1` 故障，无自动故障转移：需要手动提升 `node-2`
- 如果 `node-2` 故障，自动故障转移有效：`node-1` 自动提升

--------

## 三节点配置

[**三节点模板**](/docs/conf/trio) 提供真正的基础高可用配置，可以容忍任意一个节点的故障，并从中自动恢复。

| ID | [NODE](/docs/node/) | [PGSQL](/docs/pgsql/) | [INFRA](/docs/infra/) | [**ETCD**](/docs/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`         |
{.full-width}

--------

## 四节点配置

Pigsty [**沙箱环境**](/docs/deploy/sandbox/) 使用的 [**标准四节点配置**](/docs/conf/full)。

| ID | [NODE](/docs/node/) | [PGSQL](/docs/pgsql/) | [INFRA](/docs/infra/) | [**ETCD**](/docs/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`      |                       |                         |
{.full-width}

在这里我们出于演示目的，不配置 [**INFRA**](/docs/infra) / [**ETCD**](/docs/etcd) 模块的高可用，您也可以对其进行进一步的调整

| ID | [NODE](/docs/node/) | [PGSQL](/docs/pgsql/) | [INFRA](/docs/infra/) | [**ETCD**](/docs/etcd/) | [**MINIO**](/docs/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`      |                       |                         |                           |
{.full-width}


--------

## 更多节点

如果您有着完善的虚拟化设施或充足的资源，完全可以 [**使用更多的节点**](/docs/conf/simu)，让每个模块都采用 **独占式部署**，从而获得最佳的可靠性，可观测性与性能表现。

| ID | [NODE](/docs/node/) | [INFRA](/docs/infra/) | [**ETCD**](/docs/etcd/) | [**MINIO**](/docs/minio/) | [PGSQL](/docs/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 |       ......        |                       |                         |                           |                       |
{.full-width}
