
1. MySQL Router 核心功能解析MySQL Router 是 MySQL 官方提供的轻量级中间件专门用于实现数据库请求的路由和负载均衡。作为 InnoDB Cluster 架构的关键组件它主要解决以下生产环境痛点读写分离通过端口映射区分读写流量通常读操作走 7001 端口写操作走 7002 端口高可用保障自动检测后端节点状态故障时切换连接负载均衡对读请求采用轮询策略避免单节点过载实际部署中Router 通常独立部署在应用服务器与数据库节点之间。与传统的 ProxySQL 相比其优势在于官方原生支持版本兼容性更好配置更简洁维护成本低与 Group Replication 深度集成重要提示生产环境建议 Router 至少部署 2 个实例形成高可用避免单点故障导致整个系统不可用2. 安装部署实操指南2.1 系统环境准备推荐使用 EL9 系列操作系统如 Rocky Linux 9确保满足以下条件内存 ≥ 1GB磁盘空间 ≥ 500MB已配置正确的 hosts 解析防火墙开放 7001/7002 端口# 检查系统版本 cat /etc/redhat-release # 临时关闭 SELinux生产环境需配置策略 setenforce 0 # 防火墙放行端口 firewall-cmd --add-port7001/tcp --permanent firewall-cmd --add-port7002/tcp --permanent systemctl reload firewalld2.2 二进制包安装MySQL 提供多种安装方式企业环境推荐使用 RPM 包# 下载指定版本注意匹配操作系统 wget https://downloads.mysql.com/archives/get/p/41/file/mysql-router-community-8.4.7-1.el9.x86_64.rpm # 安装依赖项 dnf install -y libaio numactl openssl # 安装Router rpm -ivh mysql-router-community-8.4.7-1.el9.x86_64.rpm安装完成后关键目录结构/usr/bin/mysqlrouter主程序/etc/mysqlrouter配置文件目录/var/lib/mysqlrouter数据目录/var/log/mysqlrouter日志目录3. 核心配置详解3.1 主配置文件解析编辑/etc/mysqlrouter/mysqlrouter.conf需重点关注以下段落[DEFAULT] # 日志配置 logging_folder /var/log/mysqlrouter plugin_folder /usr/lib64/mysqlrouter runtime_folder /var/run/mysqlrouter config_folder /etc/mysqlrouter [routing:ro] # 读路由配置 bind_address 0.0.0.0 bind_port 7001 destinations 172.25.254.10:3306,172.25.254.20:3306,172.25.254.30:3306 routing_strategy round-robin max_connections 1024 connect_timeout 3 [routing:rw] # 写路由配置 bind_address 0.0.0.0 bind_port 7002 destinations 172.25.254.30:3306,172.25.254.20:3306,172.25.254.10:3306 routing_strategy first-available max_connections 512 connect_timeout 5配置要点说明routing_strategy策略选择round-robin适合读操作负载均衡first-available写操作优先选择列表第一个可用节点next-available故障时自动切换到下一个节点连接数建议比例读:写 ≈ 2:1根据业务特点调整超时时间写操作应大于读操作3.2 服务管理命令# 启动服务 systemctl start mysqlrouter # 设置开机自启 systemctl enable mysqlrouter # 检查状态 systemctl status mysqlrouter # 查看监听端口应出现7001/7002 netstat -tulnp | grep mysqlrouter4. 生产环境调优建议4.1 性能优化参数在[DEFAULT]段添加以下参数# 连接池配置 max_idle_server_connections 20 client_connect_timeout 9 # 线程配置 worker_threads 16 # 建议为CPU核心数的2倍 # 内存限制 max_total_connections 20484.2 高可用方案推荐部署架构------------- | Application | ------------ | ---------------------------- | | ---------- ---------- | Router01 | | Router02 | ---------- ---------- | | ------------------ ------------------ | Primary Node | | Secondary Node | | 172.25.254.10 | | 172.25.254.20 | ------------------- -------------------关键措施使用 Keepalived 实现 Router 的 VIP 漂移配置多组 destinations 时确保节点顺序符合故障转移预期启用 Router 的自动重连机制# 在路由段添加 max_connect_errors 1005. 故障排查手册5.1 常见问题诊断问题1客户端连接超时检查项# 验证网络连通性 ping 172.25.254.40 telnet 172.25.254.40 7001 # 检查防火墙规则 iptables -L -n # 查看Router日志 tail -f /var/log/mysqlrouter/mysqlrouter.log问题2读写分离失效排查步骤确认应用连接的是正确端口检查后端MySQL用户权限验证路由策略配置5.2 监控指标收集关键监控项及采集命令指标类别监控命令健康阈值连接数SHOW STATUS LIKE connections 最大连接数80%请求QPSSHOW STATUS LIKE queries根据业务定制后端节点状态SELECT * FROM performance_schema.replication_group_membersONLINE线程使用率top -H -p $(pgrep mysqlrouter) 70%6. 安全加固方案6.1 访问控制措施限制监听IP非必要不绑定 0.0.0.0bind_address 10.0.0.100 # 指定内网IP启用SSL加密[routing:rw] client_ssl_mode REQUIRED server_ssl_mode REQUIRED ssl_cert /path/to/server-cert.pem ssl_key /path/to/server-key.pem数据库账户权限最小化CREATE USER router_user172.25.254.% IDENTIFIED BY ComplexPwd!2023; GRANT REPLICATION CLIENT ON *.* TO router_user172.25.254.%;6.2 审计日志配置在配置文件中添加[logger] level INFO sinks filelog [filelog] filename /var/log/mysqlrouter/audit.log max_bytes 1000000 backup_count 5日志分析建议# 统计错误日志 grep ERROR /var/log/mysqlrouter/audit.log | awk {print $4} | sort | uniq -c # 监控慢查询 grep slow /var/log/mysqlrouter/audit.log经过多年实战检验MySQL Router 在读写分离场景下的稳定性优于大多数开源方案。特别是在 8.0 版本后其与 Group Replication 的协同效率显著提升。对于中小规模集群直接使用 Router 比自行搭建 ProxySQL 更省心。不过需要注意当节点数量超过 15 个时建议考虑使用多个 Router 实例进行分组管理