MyCAT
说明
同类产品:
ProxySQL,MySQL Router,MariaDB MaxScale
基本概念
数据库切分
**垂直切分:**将不同的表(或Schema)切分到不同中的数据库(或主机)上---分库 **水平切分:**将用一个表根据逻辑关系切分到不同中的数据库(或主机)上---分表
应用场景
- 单纯的读写分离
- 分库分表,对1000万-1000亿行数据的单表进行分片
- 多租用应用,每个应用连接一个库,应用连接mycat,不改造程序代码,实现多租户
- 报表系统,借助于Mycat的分表能力,处理大规模报表的统计
- 替代 Hbase,分析大数据
- 作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果, 除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选择
**注:**摘自《Mycat权威指南》,Mycat官网有下载链接
亮点
- 支持MySQL、Oracle、DB2、SQL Server、PostgreSQL、巨杉等DB
- 高可用与集群方案较多
- 强大的分片支持
- 支持zookeeper协调主从切换、zk序列、配置zk化
- 监控方案:命令行+Web界面Mysql-eye/Mycat-mini-monitor
Mycat读写分离实现
MySQL主从复制
搭建过程
略...
常用命令
-- 查看主服务状态
SHOW MASTER STATUS;
或者
SHOW MASTER STATUS\G
-- 在主服务器上查看从服务主机
show slave hosts;
-- 查看从服务状态
show slave status\G
-- 开始/停止复制(从服务器上执行)
START/STOP SLAVE;
关于主从复制延迟
监控方案
- shell脚本监控(通过
show slave status\G
) - 监控工具:Percona监控套件中的
pt-heartbeat
(它会创建heartbeat表,此表记录监控数据)
避免方案
- 新版本可使用多线程主从复制,
show global variables like 'slave_parallel_workers';#默认是0,即单线程
Mycat配置文件
schema.xml---配置数据库
server.xml---配置Mycat账户
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">testdb</property>
</user>
schemas对应schema.xml中schemas,可配置多个,用逗号分隔
注意:
- 默认端口: 连接8066 管理9066
使用JMeter压测读写分离-简单测试
压测说明
主机: 虚拟机2核4G 压测对比: "单MySQL"VS“主从MySQL两台+读写分离” 测试量: 10万写入+20万分页查询(count+limit)+20万通过主键查询 **线程数:**100 **数据库参数:**默认
JMeter配置截图
测试结果
单MySQL
主从MySQL两台+读写分离
读写分离双节点的居然只比单节点快了23秒
, 于是又加了一台从数据库
主1台+从2台+读写分离
这回时间上缩短了21分钟,效果还不错
其它
用同样的测试方法测试postgreSQL,最终以失败告终,尴尬,不知道是否和测试方法有关