节点

Pigsty使用节点(Node)进行安装与部署,节点可以是物理机,虚拟机,甚至Pod。

您可以使用Pigsty管理更多的节点,并使用这些节点部署数据库。

纳入Pigsty管理的节点会被 nodes.yml 调整至 配置:NODES 所描述的状态,加装节点监控与日志收集组件,您可以从监控系统中查阅节点状态与日志。被Pigsty管理的节点可以进一步用于部署各种数据库,或您自己的应用。

节点身份

每个节点都有身份参数,通过在<cluster>.hosts<cluster>.vars中的相关参数进行配置。

在Pigsty中,节点有两个重要的身份参数: nodenamenode_cluster,这两者将在监控系统中用作节点的 实例标识ins) 与 集群标识cls)。nodenamenode_cluster 并不是必选参数,当留白或置空时,nodename 会使用节点当前的主机名,而 node_cluster 则会使用固定的默认值:nodes

此外,Pigsty还会使用IP地址作为数据库节点的唯一标识, IP地址即配置清单中主机的inventory_hostname ,体现为<cluster>.hosts对象中的key。尽管一个节点可能有多块网卡和多个IP地址,但您必须指定一个首要IP地址作为节点唯一标识。该地址应当为内网地址,即您访问该节点上的数据库时使用那个IP地址。

该IP地址并不一定是管理节点SSH访问使用的IP地址,您可以通过 Ansible Connect 相关参数,通过SSH隧道或跳板机中转的方式间接操作管理目标节点。

名称类型层级必要性说明
inventory_hostnameip-必选节点IP地址
nodenamestringI可选节点名称
node_clusterstringC可选节点集群名称

以下集群配置声明了一个三节点集群:

  1. node-test:
  2. hosts:
  3. 10.10.10.11: { nodename: node-test-1 }
  4. 10.10.10.12: { pg_hostname: true } # 从PG借用身份 pg-test-2
  5. 10.10.10.13: { } # 不显式指定nodename,则使用原有hostname: node-3
  6. vars:
  7. node_cluster: node-test
hostnode_clusternodenameinstance
10.10.10.11node-testnode-test-1pg-test-1
10.10.10.12node-testpg-test-2pg-test-2
10.10.10.13node-testnode-3pg-test-3

在监控系统中,相关的时序监控数据标签为:

  1. node_load1{cls="pg-meta", ins="pg-meta-1", ip="10.10.10.10", job="nodes"}
  2. node_load1{cls="pg-test", ins="pg-test-1", ip="10.10.10.11", job="nodes"}
  3. node_load1{cls="pg-test", ins="pg-test-2", ip="10.10.10.12", job="nodes"}
  4. node_load1{cls="pg-test", ins="pg-test-3", ip="10.10.10.13", job="nodes"}

节点默认服务

组件端口说明
Consul Agent8500分布式配置管理,服务发现组件Consul的本地Agent
Node Exporter9100机器节点监控指标导出器
Promtail9080实时收集Postgres,Pgbouncer,Patroni日志 (选装)
Consul DNS8600Consul Agent提供的DNS服务

PGSQL节点服务

PGSQL节点是用于部署PostgreSQL集群的节点, 在标准节点上额外加装了 PGSQL 模块。

在执行默认的PostgreSQL部署时,因为Pigsty默认采用节点独占1:1部署,因此可以通过 pg_hostname 参数,将数据库实例的身份参数(pg_clusterpg_instance)借用至节点的 nodenamenode_cluster 身份参数上。

除了 节点默认服务) 外,PGSQL节点上运行有下列服务:

组件端口说明
Postgres5432Postgres数据库服务
Pgbouncer6432Pgbouncer连接池服务
Patroni8008Patroni高可用组件
Consul8500分布式配置管理,服务发现组件Consul的本地Agent
Haproxy Primary5433集群读写服务(主库连接池)代理
Haproxy Replica5434集群只读服务(从库连接池)代理
Haproxy Default5436集群主库直连服务(用于管理,DDL/DML变更)
Haproxy Offline5438集群离线读取服务(直连离线实例,用于ETL,交互式查询)
Haproxy service543x集群提供的额外自定义服务将依次分配端口
Haproxy Admin9101Haproxy监控指标与流量管理页面
PG Exporter9630Postgres监控指标导出器
PGBouncer Exporter9631Pgbouncer监控指标导出器
Node Exporter9100机器节点监控指标导出器
Promtail9080实时收集Postgres,Pgbouncer,Patroni日志 (选装)
Consul DNS8600Consul提供的DNS服务
vip-manager-将VIP绑定至集群主库上

节点交互

以单个 元节点 和 单个 节点 构成的环境为例,架构如下图所示:

节点 - 图1

元节点与数据库节点之间的交互主要包括:

  • 数据库集群/节点的域名依赖元节点的Nameserver进行解析 (可选)。

  • 数据库节点软件安装需要用到元节点上的Yum Repo。

  • 数据库集群/节点的监控指标会被元节点的Prometheus收集。

  • 数据库的日志会被Promtail收集并发往Loki。

  • Pigsty会从元节点上发起对数据库节点的管理:

    • 执行集群创建,扩缩容,实例/集群回收
    • 创建业务用户、业务数据库、修改服务、HBA修改;
    • 执行日志采集、垃圾清理,备份,巡检等
  • 数据库节点的Consul会向元节点的DCS同步本地注册的服务,并代理状态读写操作。

  • 数据库节点会从元节点(或其他NTP服务器)同步时间l

最后修改 2022-05-27: init commit (1e3e284)