概念:节点
Pigsty使用节点(Node)进行安装与部署,节点可以是物理机,虚拟机,甚至Pod。
元节点用于发起管理,普通节点是纳入Pigsty管理的节点。
- 元节点(Meta):执行
infra.yml剧本安装Pigsty,安装 INFRA,NODES,PGSQL 三个模块。 - 节点(Node):通过
nodes.yml剧本纳入管理的普通节点,默认安装 NODES 模块。
元节点
元节点即完整安装Pigsty,带有管理功能的节点,部署有完整的基础设施组件。
当您在某节点上执行 ./configure 时,当前节点会被默认作为元节点,填入配置文件 meta 分组中。
在每套环境中,Pigsty最少需要一个元节点,该节点将作为整个环境的控制中心。元节点负责各种管理工作:保存状态,管理配置,发起任务,收集指标,等等。整个环境的基础设施组件,Nginx,Grafana,Prometheus,Alertmanager,NTP,DNS Nameserver,DCS都将部署在元节点上。
复用元节点
元节点亦可复用为普通数据库节点,在元节点上默认运行有名为 pg-meta 的PostgreSQL数据库集群。提供额外的扩展功能:CMDB,巡检报告,扩展应用,日志分析,数据分析与处理等
以Pigsty附带的四节点沙箱环境为例,组件在节点上的分布如下图所示:

沙箱由一个元节点与四个普通节点组成,这里元节点也被复用为一个普通节点。沙箱内部署有一套基础设施与两套数据库集群。 meta 为元节点,部署有基础设施组件,同时被复用为普通数据库节点,部署有单主数据库集群pg-meta。 node-1,node-2,node-3 为普通数据库节点,部署有数据库集群pg-test。
元节点上的服务
元节点上默认运行的服务如下所示:
| 组件 | 端口 | 说明 | 默认域名 |
|---|---|---|---|
| Nginx | 80 | 所有Web服务的入口,文件服务器 | pigsty |
| Yum | 80 | 本地YUM软件源 | yum.pigsty |
| Grafana | 3000 | 监控系统/可视化平台 | g.pigsty |
| AlertManager | 9093 | 报警聚合管理组件 | a.pigsty |
| Prometheus | 9090 | 监控时序数据库 | p.pigsty |
| Loki | 3100 | 实时日志收集基础设施 | l.pigsty |
| Consul (Server) | 8500 | 分布式配置管理与服务发现 | c.pigsty |
| Docker | 2375 | 运行无状态服务的容器平台 | - |
| PostgreSQL | 5432 | Pigsty CMDB | - |
| Ansible | - | 用于发起管理命令的组件 | - |
| Consul DNS | 8600 | Consul提供的DNS服务(可选) | - |
| Dnsmasq | 53 | DNS域名解析服务器(可选) | - |
| NTP | 123 | NTP时间服务器(可选) | - |
| Pgbouncer | 6432 | Pgbouncer连接池服务 | - |
| Patroni | 8008 | Patroni高可用组件 | - |
| Haproxy Primary | 5433 | 集群读写服务(主库连接池)代理 | - |
| Haproxy Replica | 5434 | 集群只读服务(从库连接池)代理 | - |
| Haproxy Default | 5436 | 集群主库直连服务(用于管理,DDL/DML变更) | - |
| Haproxy Offline | 5438 | 集群离线读取服务(直连离线实例,用于ETL,交互式查询) | - |
| Haproxy Admin | 9101 | Haproxy监控指标与流量管理页面 | - |
| PG Exporter | 9630 | Postgres监控指标导出器 | - |
| PGBouncer Exporter | 9631 | Pgbouncer监控指标导出器 | - |
| Node Exporter | 9100 | 机器节点监控指标导出器 | - |
| Promtail | 9080 | 实时收集节点与数据库日志 | - |
| vip-manager | - | 将VIP绑定至集群主库上 |

元节点与DCS
默认情况下,元节点上将部署元数据库 (Consul 或 Etcd),用户也可以使用已有的外部DCS集群。如果将DCS部署至元节点上,建议在生产环境使用3个元节点,以充分保证DCS服务的可用性。DCS外的基础设施组件都将以对等副本的方式部署在所有元节点上。元节点的数量要求最少1个,推荐3个,建议不超过5个。
DCS用于支持数据库高可用的故障检测与选主,在默认模式停止DCS服务会导致所有数据库集群拒绝写入,因此请务必确保DCS服务的可靠性(增加元节点数量,或使用外部独立维护的高可用DCS集群)。
使用多个元节点
复数个元节点是可能的,通常一个元节点足矣,两个元节点可以互为备份,三个元节点自身便足以部署生产级DCS Server集群。
本着开箱即用的原则,Pigsty默认在所有元节点上部署DCS Server。但如果单纯是为了追求DCS Server集群的高可用而使用超过3个管理节点并没有太大的意义。您可以使用一个外部维护管理的,3~5节点的DCS集群来保证DCS服务可用性。
元节点的特征是节点地址配置于配置文件的 all.children.meta.host 分组中,带有meta_node: true 标记。在 configure 过程中,执行安装的当前节点会被配置为元节点,复数个元节点则需要手工配置,可参考三管理节点样例配置文件: pigsty-dcs3.yml。
如果您没有使用任何外部DCS集群服务作为仲裁者,那么有意义的高可用最少需要3个节点。如果您只有两个节点,建议主库故障时人工介入以避免脑裂出现。
节点
您可以使用Pigsty管理更多的节点,并使用这些节点部署数据库。
纳入Pigsty管理的节点会被 nodes.yml 调整至 配置:NODES 所描述的状态,加装节点监控与日志收集组件,您可以从监控系统中查阅节点状态与日志。被Pigsty管理的节点可以进一步用于部署各种数据库,或您自己的应用。
节点身份
每个节点都有身份参数,通过在<cluster>.hosts与<cluster>.vars中的相关参数进行配置。
在Pigsty中,节点有两个重要的身份参数: nodename 与 node_cluster,这两者将在监控系统中用作节点的 实例标识(ins) 与 集群标识 (cls)。nodename 与 node_cluster 并不是必选参数,当留白或置空时,nodename 会使用节点当前的主机名,而 node_cluster 则会使用固定的默认值:nodes。
此外,Pigsty还会使用IP地址作为数据库节点的唯一标识, IP地址即配置清单中主机的inventory_hostname ,体现为<cluster>.hosts对象中的key。尽管一个节点可能有多块网卡和多个IP地址,但您必须指定一个首要IP地址作为节点唯一标识。该地址应当为内网地址,即您访问该节点上的数据库时使用那个IP地址。
该IP地址并不一定是管理节点SSH访问使用的IP地址,您可以通过 Ansible Connect 相关参数,通过SSH隧道或跳板机中转的方式间接操作管理目标节点。
| 名称 | 类型 | 层级 | 必要性 | 说明 |
|---|---|---|---|---|
inventory_hostname |
ip |
- | 必选 | 节点IP地址 |
nodename |
string |
I | 可选 | 节点名称 |
node_cluster |
string |
C | 可选 | 节点集群名称 |
以下集群配置声明了一个三节点集群:
| host | node_cluster | nodename | instance |
|---|---|---|---|
10.10.10.11 |
node-test |
node-test-1 |
pg-test-1 |
10.10.10.12 |
node-test |
pg-test-2 |
pg-test-2 |
10.10.10.13 |
node-test |
node-3 |
pg-test-3 |
在监控系统中,相关的时序监控数据标签为:
节点默认服务
| 组件 | 端口 | 说明 |
|---|---|---|
| Consul Agent | 8500 | 分布式配置管理,服务发现组件Consul的本地Agent |
| Node Exporter | 9100 | 机器节点监控指标导出器 |
| Promtail | 9080 | 实时收集Postgres,Pgbouncer,Patroni日志 (选装) |
| Consul DNS | 8600 | Consul Agent提供的DNS服务 |
PGSQL节点服务
PGSQL节点是用于部署PostgreSQL集群的节点, 在标准节点上额外加装了 PGSQL 模块。
在执行默认的PostgreSQL部署时,因为Pigsty默认采用节点独占1:1部署,因此可以通过 pg_hostname 参数,将数据库实例的身份参数(pg_cluster 与 pg_instance)借用至节点的 nodename 与 node_cluster 身份参数上。
除了 节点默认服务) 外,PGSQL节点上运行有下列服务:
| 组件 | 端口 | 说明 |
|---|---|---|
| Postgres | 5432 | Postgres数据库服务 |
| Pgbouncer | 6432 | Pgbouncer连接池服务 |
| Patroni | 8008 | Patroni高可用组件 |
| Consul | 8500 | 分布式配置管理,服务发现组件Consul的本地Agent |
| Haproxy Primary | 5433 | 集群读写服务(主库连接池)代理 |
| Haproxy Replica | 5434 | 集群只读服务(从库连接池)代理 |
| Haproxy Default | 5436 | 集群主库直连服务(用于管理,DDL/DML变更) |
| Haproxy Offline | 5438 | 集群离线读取服务(直连离线实例,用于ETL,交互式查询) |
Haproxy service |
543x | 集群提供的额外自定义服务将依次分配端口 |
| Haproxy Admin | 9101 | Haproxy监控指标与流量管理页面 |
| PG Exporter | 9630 | Postgres监控指标导出器 |
| PGBouncer Exporter | 9631 | Pgbouncer监控指标导出器 |
| Node Exporter | 9100 | 机器节点监控指标导出器 |
| Promtail | 9080 | 实时收集Postgres,Pgbouncer,Patroni日志 (选装) |
| Consul DNS | 8600 | Consul提供的DNS服务 |
| vip-manager | - | 将VIP绑定至集群主库上 |
节点交互
以单个 元节点 和 单个 节点 构成的环境为例,架构如下图所示:

元节点与数据库节点之间的交互主要包括:
-
数据库集群/节点的域名依赖元节点的Nameserver进行解析 (可选)。
-
数据库节点软件安装需要用到元节点上的Yum Repo。
-
数据库集群/节点的监控指标会被元节点的Prometheus收集。
-
数据库的日志会被Promtail收集并发往Loki。
-
Pigsty会从元节点上发起对数据库节点的管理:
- 执行集群创建,扩缩容,实例/集群回收
- 创建业务用户、业务数据库、修改服务、HBA修改;
- 执行日志采集、垃圾清理,备份,巡检等
-
数据库节点的Consul会向元节点的DCS同步本地注册的服务,并代理状态读写操作。
-
数据库节点会从元节点(或其他NTP服务器)同步时间l