架构规划
使用多少个节点?为哪些模块配置高可用?如何根据可用的资源与业务需求进行规划?
Pigsty 采用 模块化架构,您可以像搭积木一样组合出自己想要的部署方案,并用简单的 声明式配置 表达您的意图。
常见方案
这里有一些常见的组合模式供您参考,您可以根据自己的需求进行进一步的定制与调整:
| 方案 | INFRA | ETCD | PGSQL | MINIO | 说明 |
|---|---|---|---|---|---|
单机部署(meta) | 1 | 1 | 1 | 单机部署 默认配置,经典方案 | |
单机部署(slim) | 1 | 1 | 不要监控设施,只要数据库 | ||
基础设施(infra) | 1 | 只要监控基础设施 | |||
单机部署(rich) | 1 | 1 | 1 | 1 | 单机 + 对象存储 + 本地仓库/扩展 |
| 多节点方案 | INFRA | ETCD | PGSQL | MINIO | 说明 |
|---|---|---|---|---|---|
双节点(dual) | 1 | 1 | 2 | 2节点半HA,可容忍坏特定一个 | |
三节点(trio) | 3 | 3 | 3 | 标准3节点HA,可容忍坏一个 | |
四节点(full) | 1 | 1 | 1+3 | 演示专用,1 INFRA/ETCD | |
生产部署(simu) | 2 | 3 | n | n | 2个INFRA,3个ETCD |
| 大规模生产(自定义) | 3 | 5 | n | n | 3个INFRA,5个 ETCD |
使用什么样的架构规划方案,取决于您对数据库可靠性的要求,以及手头可用的资源。 通常来说,严肃的生产环境部署至少需要 3 个节点以实现 高可用配置。 如果您只有 2 个节点,则可以使用 半高可用配置。
专家咨询服务:架构规划
我们提供 架构咨询服务(¥2,000)为您筹划合适的 Pigsty 配置方案。
利弊权衡
- 若要使用 Pigsty 的监控系统,则至少需要 1 个 INFRA 节点,生产部署通常使用 2 个,大规模部署 3 个。
- 若要启用 PG 高可用,则至少需要 1 个 ETCD 节点,生产部署通常使用 3 个,大规模环境中 5 个,须奇数个。
- 若要启用对象存储(MinIO),则至少需要 1 个 MINIO 节点,严肃使用时通常使用 4+ 节点部署 MNMD 集群。
- PG 生产集群通常至少为两节点主从配置;严肃场景通常使用 3 节点;高只读负载可以有更多从库(几十个)
- 此外对于 PostgreSQL 来说,您还可以按需使用 离线实例,同步实例,备份集群,延迟集群等等高级配置。
单节点配置
最简单的配置,所有内容都在单个节点上运行,默认安装四个基本模块,通常用于 Demo,Devbox,或测试环境。
| ID | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|
| 1 | node-1 | pg-meta-1 | infra-1 | etcd-1 |
如果为备份/PITR 配置了外部 S3 / MinIO 备份仓库 提供兜底的 RTO/RPO,此配置亦可用于普通标准的生产环境。
单节点配置有多种变体:
- 充血版(
rich):生产版本的单机部署模版,带有本地 MinIO 对象存储,使用本地软件仓库,下载所有 PG 扩展。 - 瘦身版(
slim):只安装 PGSQL 和 ETCD,不安装监控设施 —— 精简安装 也可以扩充为 多节点高可用部署 - 监控版(
infra):与slim相反,只安装 INFRA 监控基础设施,不安装数据库服务,只用来监控其他实例。 - 内核替换:用衍生分支
pgsql,citus,mssql,polar,ivory,mysql,pgtde,oriole,supabase替换原生 PG。
双节点配置
双节点配置 将启用数据库复制和 半高可用 能力,提供更好的数据冗余,以及有限的故障转移支持:
| ID | NODE | PGSQL | INFRA | ETCD |
|---|---|---|---|---|
| 1 | node-1 | pg-meta-1 (replica) | infra-1 | etcd-1 |
| 2 | node-2 | pg-meta-2 (primary) |
双节点配置的高可用自动切换机制有限制,这种"半 HA"设置只能从特定节点故障中自动恢复:
- 如果
node-1故障,无自动故障转移:需要手动提升node-2 - 如果
node-2故障,自动故障转移有效:node-1自动提升
三节点配置
三节点模板 提供真正的基础高可用配置,可以容忍任意一个节点的故障,并从中自动恢复。
| 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 |
四节点配置
| ID | NODE | PGSQL | INFRA | 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 |
在这里我们出于演示目的,不配置 INFRA / ETCD 模块的高可用,您也可以对其进行进一步的调整
| ID | NODE | PGSQL | INFRA | ETCD | 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 |
更多节点
如果您有着完善的虚拟化设施或充足的资源,完全可以 使用更多的节点,让每个模块都采用 独占式部署,从而获得最佳的可靠性,可观测性与性能表现。
| ID | NODE | INFRA | ETCD | MINIO | 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 | …… |