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 setup;innodb_cluster.yml 已成功执行;[dbbot_router] inventory 已准备;Router 节点可访问 Cluster 节点 |
| 必填变量 | router_bootstrap_server、mysql_cluster_admin_user / mysql_cluster_admin_password、mysql_router_user / mysql_router_password |
| HA 变量 | HA 模式还需要 router_enable_ha: true、router_vip、router_net_work_interface、router_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 route或ip addr确认;dbbot192.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=true 或 router_uninstall_remove_user=true。
8. 下一步
如果要把 Router 指标接入 Prometheus,请继续阅读:mysqlrouter_exporter 与 Router 注册。