如何配置MaxScale仅在目标从节点执行SET NAMES等会话查询?
可以实现!通过MaxScale的过滤器与路由规则配置,就能让
SET NAMES这类会话级查询仅在目标Slave节点执行,避免远程Master的延迟损耗,具体配置方法如下: 1. 配置会话语句过滤器
使用MaxScale的sessionfilter模块,拦截指定的会话级语句并路由到Slave节点组。在MaxScale配置文件(通常为/etc/maxscale.cnf)中添加过滤器配置:
[SessionFilter] type=filter module=sessionfilter # 匹配需要路由到Slave的会话语句,可根据需求扩展规则 match=SET NAMES|SET character_set_%|SET collation_% route_to=slave
2. 关联过滤器到读写分离服务
将上述过滤器绑定到你的读写分离路由服务,确保会话语句被正确拦截和路由:
[ReadWriteService] type=service router=readwritesplit # 这里server1为远程Master,server2、server3为本地Slave节点 servers=server1,server2,server3 user=maxscale_user password=maxscale_pass # 绑定之前配置的会话过滤器 filters=SessionFilter
3. 验证配置效果
- 查看MaxScale日志(
/var/log/maxscale/maxscale.log),确认SET NAMES等语句的目标节点为Slave而非Master。 - 在Slave节点开启查询日志,检查是否收到对应会话语句,同时确认Master节点无相关记录。
注意事项
- 确保MaxScale版本在2.0及以上,该版本开始支持
sessionfilter模块。 - 需保证Slave节点的字符集、排序规则等基础配置与Master一致,避免因会话变量差异导致数据读取不一致。
- 若有其他会话级语句需要路由到Slave,直接扩展
match字段的正则表达式即可。
内容的提问来源于stack exchange,提问作者user2531657
相关产品推荐
相关产品推荐

