Maxscale无法检测AWS Aurora 3/MySQL 8复制从节点问题求助
我安装了MaxScale v23.02.04,能正常连接AWS RDS Aurora实例(引擎版本8.0.mysql_aurora.3.04.0),但配置readwritesplit实现读写分离时遇到问题:执行maxctrl list servers后,主节点显示为"Master, Running",但只读副本未被识别为"Slave",且GTID列无数据。
环境与权限信息
- MaxScale连接用户
maxscale的完整权限:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE ROLE, DROP ROLE ON *.* TO `maxscale`@`%` WITH GRANT OPTION
当前MaxScale配置文件maxscale.cnf
[maxscale] threads=auto log_info=true [dev_master] type=server address=***.***.us-east-1.rds.amazonaws.com port=3306 protocol=MariaDBBackend [dev_reader] type=server address=***.***.us-east-1.rds.amazonaws.com port=3306 protocol=MariaDBBackend [MySQL-Monitor] type=monitor module=mysqlmon servers=dev_master, dev_reader user=maxscale password=password monitor_interval=2s [Read-Write-Service] type=service router=readwritesplit servers=dev_master, dev_reader user=maxscale password=password [Read-Write-Listener] type=listener service=Read-Write-Service protocol=MariaDBClient port=3306
尝试过查找MaxScale AuroraDB Monitor文档,但运行时提示文件缺失,后发现auroradbmon已被弃用,怀疑是Aurora与MariaDB的兼容性问题。
1. 配置mysqlmon适配Aurora复制机制
虽然auroradbmon已弃用,但可以通过自定义参数让mysqlmon适配Aurora的复制状态查询逻辑:
修改[MySQL-Monitor]节点,添加Aurora专属检测配置:
[MySQL-Monitor] type=monitor module=mysqlmon servers=dev_master, dev_reader user=maxscale password=password monitor_interval=2s # 关闭标准复制延迟检测,改用Aurora专属逻辑 detect_replication_lag=false # 绑定Aurora状态检测脚本(需确保脚本存在,核心逻辑为查询Aurora专属状态变量) script=/usr/share/maxscale/filters/aurora_monitor_check.py
脚本核心逻辑参考:通过
SHOW GLOBAL STATUS LIKE 'aurora_server_id';识别主节点,SHOW GLOBAL STATUS LIKE 'aurora_replica_lag_in_milliseconds';判断副本状态。
2. 替换服务器协议为MySQLBackend
Aurora基于MySQL生态,使用MariaDBBackend协议可能存在兼容性差异,修改两个服务器节点的协议配置:
[dev_master] type=server address=***.***.us-east-1.rds.amazonaws.com port=3306 protocol=MySQLBackend [dev_reader] type=server address=***.***.us-east-1.rds.amazonaws.com port=3306 protocol=MySQLBackend
3. 优化readwritesplit路由参数
在[Read-Write-Service]中添加适配Aurora的路由配置:
[Read-Write-Service] type=service router=readwritesplit servers=dev_master, dev_reader user=maxscale password=password # 适配Aurora无GTID复制场景 use_sql_variables_in=master strict_multi_stmt=true
4. 重启验证
执行命令重启MaxScale:
systemctl restart maxscale
再通过maxctrl list servers检查节点状态,确认只读副本是否被标记为"Slave",GTID列数据是否正常填充。
内容的提问来源于stack exchange,提问作者Brian Phelan

