目录:
1、mycat是什么
中间件:是一类连接软件和应用的计算机软件,以便于软件各部件之间的沟通。
例子:tomcat ==> web 中间件
数据库中间件:连接 java 应用程序和数据库
2、数据库中间件对比
1)Cobar: 属于阿里B2B事业群,始于 2008 年,在阿里服役3年,接管 3000+ 个 MySQL 数据库的 schema,集群日处理在线 SQL 请求 50 亿次以上。由于 Cobar 发起人的离职,Cobar 停止维护。
2)Mycat 是开源社区在阿里 Cobar 基础上进行二次开发,解决了 Cobar 存在的问题,并且加入了许多新的功能,青出于蓝而胜于蓝。
3)OneProxy 基于 MySQL 官方的proxy思想利用c进行开发的,OneProxy 是一款商业收费的中间件。舍弃了一些功能,专注在性能和稳定性上。
4)kingshard 由小团队用go语言开发,还需要发展完善。
5)Vitess 是 youtube 生产在使用,架构很复杂。不支持 MySQL 原生协议,使用需要大量改造成本。
6)Atlas 是 360 团队基于 MySQL Proxy改写,功能还需完善,高并发下不稳定。
7)MaxScale 是 mariadb研发的中间件。
8)MySQLRoute 是MySQL 官方Oracle 公司发布的中间件。
3、mycat 能干什么
读写分离
数据分片
多数据源整合
4、mycat 原理
mycat 的原理中最重要的一个动词时“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终返回给用户。
5、mycat 安装
上传 Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 到 /usr/local 并解压
xshell 连接 centos7 服务器,可以使用 xftp将Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 上传到服务器,也可以先安装工具 lrzsz
yum -y install lrzsz
然后将 Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz 拖到 xshell 上面
解压
tar -xzvf Mycat-server-1.6.7.1-release-20190627191042-linux.tar.gz
6、启动
6.1、修改配置文件
三个配置文件
1)schema.xml:定义逻辑库、表、分片节点等内容
2)rule.xml:定义分片规则
3)server.xml:定义用户以及系统相关变量,如端口等。
修改 配置文件 server.xml
修改 schema.xml
6.2、验证远程访问情况
mycat 作为数据库中间件要和数据库部署在不同机器上,所以要验证远程访问情况。
mysql -uroot -p123456 -h 192.168.213.112 -P 3306 如果远程访问报错,请创建对应用户 grant all privileges on *.* to root@'缺少的host' identified by '密码';
主机1 192.168.213.111连接上MySQL,执行(将主机192.168.213.112改为% 表示所有主机都可以访问)
主机2 192.168.213.112 连接上 MySQL,执行
两台主机关闭防火墙
主机1远程连接到主机2
6.3、启动程序
控制台启动:/usr/local/mycat/bin 目录执行 ./mycat console
后台启动:/usr/local/mycat/bin 目录执行 ./mycat start
需要jdk环境(安装jdk8,如果按照jdk7会报类找不到)
主机名解析错误
vim /etc/hosts
启动成功
7、mycat 登陆
新开一个xshell 窗口,9066端口:此登录方式用于管理维护 Mycat
8066端口:此登录方式用于通过 Mycat 查询数据,我们选择这种方式访问 Mycat
8、搭建读写分离
我们通过 mycat 和 mysql 的主从复制配合搭建数据库的读写分离,实现 mysql 的高可用性。下面将搭建一主一从、双主双从两种读写分离模式。
8.1、一主一从
一台主机用于处理所有写请求,一台从机负责所有读请求,架构图如下:
mysql 主从复制搭建参考:https://www.cnblogs.com/xy-ouyang/p/13388672.html
搭建的一主一从为:111为主机,112为从机
mycat 配置文件schema.xml
启动mycat
连接主机1 mysql -uroot -p123456,创建user表,插入一条记录 insert into user(null,@@hostname,10); 由于使用了@@hostname,这样从机执行这一句sql时得到的结果与主机是不一样的。主机结果:
从机结果:
通过mycat访问:竟然访问的是主机(主机负责写操作的)
出现上面的问题是因为少了一个配置,/usr/local/mycat/conf/schema.xml 的 <dataHost balance="">此属性可以配置读写分离的类型
1)balance="0",不开启读写分离机制,所有读操作都发送到当前可用的 writeHost上; 2)balance="1", 全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单说,
当双主双从模式(M1->S1,M2->S2,并且M1与M2互为主备),正常情况下,M2、S1、S2都参与 select 语句的负载均衡; 3)balance="2", 所有的读操作都随机在 writeHost、readHost 上分发; 4)balance="3",所有读请求随机分发到 readHost执行,writeHost 不负担读压力。
修改balance="2", 重启mycat服务,访问结果是:切换主从机(writeHost和readHost)访问
修改balance="3", 重启mycat服务,访问结果是:只访问readHost
8.2、双主双从
---