节点
Pigsty使用节点(Node)进行安装与部署,节点可以是物理机,虚拟机,甚至Pod。
您可以使用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 | 可选 | 节点集群名称 |
以下集群配置声明了一个三节点集群:
node-test:
hosts:
10.10.10.11: { nodename: node-test-1 }
10.10.10.12: { pg_hostname: true } # 从PG借用身份 pg-test-2
10.10.10.13: { } # 不显式指定nodename,则使用原有hostname: node-3
vars:
node_cluster: node-test
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 |
在监控系统中,相关的时序监控数据标签为:
node_load1{cls="pg-meta", ins="pg-meta-1", ip="10.10.10.10", job="nodes"}
node_load1{cls="pg-test", ins="pg-test-1", ip="10.10.10.11", job="nodes"}
node_load1{cls="pg-test", ins="pg-test-2", ip="10.10.10.12", job="nodes"}
node_load1{cls="pg-test", ins="pg-test-3", ip="10.10.10.13", job="nodes"}
节点默认服务
组件 | 端口 | 说明 |
---|---|---|
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
最后修改 2022-05-27: init commit (1e3e284)