MySQL中件间对比
目标:对比以下3款MySQL中件间
- ProxySQL
- MaxScale
- ShardingSphere
一.Proxy基础能力
兼容性
- ProxySQL:良好
- MaxScale:mairdb更友好,MGR支持不好
- ShardingSphere:良好
发行方
- ProxySQL:sysown
- MaxScale:mairdb
- ShardingSphere:京东
发布/更新/生态
- ProxySQL:c++, 5.1k stars,最新版v2.4.4 1个半月前发布
- MaxScale:c,1.6k stars,最新版22.08.2 3个半月前发布
- ShardingSphere:java,17.6k stars,最新版5.2.1 16天前发布
运维便利性
- ProxySQL:简单
- MaxScale:普通
- ShardingSphere:复杂(配置文件多且复杂)
二.Proxy高可用架构支持
主从架构下的从库故障
- 如何探测到
ALL: 每N秒主动探测一次
- 如何响应故障
ALL:探测不到,主动处理: - ShardingSphere:从路由表中标记下线 - proxysql:从group中标记下线 - MaxScale:标记下线
- 切换后状态
ALL:复制拓扑可用
- 影响时长
ALL:1-5 秒
主从架构下的主库故障
- 如何响应故障
ALL: 依赖其他高可用组件:mha,orchestrator,repmanager
-
ShardingSphere:报错,等高可用组件切换后更新配置信息
-
proxysql:报错,直到一个从的readonly变成可写,改变group
-
MaxScale:报错,等待高可用切换完后主从拓扑变更
-
影响时长
ALL:3-10秒
主从架构下的主库主动维护下线
- 如何切走流量
ALL:依赖于其他高可用组件维护主从切换逻辑
- 影响时长
1-2秒
MGR架构下的故障和主动切换
- 如何探测到
ALL:依赖于MGR自身切换
- 如何响应故障
ALL:探测到变更路由或group响应
- 影响时长
2-5秒
三.中件间功能
分库分表
- ShardingSphere:分库不友好,分表ok
- proxySQL:分库友好,分表需要依赖sql规则
- MaxScale:不支持
读写分离
- ShardingSphere:支持
- proxySQL:支持
- MaxScale:支持
权限账号
- ShardingSphere:自有权限独立于源端的账号,业务连proxy用户
- proxySQL:proxy+mysql用户。都得存在
- MaxScale:仅mysql用户权限
慢SQL
- ShardingSphere:不支持
- proxySQL:支持+采样归类,输出到表中
- MaxScale:配置规则,输出到文件
SQL审计
- ShardingSphere:不支持
- proxySQL:支持+采样归类,输出到表中
- MaxScale:配置规则,输出到文件
黑名单
- ShardingSphere:不支持
- proxySQL:可以通过SQL规则路由到无用节点
- MaxScale:支持
热加载
- ShardingSphere:说支持,目前测试需要重启才能生效
- proxySQL:load命令
- MaxScale:未找到热加载命令,需重启
ip透传
- ShardingSphere:不支持,在proxy端能看到processlist
- proxySQL:不支持
- MaxScale:不支持