目录标题
MaxScale 中间件的流量转发机制与 CoreDNS 作用
一、整体概述
在 Kubernetes 环境中,MaxScale 作为数据库代理中间件,需要依赖 CoreDNS 完成后端数据库节点的服务发现与流量转发。
这种架构利用 Kubernetes Headless Service 返回 Pod IP,结合 MaxScale 的路由逻辑,实现读写分离、负载均衡与高可用。
二、流量转发机制
1. DNS 解析依赖 —— CoreDNS 是必需的
-
MaxScale 配置中使用 Kubernetes Headless Service 名称 作为后端数据库节点地址:
mysql-9400c17200-headlessmysql-9400c17201-headlessmysql-9400c17202-headless
-
无法解析这些名称 → MaxScale 无法建立数据库连接。
2. DNS 解析流程
MaxScale 启动 → 读取配置文件 → 解析后端服务器地址
↓
CoreDNS 解析 Headless Service 名称
↓
返回对应 Pod IP(或解析失败)
示例解析结果:
mysql-9400c17200-headless.qfusion-text.svc.cluster.local→245.0.2.246mysql-9400c17201-headless.qfusion-text.svc.cluster.local→245.0.1.46mysql-9400c17202-headless.qfusion-text.svc.cluster.local→ 解析失败(Pod 未就绪)
3. 连接建立过程
-
DNS 解析阶段
-
MaxScale → CoreDNS → kube-dns/kubernetes 插件 → API Server
-
Headless Service 返回 真实 Pod IP(非 ClusterIP)
-
DNS 查询路径:
MaxScale Pod → CoreDNS(246.96.0.10) → API Server
-
-
TCP 连接阶段
-
MaxScale Pod (
245.0.0.178) 建立到后端 MySQL 节点的直连:Master 245.0.2.246:3306 [ESTABLISHED] Slave 245.0.1.46:3306 [ESTABLISHED]
-
-
健康检查阶段
- MariaDB Monitor 每 1000ms 检测节点状态
server-2因 DNS 解析失败 → 标记为 Down,不参与路由
4. CoreDNS 关键配置
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure # 允许直接解析 Pod IP
fallthrough in-addr.arpa ip6.arpa
ttl 30 # DNS 缓存 30 秒
}
pods insecure→ 允许返回 Pod IPttl 30→ 每 30 秒可重新解析,感知 Pod IP 变化
5. Headless Service 的作用
| 类型 | 返回结果 | 负载均衡方式 |
|---|---|---|
| 普通 Service | ClusterIP | kube-proxy 负载均衡 |
| Headless Service | Pod IP 列表 | 客户端(MaxScale)自行选择 |
在本架构中,MaxScale 直接使用 Pod IP,实现对具体数据库实例的直接连接与路由控制。
6. 流量路由决策(MaxScale)
-
获取 Pod IP(通过 CoreDNS)
-
路由策略:
- 写操作 →
245.0.2.246:3306(Master) - 读操作 →
245.0.2.246:3306(Master)或245.0.1.46:3306(Slave) - 延迟超阈值(如 >30s)的节点不参与读流量
- 写操作 →
三、核心优势与高可用特性
-
启动依赖
- MaxScale 必须依赖 CoreDNS 完成节点名称解析,才能正常启动
-
动态发现
- TTL 机制(30s)使得 Pod IP 变化可被自动感知
-
故障剔除
- DNS 解析失败或健康检查失败的节点自动移出路由
-
原生高可用
- 利用 Kubernetes 服务发现 + MaxScale 智能路由,实现无感知的主从切换与负载均衡
四、运行流程图
[客户端请求]
↓
[K8s Service]
↓
[MaxScale Pod] --(DNS 查询)--> [CoreDNS] --(API 查询)--> [API Server]
↓
[获取真实 Pod IP]
↓
[建立 TCP 连接到后端 MySQL Pod]
↓
[根据 SQL 类型 & 延迟状态选择 Master / Slave]
如果你需要的话,我还可以帮你画一个 Kubernetes + CoreDNS + MaxScale + MySQL 的流量拓扑图,让这个流程更直观可视化。
你要我帮你画吗?这样可以直接展示从 Service → MaxScale → CoreDNS → MySQL Pod 的整个路径。

被折叠的 条评论
为什么被折叠?



