mycat

目录:

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、双主双从

  

 ---

原文地址:https://www.cnblogs.com/xy-ouyang/p/13388737.html