MySQL Router 是什么
MySQL Router 是官方轻量代理,为 InnoDB Cluster / MGR 提供稳定的读写入口:客户端连 Router 的读写端口,Router 把写流量转给当前主库、读流量负载均衡到从库。主库切换时 Router 通过集群元数据感知新主,客户端无需修改连接串。它本身无状态,可以多实例部署,是 MGR 架构里承担「连接路由层」的标配组件。
基本信息
| 读写端口 | 6446,指向当前主库 |
|---|---|
| 只读端口 | 6447,负载均衡到从库 |
| 管理接口 | 8443,提供 REST 风格的集群信息 |
| 初始化 | mysqlrouter --bootstrap 用户名@主机,自动拉取集群元数据 |
| 配合组件 | InnoDB Cluster / MGR,与 MySQL Shell 配套使用 |
典型使用场景
- MGR 集群接入:应用只配置一个连接地址,主库切换对应用透明
- 读写分流:写操作走读写端口,报表类读操作指向只读端口
- 连接收敛:减少应用直连每个实例的连接数量
- 灰度与迁移:切换集群或新增节点时,从 Router 层调整路由而不动应用配置
- 多实例高可用:多台 Router 前置,配合客户端重试避免单点
端口与命令速览
端口与命令速览
-- 典型端口布局(默认值,可按需调整)
6446 读写端口,指向当前主库
6447 只读端口,负载均衡到从库
8443 管理接口,查询集群与路由状态
-- 启动与初始化
mysqlrouter --bootstrap dba@10.0.0.10:3306 --user=mysqlrouter
mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf
-- 查看路由状态(管理接口)
curl -s --user dba:pass https://10.0.0.20:8443/api/20190715/routes端口与用途
| 端口 | 用途 | 注意 |
|---|---|---|
| 6446 | 读写流量,指向当前主库 | 主库切换后由 Router 自动改指向 |
| 6447 | 只读流量,负载均衡到从库 | 弱一致读场景要注意延迟 |
| 8443 | 管理与状态查询 | 需要认证,不要暴露到公网 |
| 3306 | 后端实例端口 | Router 与后端之间使用 |
bootstrap 会把集群连接元数据写入 Router 配置:集群拓扑变化后 Router 自动更新路由目标,所以应用连接串只需要改一次指向 Router。
单实例部署的 Router 自身就是单点:生产至少部署两个实例,并在客户端配置连接重试与超时,避免单一 Router 故障导致整体不可用。