外观
MySQL Router使用指南
安装MySQL Router
1. 系统要求
- 操作系统:Linux、Windows、macOS等
- MySQL版本:与后端MySQL服务器版本兼容
- 硬件要求:至少1核CPU,1GB内存,10GB磁盘空间
- 网络要求:能够与后端MySQL服务器通信
2. 安装方法
Linux系统安装
使用MySQL官方仓库:
bash# CentOS/RHEL wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm rpm -ivh mysql80-community-release-el7-3.noarch.rpm yum install -y mysql-router # Ubuntu/Debian wget https://dev.mysql.com/get/mysql-apt-config_0.8.17-1_all.deb dpkg -i mysql-apt-config_0.8.17-1_all.deb apt-get update apt-get install -y mysql-router二进制包安装:
bash# 下载MySQL Router二进制包 wget https://dev.mysql.com/get/Downloads/MySQL-Router/mysql-router-8.0.32-linux-glibc2.17-x86_64.tar.xz # 解压安装 tar -xf mysql-router-8.0.32-linux-glibc2.17-x86_64.tar.xz mv mysql-router-8.0.32-linux-glibc2.17-x86_64 /usr/local/mysql-router # 配置环境变量
echo 'export PATH=$PATH:/usr/local/mysql-router/bin' >> /etc/profile source /etc/profile
#### Windows系统安装
- **使用MSI安装包**:
1. 从MySQL官网下载MySQL Router MSI安装包
2. 双击运行安装程序,按照向导完成安装
3. 配置环境变量,将MySQL Router安装目录添加到PATH
#### 验证安装
```bash
# 查看MySQL Router版本
mysqlrouter --versionMySQL Router配置
1. 配置文件结构
默认配置文件位置:
- Linux:
/etc/mysqlrouter/mysqlrouter.conf - Windows:
C:\ProgramData\MySQL\MySQL Router\mysqlrouter.conf
- Linux:
配置文件格式:INI格式,包含多个节(section)
2. 基本配置示例
ini
# 全局配置
[DEFAULT]
logging_folder = /var/log/mysqlrouter
plugin_folder = /usr/lib64/mysqlrouter
config_folder = /etc/mysqlrouter
runtime_folder = /var/run/mysqlrouter
# 管理端口配置
[management]
port = 8443
ssl = on
ssl_cert = /etc/mysqlrouter/router-cert.pem
ssl_key = /etc/mysqlrouter/router-key.pem
# 读写分离配置
[routing:primary]
bind_address = 0.0.0.0
bind_port = 6446
destination_port = 3306
mode = read-write
destinations = 192.168.1.100:3306,192.168.1.101:3306
# 只读配置
[routing:replica]
bind_address = 0.0.0.0
bind_port = 6447
destination_port = 3306
mode = read-only
destinations = 192.168.1.102:3306,192.168.1.103:33063. 配置选项说明
全局配置:
logging_folder:日志文件存放目录plugin_folder:插件存放目录config_folder:配置文件存放目录runtime_folder:运行时文件存放目录
路由配置:
bind_address:监听地址bind_port:监听端口mode:路由模式(read-write、read-only、read-auto、write-only)destinations:后端MySQL服务器列表connect_timeout:连接超时时间read_timeout:读取超时时间write_timeout:写入超时时间
4. 动态配置
使用MySQL InnoDB Cluster:
bash# 从InnoDB Cluster自动获取配置 mysqlrouter --bootstrap root@192.168.1.100:3306 --user=mysqlrouter动态配置更新:
bash# 查看当前配置 mysqlrouter --config-use-directives # 重新加载配置 mysqlrouter --reload-config
高可用部署
1. 与MySQL InnoDB Cluster集成
自动配置:
bash# 引导MySQL Router连接到InnoDB Cluster mysqlrouter --bootstrap clusteradmin@192.168.1.100:3306 --user=mysqlrouter --name=router1配置文件生成:引导过程会自动生成配置文件,包含读写和只读路由
2. 手动配置高可用
配置多个MySQL Router实例:
bash# Router 1配置 [routing:primary] bind_address = 192.168.1.200 bind_port = 6446 mode = read-write destinations = 192.168.1.100:3306,192.168.1.101:3306 # Router 2配置 [routing:primary] bind_address = 192.168.1.201 bind_port = 6446 mode = read-write destinations = 192.168.1.100:3306,192.168.1.101:3306使用负载均衡器:在多个MySQL Router实例前部署负载均衡器(如HAProxy、Nginx)
3. 故障转移配置
- 自动故障检测:MySQL Router定期检查后端服务器状态
- 故障转移策略:
- 读写路由:自动切换到可用的主服务器
- 只读路由:自动排除不可用的从服务器
- 恢复检测:自动检测恢复的服务器并重新添加到路由列表
负载均衡策略
1. 轮询(Round Robin)
- 默认策略:按顺序将请求分配给后端服务器
- 配置:无需额外配置,默认启用
2. 权重负载均衡
- 配置方法:在destinations中指定权重
- 示例:ini
[routing:replica] mode = read-only
destinations = 192.168.1.102:3306(weight=3),192.168.1.103:3306(weight=1)
### 3. 最少连接数
- **配置方法**:启用least_connections插件
- **示例**:
```ini
[routing:replica]
mode = read-only
destinations = 192.168.1.102:3306,192.168.1.103:3306
routing_strategy = least_connections监控与管理
1. 管理API
启用管理API:
ini[management] port = 8443 ssl = on ssl_cert = /etc/mysqlrouter/router-cert.pem ssl_key = /etc/mysqlrouter/router-key.pem使用管理API:
bash# 获取路由状态 curl -k https://localhost:8443/api/20190715/routes # 获取后端服务器状态 curl -k https://localhost:8443/api/20190715/backends
2. 日志监控
查看日志文件:
bash# 查看MySQL Router日志 tail -f /var/log/mysqlrouter/mysqlrouter.log配置日志级别:
ini[DEFAULT] logging_level = INFO日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
3. 状态检查
检查MySQL Router进程:
bashps aux | grep mysqlrouter检查监听端口:
bashnetstat -tlnp | grep mysqlrouter
安全配置
1. SSL/TLS配置
启用SSL连接:
ini[routing:primary] bind_address = 0.0.0.0 bind_port = 6446 mode = read-write destinations = 192.168.1.100:3306 ssl = on ssl_cert = /etc/mysqlrouter/server-cert.pem ssl_key = /etc/mysqlrouter/server-key.pem ssl_ca = /etc/mysqlrouter/ca.pem客户端SSL验证:
inissl_verify_server_cert = on
2. 访问控制
限制绑定地址:
inibind_address = 192.168.1.200使用防火墙:
bash# 开放MySQL Router端口 firewall-cmd --permanent --add-port=6446/tcp firewall-cmd --permanent --add-port=6447/tcp firewall-cmd --reload
3. 密码管理
- 使用密钥环:bash
# 生成密钥环 mysqlrouter_keyring create --keyring-file=/etc/mysqlrouter/keyring # 配置密钥环 [keyring] backend = file keyring_file = /etc/mysqlrouter/keyring
性能优化
1. 连接池配置
- 配置连接池大小:ini
[routing:primary] max_connections = 1000 max_idle_connections = 100
2. 线程配置
- 配置工作线程数:ini
[routing:primary] threads = 4
3. 超时配置
- 调整超时参数:ini
[routing:primary] connect_timeout = 5 read_timeout = 30 write_timeout = 30 idle_timeout = 3600
常见问题与解决方案
1. MySQL Router无法启动
- 问题:启动失败,提示配置文件错误
- 解决方案:bash
# 检查配置文件语法 mysqlrouter --validate-config # 查看详细错误日志 tail -f /var/log/mysqlrouter/mysqlrouter.log
2. 无法连接到后端MySQL服务器
- 问题:MySQL Router无法连接到后端服务器
- 解决方案:bash
# 检查网络连接 ping 192.168.1.100 telnet 192.168.1.100 3306 # 检查后端服务器状态 mysql -u root -p -h 192.168.1.100
3. 负载均衡不均
- 问题:请求分配不均匀,某些服务器负载过高
- 解决方案:ini
# 配置权重负载均衡 destinations = 192.168.1.102:3306(weight=3),192.168.1.103:3306(weight=1)
4. 管理API无法访问
- 问题:无法访问MySQL Router管理API
- 解决方案:bash
# 检查管理API配置 grep -A 10 "\[management\]" /etc/mysqlrouter/mysqlrouter.conf # 检查防火墙设置 firewall-cmd --list-ports
不同MySQL版本的差异
MySQL Router 8.0
新特性:
- 支持InnoDB Cluster自动配置
- 增强的管理API
- 改进的负载均衡算法
- 支持密钥环
- 改进的日志系统
配置变化:
- 新增了一些配置选项
- 废弃了一些旧版本的配置选项
- 增强了SSL支持
MySQL Router 5.7
特性:
- 基本的路由功能
- 支持读写分离
- 简单的负载均衡
- 有限的高可用支持
限制:
- 不支持InnoDB Cluster自动配置
- 管理API功能有限
- 负载均衡算法较少
常见问题(FAQ)
Q1: MySQL Router和ProxySQL有什么区别?
A1: 主要区别:
- MySQL Router:官方工具,与InnoDB Cluster深度集成,配置简单,适合MySQL生态
- ProxySQL:第三方工具,功能丰富,支持更复杂的负载均衡算法和规则,适合多数据库环境
- 性能:ProxySQL在某些场景下性能更好
- 易用性:MySQL Router更易于配置和管理
Q2: 如何选择MySQL Router的部署模式?
A2: 部署模式选择:
- 单实例部署:适合测试环境和小型应用
- 多实例部署+负载均衡器:适合生产环境,提供更高的可用性
- 与InnoDB Cluster集成:适合需要自动故障转移的高可用场景
Q3: MySQL Router如何处理主服务器故障?
A3: 主服务器故障处理:
- 定期检查后端服务器状态
- 检测到主服务器故障时,自动将请求切换到其他可用的主服务器
- 对于InnoDB Cluster,会自动获取最新的主服务器信息
- 故障恢复后,自动将服务器重新添加到路由列表
Q4: 如何监控MySQL Router的性能?
A4: 性能监控方法:
- 使用管理API获取路由状态和后端服务器状态
- 分析MySQL Router日志,查看连接数、请求数等指标
- 使用第三方监控工具,如Prometheus+Grafana
- 监控系统资源使用情况(CPU、内存、网络)
Q5: 如何升级MySQL Router?
A5: 升级步骤:
- 备份当前配置文件
- 停止当前MySQL Router实例
- 安装新版本MySQL Router
- 恢复配置文件(注意兼容性)
- 启动新版本MySQL Router
- 验证功能正常
Q6: MySQL Router支持哪些负载均衡算法?
A6: 支持的负载均衡算法:
- 轮询(Round Robin):默认算法
- 权重负载均衡:根据权重分配请求
- 最少连接数:将请求分配给连接数最少的服务器
- 随机:随机分配请求
Q7: 如何配置MySQL Router的日志?
A7: 日志配置方法:
- 配置日志级别:
logging_level = INFO - 配置日志文件:
logging_folder = /var/log/mysqlrouter - 配置日志格式:
log_format = json - 配置日志轮转:
log_rotate_size = 100M
Q8: 如何确保MySQL Router的安全性?
A8: 安全最佳实践:
- 启用SSL/TLS加密连接
- 限制MySQL Router的绑定地址
- 使用防火墙限制访问
- 定期更新MySQL Router版本
- 使用强密码和密钥环管理
- 启用访问控制
最佳实践
1. 部署架构
- 生产环境:部署多个MySQL Router实例,前面使用负载均衡器
- 高可用:与InnoDB Cluster集成,实现自动故障转移
- 网络隔离:将MySQL Router部署在应用服务器和数据库服务器之间的专用网络
2. 配置管理
- 版本控制:将配置文件纳入版本控制
- 自动化部署:使用Ansible、Puppet等工具自动化部署和配置
- 定期备份:定期备份配置文件和密钥环
3. 监控与告警
- 监控指标:连接数、请求数、延迟、错误率等
- 设置告警:当连接数过高、延迟过大或后端服务器不可用时发送告警
- 定期检查:定期检查MySQL Router状态和日志
4. 性能调优
- 根据负载调整配置:根据实际负载调整连接池大小、线程数等参数
- 优化网络:确保MySQL Router与后端服务器之间的网络带宽充足
- 定期清理:定期清理日志文件,避免磁盘空间不足
5. 安全管理
- 最小权限原则:MySQL Router使用的数据库用户只授予必要的权限
- 定期更新:关注MySQL官方安全公告,及时更新MySQL Router版本
- 审计日志:启用审计日志,记录MySQL Router的访问和操作
通过以上配置和最佳实践,可以部署一个稳定、高效、安全的MySQL Router环境,为应用提供可靠的数据库访问路由和负载均衡服务。在实际部署中,应根据业务需求和系统规模进行适当调整。
