系统架构
Module:
Categories:
一套标准的 Pigsty 部署会带有一个 INFRA
模块,为纳管的节点与数据库集群提供服务:
- Nginx:作为 Web 服务器,提供本地软件仓库服务;作为反向代理,统一收拢其他 Web UI 服务的访问
- Grafana:可视化平台,呈现监控指标,展现面板大屏,或者进行数据分析与可视化。
- Loki:集中收集存储日志,便于从 Grafana 中查询。
- Prometheus:监控时序数据库,拉取监控指标,存储监控数据,计算报警规则。
- AlertManager:聚合告警事件,分发告警通知,告警屏蔽与管理。
- PushGateway:收集一次性任务/跑批任务的监控指标
- BlackboxExporter:探测各个节点 IP 与 VIP 地址的可达性
- DNSMASQ:提供 DNS 解析服务,解析 Pigsty 内部使用到的域名
- Chronyd:提供 NTP 时间同步服务,确保所有节点时间一致
INFRA 模块对于高可用 PostgreSQL 并非必选项,例如在 精简安装 模式下,就不会安装 Infra 模块。
但 INFRA 模块提供了运行生产级高可用 PostgreSQL 集群所需要的支持性服务,通常强烈建议安装启用。
如果您已经有自己的基础设施(Nginx,本地仓库,监控系统,DNS,NTP),您也可以停用 INFRA 模块,并通过 修改配置 来使用现有的基础设施。
架构总览
Infra 模块默认包含以下组件,使用以下默认端口与域名:
组件 | 端口 | 默认域名 | 描述 |
---|---|---|---|
Nginx | 80/443 |
h.pigsty |
Web服务门户(本地软件仓库) |
Grafana | 3000 |
g.pigsty |
可视化平台 |
Prometheus | 9090 |
p.pigsty |
时间序列数据库(收存监控指标) |
AlertManager | 9093 |
a.pigsty |
告警聚合分发 |
Loki | 3100 |
- | 日志收集服务器 |
PushGateway | 9091 |
- | 接受一次性的任务指标 |
BlackboxExporter | 9115 |
- | 黑盒监控探测 |
DNSMasq | 53 |
- | DNS 服务器 |
Chronyd | 123 |
- | NTP 时间服务器 |
在单机上完整安装 Pigsty 功能集,节点上的组件大致如下图所示:
在默认情况下,INFRA 模块的故障 通常 不会影响现有 PostgreSQL 数据库集群的正常运行
在 Pigsty 中,PGSQL 模块会使用到 INFRA 模块上的一些服务,具体来说包括:
-
数据库集群/主机节点的域名,依赖INFRA节点的 DNSMASQ 解析。
- Pigsty 本身不使用这些域名,而使用 IP 地址直连,避免依赖 DNS。
-
在数据库节点软件上安装,需要用到 INFRA 模块提供的 Nginx 本地 yum/apt 软件仓库。
- 用户可以直接指定
repo_upstream
与node_repo_modules
,直接从互联网上游/其他本地仓库下载/安装软件
- 用户可以直接指定
-
数据库集群/节点的监控指标,会被INFRA节点的 Prometheus 收集抓取。
- 当
prometheus_enabled
为false
,不会收集监控指标。
- 当
-
数据库节点的日志会被 Promtail 收集,并发往 INFRA节点 上的 Loki(只会发往
infra_portal
定义的端点)。- 如果
loki_enabled
为false
,则不会收集日志。
- 如果
-
数据库节点默认会从 INFRA/ADMIN节点 上的 NTP/Chronyd 服务器同步时间
- 如果是 Infra 节点,会默认配置使用公共 NTP 服务器,
- 其他节点会使用 INFRA/ADMIN 节点上的 NTP/Chronyd 服务器同步时间
- 如果您有专用 NTP 服务器,可以配置
node_ntp_servers
使用
-
如果没有专用集群,高可用组件 Patroni 会使用 INFRA 节点上的 etcd 作为高可用DCS。
-
如果没有专用集群,备份组件 pgbackrest 会使用 INFRA 节点上的 minio 作为可选的集中备份仓库。
-
用户会从 Infra/Admin 节点上使用 Ansible 或其他工具发起对数据库节点的 管理:
- 执行集群创建,扩缩容,实例/集群回收
- 创建业务用户、业务数据库、修改服务、HBA修改;
- 执行日志采集、垃圾清理,备份,巡检等
Nginx
Nginx 是 Pigsty 所有 WebUI 类服务的访问入口,默认使用 80 / 443 端口对外提供 HTTP / HTTPS 服务。
带有 WebUI 的基础设施组件可以通过 Nginx 统一对外暴露服务,例如 Grafana,Prometheus,AlertManager,以及 HAProxy 控制台,此外,本地 yum/apt 仓库等静态文件资源也通过 Nginx 对内提供服务。
Nginx 会根据 infra_portal
的定义配置本地 Web 服务器或反向代理服务器,例如默认配置为:
infra_portal:
home : { domain: h.pigsty }
grafana : { domain: g.pigsty ,endpoint: "${admin_ip}:3000" ,websocket: true }
prometheus : { domain: p.pigsty ,endpoint: "${admin_ip}:9090" }
alertmanager : { domain: a.pigsty ,endpoint: "${admin_ip}:9093" }
blackbox : { endpoint: "${admin_ip}:9115" }
loki : { endpoint: "${admin_ip}:3100" }
#minio : { domain: sss.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
在这里默认记录的 endpoint
会被环境中的其他服务引用,例如,日志会发往 loki
对应的 endpoint
地址,而 Grafana 数据源会注册到 grafana
对应的 endpoint
地址,告警会发送至 alertmanager
对应的 endpoint
地址。
Pigsty 允许对 Nginx 进行丰富的定制,将其作为本地文件服务器,或者反向代理服务器,配置自签名或者真正的 HTTPS 证书。
Pigsty Demo 站点的样例 Nginx 配置
infra_portal: # domain names and upstream servers
home : { domain: home.pigsty.cc ,certbot: pigsty.demo }
grafana : { domain: demo.pigsty.cc ,endpoint: "${admin_ip}:3000", websocket: true ,certbot: pigsty.demo }
prometheus : { domain: p.pigsty.cc ,endpoint: "${admin_ip}:9090" ,certbot: pigsty.demo }
alertmanager : { domain: a.pigsty.cc ,endpoint: "${admin_ip}:9093" ,certbot: pigsty.demo }
blackbox : { endpoint: "${admin_ip}:9115" }
loki : { endpoint: "${admin_ip}:3100" }
postgrest : { domain: api.pigsty.cc ,endpoint: "127.0.0.1:8884" }
pgadmin : { domain: adm.pigsty.cc ,endpoint: "127.0.0.1:8885" }
pgweb : { domain: cli.pigsty.cc ,endpoint: "127.0.0.1:8886" }
bytebase : { domain: ddl.pigsty.cc ,endpoint: "127.0.0.1:8887" }
jupyter : { domain: lab.pigsty.cc ,endpoint: "127.0.0.1:8888" ,websocket: true }
gitea : { domain: git.pigsty.cc ,endpoint: "127.0.0.1:8889" ,certbot: pigsty.cc }
wiki : { domain: wiki.pigsty.cc ,endpoint: "127.0.0.1:9002" ,certbot: pigsty.cc }
noco : { domain: noco.pigsty.cc ,endpoint: "127.0.0.1:9003" ,certbot: pigsty.cc }
supa : { domain: supa.pigsty.cc ,endpoint: "10.2.82.163:8000" ,websocket: true ,certbot: pigsty.cc }
dify : { domain: dify.pigsty.cc ,endpoint: "10.2.82.163:8001" ,websocket: true ,certbot: pigsty.cc }
odoo : { domain: odoo.pigsty.cc ,endpoint: "127.0.0.1:8069" ,websocket: true ,certbot: pigsty.cc }
mm : { domain: mm.pigsty.cc ,endpoint: "10.2.82.163:8065" ,websocket: true }
web.io:
domain: en.pigsty.cc
path: "/www/web.io"
certbot: pigsty.doc
enforce_https: true
config: |
# rewrite /zh/ to /
location /zh/ {
rewrite ^/zh/(.*)$ /$1 permanent;
}
web.cc:
domain: pigsty.cc
path: "/www/web.cc"
domains: [ zh.pigsty.cc ]
certbot: pigsty.doc
config: |
# rewrite /zh/ to /
location /zh/ {
rewrite ^/zh/(.*)$ /$1 permanent;
}
repo:
domain: pro.pigsty.cc
path: "/www/repo"
index: true
certbot: pigsty.doc
更多信息,请参考以下教程:
本地软件仓库
Pigsty 会在安装时,默认在 Infra 节点是那个创建一个本地软件仓库,以加速后续软件安装。
该软件仓库默认位位于 /www/pigsty
目录,由 Nginx 提供服务,可以访问 http://h.pigsty/pigsty
使用。
Pigsty的 离线软件包 是将已经建立好的软件源目录整个打成压缩包:当Pigsty尝试构建本地源时,如果发现本地源目录 /www/pigsty
已经存在,且带有 /www/pigsty/repo_complete
标记文件,则会认为本地源已经构建完成,从而跳过从原始上游下载软件的步骤,消除了对互联网访问的依赖。
Repo定义文件位于 /www/pigsty.repo
,默认可以通过 http://${admin_ip}/pigsty.repo
获取
curl -L http://h.pigsty/pigsty.repo -o /etc/yum.repos.d/pigsty.repo
您也可以在没有Nginx的情况下直接使用文件本地源:
[pigsty-local]
name=Pigsty local $releasever - $basearch
baseurl=file:///www/pigsty/
enabled=1
gpgcheck=0
本地软件仓库相关配置参数位于:配置:INFRA - REPO
Prometheus
Prometheus是监控时序数据库,默认监听9090端口,可以直接通过IP:9090
或域名http://p.pigsty
访问。
Prometheus是监控用时序数据库,提供以下功能:
- Prometheus默认通过本地静态文件服务发现获取监控对象,并为其关联身份信息。
- Prometheus从Exporter拉取监控指标数据,进行预计算加工后存入自己的TSDB中。
- Prometheus计算报警规则,将报警事件发往Alertmanager处理。
AlertManager是与Prometheus配套的告警平台,默认监听9093端口,可以直接通过IP:9093
或域名 http://a.pigsty
访问。
Prometheus的告警事件会发送至AlertManager,但如果需要进一步处理,用户需要进一步对其进行配置,例如提供SMTP服务配置以发送告警邮件。
Prometheus、AlertManager,PushGateway,BlackboxExporter 的相关配置参数位于:配置:INFRA - PROMETHEUS
Grafana
Grafana是开源的可视化/监控平台,是Pigsty WebUI的核心,默认监听3000端口,可以直接通过IP:3000
或域名http://g.pigsty
访问。
Pigsty的监控系统基于Dashboard构建,通过URL进行连接与跳转。您可以快速地在监控中下钻上卷,快速定位故障与问题。
此外,Grafana还可以用作通用的低代码前后端平台,制作交互式可视化数据应用。因此,Pigsty使用的Grafana带有一些额外的可视化插件,例如ECharts面板。
Loki是用于日志收集的日志数据库,默认监听3100端口,节点上的Promtail向元节点上的Loki推送日志。
Grafana与Loki相关配置参数位于:配置:INFRA - GRAFANA,配置:INFRA - Loki
Ansible
Pigsty默认会在元节点上安装Ansible,Ansible是一个流行的运维工具,采用声明式的配置风格与幂等的剧本设计,可以极大降低系统维护的复杂度。
DNSMASQ
DNSMASQ 提供环境内的DNS解析服务,其他模块的域名将会注册到 INFRA节点上的 DNSMASQ 服务中。
DNS记录默认放置于所有INFRA节点的 /etc/hosts.d/
目录中。
DNSMASQ相关配置参数位于:配置:INFRA - DNS
Chronyd
NTP服务用于同步环境内所有节点的时间(可选)
NTP相关配置参数位于:配置:NODES - NTP