Skip to content

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 --version

MySQL Router配置

1. 配置文件结构

  • 默认配置文件位置

    • Linux:/etc/mysqlrouter/mysqlrouter.conf
    • Windows:C:\ProgramData\MySQL\MySQL Router\mysqlrouter.conf
  • 配置文件格式: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:3306

3. 配置选项说明

  • 全局配置

    • 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进程

    bash
    ps aux | grep mysqlrouter
  • 检查监听端口

    bash
    netstat -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验证

    ini
    ssl_verify_server_cert = on

2. 访问控制

  • 限制绑定地址

    ini
    bind_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: 升级步骤:

  1. 备份当前配置文件
  2. 停止当前MySQL Router实例
  3. 安装新版本MySQL Router
  4. 恢复配置文件(注意兼容性)
  5. 启动新版本MySQL Router
  6. 验证功能正常

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环境,为应用提供可靠的数据库访问路由和负载均衡服务。在实际部署中,应根据业务需求和系统规模进行适当调整。