系统架构

介绍Pigsty的系统架构

Pigsty的架构在部署上分为两个部分:

  • 基础设施(Infra) :部署于元节点上,监控基础设施,DNS,NTP,DCS,本地源等关键服务。
  • 数据库集群(PgSQL):部署于数据库节点上,以集群为单位对外提供数据库服务

Pigsty的部署对象也可以分为两种:

  • 元节点Meta):部署基础设施,执行控制逻辑,每个Pigsty部署至少需要一个元节点,可复用为普通节点。
  • 数据库节点Node):用于部署数据库集群/实例,Pigsty采用节点与数据库实例一一对应的独占式部署。

以Pigsty附带的四节点沙箱环境为例,Pigsty中涉及的主要组件及其分布如下图所示:

图:Pigsty沙箱中包含的节点与组件

上图中 meta 即为元节点,部署有额外的基础设施组件。 node-1node-2node-3 为普通数据库节点,部署有数据库集群pg-test

meta被复用为普通数据库节点,部署有单主数据库集群pg-meta

基础设施

每一套 环境(Environment) 中,都需要有一些基础设施,才能使整个系统正常工作。

基础设施通常由专业的运维团队或云厂商负责,但Pigsty作为一个开箱即用的产品解决方案,将基本的基础设施集成至供给方案中。

包括:

  • 域名基础设施:Dnsmasq
  • 时间基础设施:NTP
  • 监控基础设施:Prometheus
  • 报警基础设施:Altermanager
  • 可视化基础设施:Grafana
  • 本地源基础设施:Yum/Nginx
  • 分布式配置存储:etcd/consul

基础设施部署于 元节点 上。一套环境中包含一个或多个元节点,用于基础设施部署。

除了**分布式配置存储(DCS)**之外,所有基础设施组件都采用副本式部署;如果有多个元节点,元节点上的DCS(etcd/consul)会共同作为DCS Server。

元节点

在每套环境中,Pigsty最少需要一个元节点,该节点将作为整个环境的控制中心。

元节点负责各种管理工作:保存状态,管理配置,发起任务,收集指标,等等。

整个环境的基础设施组件,Nginx,Grafana,Prometheus,Alertmanager,NTP,DNS Nameserver,DCS都将部署在元节点上。

同时,元节点也将用于部署元数据库 (Consul 或 Etcd),用户也可以使用已有的外部DCS集群

如果将DCS部署至元节点上,建议在生产环境使用3个元节点,以充分保证DCS服务的可用性。

DCS外的基础设施组件都将以对等副本的方式部署在所有元节点上。

元节点的数量要求最少1个,推荐3个,建议不超过5个。

元节点上运行的服务如下所示:

组件 端口 默认域名 说明
Grafana 3000 g.pigsty Pigsty监控系统图形界面
Prometheus 9090 p.pigsty 监控时序数据库
AlterManager 9093 a.pigsty 报警聚合管理组件
Consul 8500 c.pigsty 分布式配置管理,服务发现
Consul DNS 8600 - Consul提供的DNS服务
Nginx 80 pigsty 所有服务的入口代理
Yum Repo 80 yum.pigsty 本地Yum源
Haproxy Index 80 h.pigsty 所有Haproxy管理界面的访问代理
NTP 123 n.pigsty 环境统一使用的NTP时间服务器
Dnsmasq 53 - 环境统一使用的DNS域名解析服务器

数据库集群

生产环境的数据库以集群为单位进行组织,集群是一个由主从复制所关联的一组数据库实例所构成的逻辑实体。每个数据库集群是一个自组织的业务服务单元,由至少一个数据库实例组成。

集群是基本的业务服务单元,下图展示了沙箱环境中的复制拓扑。其中pg-meta-1单独构成一个数据库集群pg-meta,而pg-test-1pg-test-2pg-test-3共同构成另一个逻辑集群pg-test

pg-meta-1
(primary)

pg-test-1 -------------> pg-test-2
(primary)      |         (replica)
               |
               ^-------> pg-test-3
                         (replica)

下图从数据库集群的视角重新排列pg-test集群中相关组件的位置。

图:从数据库集群的逻辑视角看架构

Pigsty是数据库供给方案,可以按需创建高可用数据库集群。只要集群中有任意实例存活,集群就可以对外提供完整的读写服务与只读服务。Pigsty可以自动进行故障切换,业务方只读流量不受影响;读写流量的影响视具体配置与负载,通常在几秒到几十秒的范围。

在Pigsty中,每个“数据库实例”在使用上是幂等的,采用类似NodePort的方式对外暴露服务。默认情况下,访问任意实例的5433端口即可访问主库,访问任意实例的5434端口即可访问从库。用户也可以灵活地同时使用不同的方式访问数据库。

数据库节点

数据库节点负责运行数据库实例,数据库实例采用独占式部署,一个节点上有且仅有一个数据库实例。

一个典型的数据库节点上运行的服务如下所示:

组件 端口 说明
Postgres 5432 Postgres数据库服务
Pgbouncer 6432 Pgbouncer连接池服务
Patroni 8008 Patroni高可用组件
Consul 8500 分布式配置管理,服务发现组件Consul的本地Agent
Haproxy Primary 5433 集群读写服务(主库)代理
Haproxy Replica 5434 集群只读服务(从库)代理
Haproxy Admin 9101 Haproxy 监控指标与管理页面
PG Exporter 9630 Postgres监控指标导出器
PGBouncer Exporter 9631 Pgbouncer监控指标导出器
Node Exporter 9100 机器节点监控指标导出器
Consul DNS 8600 Consul提供的DNS服务
vip-manager x 将VIP绑定至集群主库上
最后修改 2021-03-01: update provision concept (e831662)