# 多节点部署

> 如何在多个节点上安装 Pigsty，实现生产级别高可用？
---

你可以参考 [配置教程](/zh/docs/config/tutorial) ，将一个单机 Pigsty 节点逐步扩展为多节点高可用部署。
但是完成这些工作最简单的办法，始终是在部署前就预先规划一切，并且一次性完成整个环境的置备。


--------

## 单节点部署 {#1-node-setup}

我们已经在 [快速上手](/zh/docs/install/start) 一节中演示了单节点安装的流程 —— 最简单的部署方式。

| ID |     IP 地址     | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) |
|:--:|:-------------:|:----------------:|:------------------:|:------------------:|:--------------------:|
| 1  | `10.10.10.10` |      `meta`      |    `pg-meta-1`     |     `infra-1`      |       `etcd-1`       |

单节点没有高可用性，也没有冗余，如果您确实要将其用于生产环境，请为 [PG](/zh/docs/pgsql/backup) 配置外部 [MinIO](/zh/docs/minio) / S3 / NFS... 作为远程备份仓库，这样能提供最低数据完整性灾难恢复能力。

Pigsty 有很多单节点 [配置模板](/zh/docs/config/template) 供您参考。
你可以使用 [Vagrant](/zh/docs/prepare/vagrant) 默认的 [`meta.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/meta.rb) 来在本地置备此环境所需的虚拟机。
或者使用 [Terraform](/zh/docs/prepare/terraform) 默认的 [`meta.tf`](https://github.com/pgsty/pigsty/blob/v3.7.0/terraform/spec/aliyun-meta.tf) 来在阿里云上置备此环境。


---------

## 双节点部署 {#2-node-setup}

> 半高可用设置

双节点设置可实现一主一从的数据库物理复制和半高可用功能：

| ID |     IP 地址     | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) |
|:--:|:-------------:|:----------------:|:------------------:|:------------------:|:--------------------:|
| 1  | `10.10.10.10` |      `meta`      |    `pg-meta-1`     |     `infra-1`      |       `etcd-1`       |
| 2  | `10.10.10.11` |     `node-1`     |    `pg-meta-2`     |                    |                      |

虽然比单节点设置更加健壮，但双节点架构的高可用性有限制：

- 如果 `node-2` 故障，自动故障转移正常工作 - `node-1` 会自动被提升
- 如果 `node-1` 故障，无法进行自动故障切换 - 需要手动提升 `node-2`

也就是说，这种"半高可用"设置只能从 **特定的节点故障** 中自动恢复，只允许坏其中一台特定的节点2。

您可以使用 [`dual.yml`](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/ha/dual.yml) 配置模板，并使用
[Vagrant](/zh/docs/prepare/vagrant) [`dual.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/dual.rb) 来置备此环境所需的虚拟机。




---------

## 三节点部署 {#3-node-setup}

> 真正的高可用

一个能够从任意单节点故障中自动恢复的真正高可用设置：

| ID |     IP 地址     | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) |
|:--:|:-------------:|:----------------:|:------------------:|:------------------:|:--------------------:|
| 1  | `10.10.10.10` |     `node-1`     |    `pg-meta-1`     |     `infra-1`      |       `etcd-1`       |
| 2  | `10.10.10.11` |     `node-2`     |    `pg-meta-2`     |     `infra-2`      |       `etcd-2`       |
| 3  | `10.10.10.12` |     `node-3`     |    `pg-meta-3`     |     `infra-3`      |       `etcd-3`       |


您可以使用 [`trio.yml`](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/ha/trio.yml) 配置模板，并使用
[Vagrant](/zh/docs/prepare/vagrant) [`trio.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/trio.rb) 来置备此环境所需的虚拟机。



---------

## 四节点沙箱 {#4-node-sandbox}

这是 Pigsty 中使用的 [沙箱演示](/zh/docs/prepare/sandbox) 环境，具有一个基础设施节点和三个额外的数据节点：

| ID |     IP 地址     | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) | [**MINIO**](/zh/docs/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`     |                    |                      |                        |

您可以使用 [`full.yml`](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/ha/full.yml) 配置模板，并使用
[Vagrant](/zh/docs/prepare/vagrant) [`full.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/full.rb) 或 [Terraform](/zh/docs/prepare/terraform) [`full.tf`](https://github.com/pgsty/pigsty/blob/v3.7.0/terraform/spec/aliyun-full.tf) 来置备此环境。


---------

## 五节点构建 {#5-node-building}

这个 [`pro.yml`](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/build/pro.yml) 是一个五节点构建环境，包含支持的 [Linux 发行版](/zh/docs/prepare/linux)。

| ID |     IP 地址     | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) |
|:--:|:-------------:|:----------------:|:------------------:|:------------------:|:--------------------:|
| 1  | `10.10.10.8`  |      `el8`       |      `el8-1`       |     `infra-1`      |                      |
| 2  | `10.10.10.9`  |      `el9`       |      `el9-1`       |     `infra-2`      |      `etcd-2`        |
| 3  | `10.10.10.12` |      `u12`       |      `u12-1`       |     `infra-3`      |                      |
| 4  | `10.10.10.22` |      `u22`       |      `u22-1`       |     `infra-4`      |                      |
| 5  | `10.10.10.24` |      `u24`       |      `u24-1`       |     `infra-5`      |                      |

您可以使用 [Vagrant](/zh/docs/prepare/vagrant) [`pro.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/pro.rb) 或 [Terraform](/zh/docs/prepare/terraform) [`pro.tf`](https://github.com/pgsty/pigsty/blob/v3.7.0/terraform/spec/aliyun-pro.tf) 来置备此环境。


---------

## 三十六节点仿真 {#36-node-simulation}

一个包含 36 个节点的生产仿真环境（[`simu.yml`](https://github.com/pgsty/pigsty/blob/v3.7.0/conf/ha/simu.yml)），涵盖了所有 Pigsty 组件

| IP 地址         |  规格   | [NODE](/zh/docs/node) | [PGSQL](/zh/docs/pgsql) | [INFRA](/zh/docs/infra) | [**ETCD**](/zh/docs/etcd) | [**MINIO**](/zh/docs/minio) | [**REDIS**](/zh/docs/redis) |
|:--------------|:-----:|:----------------:|:------------------:|:------------------:|:--------------------:|:----------------------:|:----------------------:|
| `10.10.10.10` | 8C32G |     `meta1`      |    `pg-meta-1`     |     `infra-1`      |                      |                        |                        |
| `10.10.10.11` | 8C32G |     `meta2`      |    `pg-meta-2`     |     `infra-2`      |                      |                        |                        |
| `10.10.10.12` | 2C4G  |      `pg12`      |     `pg-v12-1`     |                    |                      |                        |                        |
| `10.10.10.13` | 2C4G  |      `pg13`      |     `pg-v13-1`     |                    |                      |                        |                        |
| `10.10.10.14` | 2C4G  |      `pg14`      |     `pg-v14-1`     |                    |                      |                        |                        |
| `10.10.10.15` | 2C4G  |      `pg15`      |     `pg-v15-1`     |                    |                      |                        |                        |
| `10.10.10.16` | 2C4G  |      `pg16`      |     `pg-v16-1`     |                    |                      |                        |                        |
| `10.10.10.17` | 2C4G  |      `pg17`      |     `pg-v17-1`     |                    |                      |                        |                        |
| `10.10.10.18` | 2C4G  |     `proxy1`     |                    |                    |                      |                        |                        |
| `10.10.10.19` | 2C4G  |     `proxy2`     |                    |                    |                      |                        |                        |
| `10.10.10.21` | 2C4G  |     `minio1`     |                    |                    |       `etcd-1`       |       `minio-1`        |     `redis-meta-1`     |
| `10.10.10.22` | 2C4G  |     `minio2`     |                    |                    |       `etcd-2`       |       `minio-2`        |     `redis-meta-2`     |
| `10.10.10.23` | 2C4G  |     `minio3`     |                    |                    |       `etcd-3`       |       `minio-3`        |     `redis-meta-3`     |
| `10.10.10.24` | 2C4G  |     `minio4`     |                    |                    |       `etcd-4`       |       `minio-4`        |     `redis-meta-4`     |
| `10.10.10.25` | 2C4G  |     `minio5`     |                    |                    |       `etcd-5`       |       `minio-5`        |     `redis-meta-5`     |
| `10.10.10.40` | 1C2G  |     `node40`     |    `pg-pitr-1`     |                    |                      |                        |                        |
| `10.10.10.41` | 1C2G  |     `node41`     |    `pg-test-1`     |                    |                      |                        |     `redis-test-1`     |
| `10.10.10.42` | 1C2G  |     `node42`     |    `pg-test-2`     |                    |                      |                        |     `redis-test-2`     |
| `10.10.10.43` | 1C2G  |     `node43`     |    `pg-test-3`     |                    |                      |                        |     `redis-test-3`     |
| `10.10.10.44` | 1C2G  |     `node44`     |    `pg-test-4`     |                    |                      |                        |     `redis-test-4`     |
| `10.10.10.45` | 1C2G  |     `node45`     |     `pg-src-1`     |                    |                      |                        |     `redis-src-1`      |
| `10.10.10.46` | 1C2G  |     `node46`     |     `pg-src-2`     |                    |                      |                        |     `redis-src-2`      |
| `10.10.10.47` | 1C2G  |     `node47`     |     `pg-src-3`     |                    |                      |                        |     `redis-src-3`      |
| `10.10.10.48` | 1C2G  |     `node48`     |     `pg-dst-1`     |                    |                      |                        |     `redis-dst-1`      |
| `10.10.10.49` | 1C2G  |     `node49`     |     `pg-dst-2`     |                    |                      |                        |     `redis-dst-2`      |
| `10.10.10.50` | 1C2G  |     `node50`     |   `pg-citus0-1`    |                    |                      |                        |                        |
| `10.10.10.51` | 1C2G  |     `node51`     |   `pg-citus0-2`    |                    |                      |                        |                        |
| `10.10.10.52` | 1C2G  |     `node52`     |   `pg-citus1-1`    |                    |                      |                        |                        |
| `10.10.10.53` | 1C2G  |     `node53`     |   `pg-citus1-2`    |                    |                      |                        |                        |
| `10.10.10.54` | 1C2G  |     `node54`     |   `pg-citus2-1`    |                    |                      |                        |                        |
| `10.10.10.55` | 1C2G  |     `node55`     |   `pg-citus2-2`    |                    |                      |                        |                        |
| `10.10.10.56` | 1C2G  |     `node56`     |   `pg-citus3-1`    |                    |                      |                        |                        |
| `10.10.10.57` | 1C2G  |     `node57`     |   `pg-citus3-2`    |                    |                      |                        |                        |
| `10.10.10.58` | 1C2G  |     `node58`     |   `pg-citus4-1`    |                    |                      |                        |                        |
| `10.10.10.59` | 1C2G  |     `node59`     |   `pg-citus4-2`    |                    |                      |                        |                        |
| `10.10.10.88` | 4C8G  |      `test`      |                    |                    |                      |                        |                        |

您可以使用 [Vagrant](/zh/docs/prepare/vagrant) [`simu.rb`](https://github.com/pgsty/pigsty/blob/v3.7.0/vagrant/spec/simu.rb) 来置备此环境。
您可以在真实服务器（72C / 256G）上运行整个仿真，使用 Vagrant 的 `libvirt` 作为虚拟机提供程序。

- 2 个基础设施节点，相互监控
- 2 个专用代理节点运行 HAProxy
- 5 节点 ETCD 集群可容忍 2 个节点故障，以及 5 节点 Redis Sentinel 集群
- 5 节点 MinIO 集群，每个节点有 4 个磁盘
- 10 个 PostgreSQL 集群：`pg13` - `pg15`、`pg-src`、`pg-dst`、`pg-pitr`、`pg-test`
- 10 节点 Citus 集群有 5 个分片
- Redis 独立集群 `redis-src` 和 `redis-dst`，以及原生集群 `redis-test`
