PmaControl logo PmaControl
  • 首页
  • PmaControl
    • AI智能代理 13个本地代理
    • 定价方案 Community、Cloud、On-Premise、Premium
    • 文档 指南、API、架构
    • 客户 28+企业
    • 常见问题 25个问题 / 7个类别
    数据库
    • MariaDB 30 篇文章
    • MySQL 10 篇文章
    • Galera Cluster 6 篇文章
    • MaxScale 3 篇文章
    • ProxySQL 2 篇文章
    • Amazon Aurora MySQL 0 篇文章
    • Azure Database 0 篇文章
    • ClickHouse 0 篇文章
    • GCP CloudSQL 0 篇文章
    • Percona Server 0 篇文章
    • SingleStore 0 篇文章
    • TiDB 0 篇文章
    • Vitess 0 篇文章
    解决方案
    • 全天候支持 MariaDB & MySQL紧急支持
    • Observabilité SQL 监控、告警、拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Sécurité & conformité 审计、GDPR、SOC2
    • Migration & upgrade 零停机、pt-osc、gh-ost
  • 定价方案
  • 资源
    • 文档 技术指南与API
    • 常见问题 25个常见问题
    • 客户评价 客户反馈与案例
    • 博客 文章与洞察
    • 路线图 即将推出的功能
    专业领域
    • Observabilité SQL 监控、告警、Dot3拓扑
    • Haute disponibilité 复制、故障转移、Galera
    • Sécurité & conformité 审计、GDPR、SOC2、ISO 27001
    • Disaster Recovery 备份、恢复、RPO/RTO
    • Performance & optimisation Digests、EXPLAIN、调优
    • Migration & upgrade 零停机、pt-osc
    快速链接
    • GitHub Wiki 26页 — 安装、引擎、插件
    • 源代码 GitHub官方仓库
    • 全天候支持 MariaDB & MySQL紧急支持
    • 预约演示 30分钟 — 真实架构
  • 全天候支持
  • 预约演示
预约演示
🇫🇷 FR Français 🇬🇧 EN English 🇵🇱 PL Polski 🇷🇺 RU Русский 🇨🇳 ZH 中文
← 返回博客

Dot3:绘制复杂的 MariaDB / MySQL 拓扑结构

发布于 2026年3月21日 作者 Aurélien LEQUOY
pmacontrol topology graphviz proxysql architecture
分享 X LinkedIn Facebook Email PDF
Dot3:绘制复杂的 MariaDB / MySQL 拓扑结构

问题:不可见的拓扑结构

您有 40 个 MariaDB / MySQL 实例。其中一些使用主从复制,另一些运行主主复制。一个 5 节点的 Galera 集群。两个对等连接的 ProxySQL 实例。一个用于读路由的 MaxScale。用于跨数据中心访问的 SSH 隧道。隐藏真实 IP 的 DNS 别名。

一个简单的问题:您能在 5 分钟内画出完整的架构图吗?

在大多数组织中,答案是否定的。拓扑结构存在于过时的 Wiki 页面中、一个无人更新的 Confluence 页面里,或者存储在正在度假的资深 DBA 的大脑中。

Dot3 解决了这个问题。

什么是 Dot3?

Dot3 是 PmaControl 内置的拓扑映射引擎。它使用 Graphviz(DOT 语言)来生成数据库架构的可视化表示。

"Dot3"这个名字来源于该引擎的第三次迭代。前两个版本使用了简单的方法(连接列表、静态树)。Dot3 引入了动态端点解析和上下文渲染。

端点解析

Dot3 的第一步是理解 PmaControl 中配置的每个端点背后隐藏着什么。一个端点可以是:

1. 直接 MariaDB / MySQL 连接

最简单的情况。Dot3 连接到 3306 端口(或其他端口),运行 SHOW VARIABLES 和 SHOW SLAVE STATUS / SHOW REPLICA STATUS,并识别服务器角色(主库、从库、独立实例)。

2. ProxySQL

Dot3 通过检测管理端口(默认 6032)来识别 ProxySQL。通过连接管理端口,它获取:

  • runtime_mysql_servers:后端列表及其主机组
  • runtime_mysql_replication_hostgroups:写入器/读取器映射
  • proxysql_servers:ProxySQL 对等节点(用于集群)

这使得可以追踪 ProxySQL 与其后端之间的链接,以及 ProxySQL 对等节点之间的链接。

3. MaxScale

MaxScale 通过其 REST API(端口 8989)检测。Dot3 查询 /v1/servers 和 /v1/services 来重建后端拓扑和路由服务。

4. VIP 和浮动地址

当端点是 VIP(由 keepalived 或 Pacemaker 管理的虚拟 IP)时,Dot3 将地址解析到活跃的物理服务器。VIP 在图中以具有不同视觉样式的中间节点表示(菱形而非矩形)。

5. SSH 隧道

对于使用 SSH 隧道的多数据中心架构,Dot3 追踪完整路径:客户端 -> SSH 隧道 -> 真实端点。隧道在图中显示为虚线连接。

6. DNS 别名

Dot3 解析 DNS 别名(CNAME),并同时显示别名和真实主机名,避免同一服务器被多个名称引用时产生混淆。

渲染

一旦所有端点被解析,Dot3 生成一个 DOT 图,由 Graphviz 编译为 SVG(或 PNG)。以下是不同拓扑结构的表示方式。

主从复制

Master [shape=box, color=blue, label="db-master\n10.0.1.10:3306"]
Slave1 [shape=box, color=green, label="db-slave1\n10.0.1.11:3306"]
Slave2 [shape=box, color=green, label="db-slave2\n10.0.1.12:3306"]
Master -> Slave1 [label="repl"]
Master -> Slave2 [label="repl"]

复制箭头从主库指向从库(数据流方向)。当延迟较大时,延迟值显示在边上。

主主复制

双向复制用双箭头表示。当两台服务器通过 SHOW SLAVE STATUS 互相将对方识别为主库时,Dot3 检测到这种情况。

Master1 -> Master2 [dir=both, label="M-M"]

Galera 集群

Galera 节点被分组在一个带有虚线边框的子图中。每个节点根据其 wsrep 状态着色:

  • 已同步(Synced):绿色
  • 捐赠者/已去同步(Donor/Desynced):橙色
  • 加入中(Joining):黄色
  • 已断开连接(Disconnected):红色
subgraph cluster_galera_prod {
  label="Galera Prod (3 nodes)"
  style=dashed
  galera1 [color=green]
  galera2 [color=green]
  galera3 [color=green]
}

ProxySQL 对等连接

ProxySQL 对等节点之间的链接用双向虚线箭头绘制,在视觉上与 MariaDB / MySQL 复制链接区分开来。

SVG 中的 PNG 图标问题

在 Dot3 开发过程中,我们希望集成图标来直观地标识节点类型:MariaDB 图标、ProxySQL 图标、MaxScale 图标。

第一版实现使用了嵌入在 SVG 中的 PNG 图标,通过 <image> 标签配合 base64 href。这在浏览器中可以正常工作,但产生了几个问题:

  1. Graphviz 不能正确支持在其 SVG 输出中嵌入 PNG——位置会发生偏移
  2. 在 Retina/HiDPI 屏幕上渲染模糊
  3. 由于 base64 编码,SVG 文件体积急剧膨胀

解决方案:用原生 SVG 图标替换所有 PNG 图标。我们用纯矢量 SVG 重新创建了 proxysql.svg、maxscale.svg 等图标。效果:

  • 任何分辨率下都清晰锐利
  • 在 Graphviz 中位置准确
  • 文件大小减少了 5 倍

具体示例

以下是 Dot3 为一个电商客户生成的真实(已匿名化)拓扑:

ProxySQL-1 <-> ProxySQL-2          (对等连接)
    |               |
  [HG10: Writer]  [HG20: Readers]
    |               |
  Master --> Slave-1              (复制)
    |        Slave-2
    |        Slave-3
    |
  +---------------------+
  | Galera Cluster       |
  | Node-1  Node-2      |        (集群)
  | Node-3              |
  +---------------------+

这张图表是由 Dot3 自动生成的。无需手动配置布局。Dot3 发现拓扑、解析端点,Graphviz 处理布局。

在 PmaControl 中的集成

在 PmaControl 界面中,拓扑图通过拓扑选项卡访问。它自动刷新并反映实时状态:

  • 存在复制延迟的从库显示为红色边
  • 处于 Donor 状态的 Galera 节点会变色
  • 丢失后端的 ProxySQL 将其显示为灰色

生成的 SVG 是交互式的:点击节点会打开 PmaControl 中的服务器详情页面。

局限性和计划改进

Dot3 在 1 到 100 个节点的拓扑中运行良好。超过这个规模,Graphviz 的布局可能会变得混乱。计划的改进包括:

  1. 标签过滤:仅显示拓扑的子集(按环境、客户或数据中心)
  2. 差异模式:比较两个拓扑快照以可视化变更
  3. Terraform 导出:生成发现的拓扑的基础设施即代码描述

总结

MariaDB / MySQL 基础架构的拓扑结构不应该是记录在过期 Wiki 中的谜团。Dot3 自动发现、解析并绘制拓扑。

这就是"我认为复制连接到那台服务器"和"我看到复制连接到那台服务器,延迟 3 秒,已持续 14 天"之间的区别。

分享 X LinkedIn Facebook Email PDF
← 返回博客

评论 (0)

暂无评论。

发表评论

PmaControl
+33 6 63 28 27 47 contact@pmacontrol.com
法律声明 GitHub 联系我们
不要等到故障发生才了解您的架构。 © 2014-2026 PmaControl — 68Koncept