MySQL Router 部署说明

本文说明如何使用 innodb_cluster_router.yml 在 InnoDB Cluster 之上部署 MySQL Router。默认是单节点 App 模式;需要 VIP 时再显式启用 keepalived HA 模式。

1. 适用范围

  • 上游 Cluster 已通过 innodb_cluster.yml 部署完成
  • 默认部署单节点 App 模式
  • 支持双节点 keepalived HA 模式
  • Router REST API 默认开启,便于后续 mysqlrouter_exporter 采集

2. 依赖链

项目内容
前置依赖已完成 dbbotctl env setupinnodb_cluster.yml 已成功执行;[dbbot_router] inventory 已准备;Router 节点可访问 Cluster 节点
必填变量router_bootstrap_servermysql_cluster_admin_user / mysql_cluster_admin_passwordmysql_router_user / mysql_router_password
HA 变量HA 模式还需要 router_enable_ha: truerouter_viprouter_net_work_interfacerouter_ha_nodes
条件变量router_rest_api_auth_mode: file 时,需要 router_rest_api_file_user / router_rest_api_file_password;若修改了 REST API 端口,要同步修改 router_ports.http.port
后续依赖如需采集 Router 指标,继续执行 router_exporter_install.yml,再用 dbbotctl exporter register -t router 注册到 Prometheus

3. inventory

App 模式可以只放一个 Router 节点:

[dbbot_router]
192.0.2.151 ansible_user=root ansible_ssh_pass="'密码'"

HA 模式通常放两个 Router 节点:

[dbbot_router]
192.0.2.151 ansible_user=root ansible_ssh_pass="'密码'"
192.0.2.152 ansible_user=root ansible_ssh_pass="'密码'"

以上 IP 使用 RFC 5737 文档保留地址,仅作为示例,请替换成你的实际主机地址。

4. 关键变量

编辑 mysql_ansible/playbooks/vars/var_innodb_cluster_router.yml。默认 App 模式:

router_enable_ha: false
router_bootstrap_server: 192.0.2.131

mysql_cluster_admin_user: clusteradmin
mysql_cluster_admin_password: "Dbbot_clusteradmin@8888"
mysql_router_user: mysqlrouter
mysql_router_password: "Dbbot_mysqlrouter@8888"

router_rest_api_auth_mode: file
router_rest_api_file_user: router_api_user
router_rest_api_file_password: "Dbbot_router_api_user@8888"

如果要启用 HA,再配置:

router_enable_ha: true
router_vip: 192.0.2.150
router_net_work_interface: ens33
router_ha_nodes:
  - ip: 192.0.2.151
    role: MASTER
    priority: 100
  - ip: 192.0.2.152
    role: BACKUP
    priority: 90

说明:

  • router_bootstrap_server 必须是当前 Cluster 中可连通的节点。
  • mysql_cluster_admin_* 用于 mysqlrouter --bootstrap
  • mysql_router_* 是 Router 访问 Cluster metadata 的账号。
  • router_rest_api_file_* 只在 router_rest_api_auth_mode: file 时生效,后续 mysqlrouter_exporter 默认复用这组凭据。
  • router_net_work_interface 必须写目标 Router 节点的真实网卡名。执行 HA 模式前请先用 ip routeip addr 确认;dbbot 192.168.161.* 默认测试 inventory 中的样例环境通常是 enp1s0,不要直接照抄 ens33

5. 执行部署

App 模式:

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook innodb_cluster_router.yml

HA 模式如果没有写入变量文件,也可以临时传参:

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook innodb_cluster_router.yml -e router_enable_ha=true

执行过程中按提示输入 confirm

6. 部署后验证

常见检查项:

  • systemctl status mysqlrouter
  • HA 模式下额外检查 systemctl status keepalived
  • ss -lntp | egrep '6446|6447|8443'

App 模式连接示例:

mysql -h 192.0.2.151 -P 6446 -u<user> -p

HA 模式连接示例:

mysql -h 192.0.2.150 -P 6446 -u<user> -p

这里的 <user> 必须是在 MySQL 后端能匹配到连接来源的业务账号或测试账号。admin@127.0.0.1 适合验证本机 MySQL 实例直连,例如连接实例端口 3307;连接 Router 端口 6446 时,后端权限匹配的是 Router 到 MySQL 节点的连接来源,不应假设它等同于客户端命令里的 127.0.0.1

7. 卸载 Router

Router 卸载入口会停止并删除 MySQL Router 的 systemd unit、软链、安装目录、配置目录、数据目录和日志目录:

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook router_unsafe_uninstall.yml

如果要清理 HA 部署产生的 keepalived 服务和 Router HA 脚本,请确保变量文件中保留 router_enable_ha: true,或执行时显式传入:

ansible-playbook router_unsafe_uninstall.yml -e router_uninstall_remove_keepalived=true

执行过程中按提示输入 confirm。默认不会卸载 keepalived RPM,也不会删除 mysqlrouter Linux 用户;如确需删除,可额外设置 router_uninstall_remove_keepalived_package=truerouter_uninstall_remove_user=true

8. 下一步

如果要把 Router 指标接入 Prometheus,请继续阅读:mysqlrouter_exporter 与 Router 注册