一、Mycat应用场景
- Mycat适用的场景很丰富,以下是几个典型的应用场景
- 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换
- 分表分库,对于超过1000万的表进行分片,最大支持1000亿的单表分片
- 多租户应用,每个应用一个库,但应用程序只连接Mycat,从而不改造程序本身,实现多租户化报表系统,借助于Mycat的分表能力,处理大规模报表的统计
- 替代Hbase,分析大数据,作为海量数据实时查询的一种简单有效方案,比如100亿条频繁查询的记录需要在3秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时Mycat可能是最简单有效的选择
- Mycat长期路线图
- 强化分布式数据库中间件的方面的功能,使之具备丰富的插件、强大的数据库智能优化功能、全面的系统监控能力、以及方便的数据运维工具,实现在线数据扩容、迁移等高级功能进一步挺进大数据计算领域,深度结合Spark Stream和Storm等分布式实时流引擎,能够完成快速的巨表关联、排序、分组聚合等 OLAP方向的能力,并集成一些热门常用的实时分析算法,让工程师以及DBA们更容易用Mycat实现一些高级数据分析处理功能不断强化Mycat开源社区的技术水平,吸引更多的IT技术专家,使得Mycat社区成为中国的Apache,并将Mycat推到Apache基金会,成为国内顶尖开源项目,最终能够让一部分志愿者成为专职的Mycat开发者,荣耀跟实力一起提升
二、mycat 可以简单概括为
-
一个彻底开源的,面向企业应用开发的大数据库集群
-
支持事务、ACID、可以替代MySQL的加强版数据库
-
一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
-
一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server
-
结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
-
一个新颖的数据库中间件产品
三、mycat部署
3.1、mycat安装目录结构说明
- bin :mycat命令,启动、重启、停止等运行目录
- catlet: catlet为Mycat的一个扩展功能
- conf :mycat 配置信息,重点关注
- lib:mycat引用的jar包,Mycat是java开发的
- logs :日志文件,包括Mycat启动的日志和运行的日志
- version.txt :mycat版本说明
3.2Mycat的常用配置文件
Mycat的配置文件都在conf目录里面,这里介绍几个常用的文件:
- server.xml :Mycat软件本身相关的配置文件,设置账号、参数等
- schema.xml:Mycat对应的物理数据库和数据库表的配置,读写分离、高可用、分布式策略定制、节点控制
- rule.xml:Mycat分片(分库分表)规则配置文件,记录分片规则列表、使用方法等
3.3 Mycat日志
Mycat的日志文件都在logs目录里面
- wrapper.log :mycat启动日志
- mycat.log :mycat详细工作日志
3.4 mycat 实现读写分离
1.环境准备
mycat服务器上不能装mysql
master服务器 | 192.168.59.113 |
---|---|
slave1服务器 | 192.168.59.112 |
mycat服务器 | 192.168.59.114 |
客户机 | 192.168.59.118 |
2.初始化环境
#每台服务器上都初始化,关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
3.部署主从复制
###################### 主mysql服务器配置(192.168.59.113)########################
(1)修改配置文件
[root@localhost ~]#vim /etc/my.cnf
#服务器id不能和从服务器一样
server-id = 1
#开启二进制日志
log-bin=master-bin
#二进制日志格式
binlog_format=MIXED
#开启从服务器同步
log-slave-updates=true
server-id = 1
log-bin=master-bin
binlog_format=MIXED
log-slave-updates=true
(2)重启服务
[root@localhost ~]#systemctl restart mysqld
(3)进入数据库授权,查看二进制文件及节点号
[root@localhost ~]#mysql -uroot -p123123
#建立一个myslave用户,并且允许192.168.59.%这个网段的地址来登录,密码是123456,一会儿要在slave上使用这个账号
grant replication slave on *.* to 'myslave'@'192.168.59.%' identified by '123456';
#刷新一下
flush privileges;
#查看主服务器的bin-log日志文件名称和position点
show master status;
grant replication slave on *.* to 'myslave'@'192.168.59.%' identified by '123456';
flush privileges;
show master status;
############################# 从mysql服务器配置(192.168.59.112)################
(1)#修改配置文件
[root@localhost ~]#vim /etc/my.cnf
#修改,服务器id不能和主服务器一样
server-id = 2
#添加,开启中继日志,从主服务器上同步日志文件记录到本地
relay-log=relay-log-bin
#添加,定义中继日志文件的位置和名称,一般和relay-log在同一目录
relay-log-index=slave-relay-bin.index
server-id = 2
relay-log=relay-log-bin
relay-log-index=slave-relay-bin.index
(2)重启服务
[root@localhost ~]#systemctl restart mysqld
(3)进入数据库,设置连接主库信息,并开启slave服务
[root@localhost ~]#mysql -uroot -p123123
#不知道连接主库信息格式可以用help change master to 查看,下面的master_log_file是在配置Master的时候的File字段, master_log_pos是在配置Master的Position 字段。一定要一一对应
change master to master_host='192.168.59.113',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
#开启slave
start slave;
#查看从库状态信息,Slave_IO_Running和Slave_SQL_Running状态必须是yes
show slave status \G;
#Slave_IO_Running: Yes
#Slave_SQL_Running: Yes
change master to master_host='192.168.59.113',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603;
start slave;
show slave status \G;
####################### 在master服务器上上传库文件,并在从服务器上验证主从同步 ############
#在主服务器上下载hellodb库文件,source后加绝对路径
[root@localhost ~]#mysql -uroot -p123123
#下载hellodb库文件
source /bak/hellodb.sql
show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hellodb |
| mysql |
| performance_schema |
| sys |
+--------------------+
#在从库中查看库文件hellodb是否已经同步
show databases;
+--------------------+
| Database