DB Proxy,数据库中间件
mycat功能
1. 读写分离M-S-S M-M-S-S
2. 负载均衡 Galera Cluster
3. 支持数据的分片自动路由与聚合
同类产品
MySQL Proxy MySQL官方
Atlas 奇虎360
DBProxy 美团点评
cober 阿里巴巴
MyCat 阿里巴巴
Mycat概述
Mycat是一个开源的分布式数据库系统,不同于oracle和mysql,Mycat并没有存储引擎,但是Mycat实现了mysql协议,前段用户可以把它当做一个Proxy。其核心功能是分表分库,即将一个大表水平分割为N个小表,存储在后端mysql存储引擎里面。最新版本的Mycat不仅支持mysql,还可以支持MS SqlServer,Oracle,DB2等关系型数据库,而且还支持MongoDB这种NoSQL。Mycat对调用者屏蔽了后端存储具体实现。
Mycat的原理是先拦截用户的SQL语句并做分析:分片分析,路由分析,读写分离分析,缓存分析等,再对将该SQL语句发送到指定规则的数据库。最终将存储引擎返回的结果返回给用户.
架构: 一台MyCat LB 4台mysql servers(服务器) 做成M-M-S-S
首先准备好mysql的主从复制,我的是M-M-S-S (双主双从)再接着配置java环境,最后部署mycat
JRE ( Java Runtime Environment)
是java运行时环境,包含了java虚拟机,java基础类库。是使用java语言编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。
JDK (JDK:Java Development Kit )
JDK顾名思义是java开发工具包,是程序员使用java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。如果你需要运行java程序,只需安装JRE就可以了。如果你需要编写java程序,需要安装JDK。
下载: jdk
mycat对于 jdk的版本没有太高的的要求 8 9 10 的版本都行
[root@localhost ~]# jdk-10.0.1_linux-x64_bin.tar.gz -C /usr/local
[root@localhost ~]# ln -s /usr/local/jdk-10.0.1/ /usr/local/java
[root@localhost ~]# vim /etc/profile #添加环境变量
/etc/profile最后面添加:
JAVA_HOME=/usr/local/java/bin
PATH=$PATH:$JAVA_HOME
或者
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile #刷新环境变量
[root@localhost ~]# env |grep java #验证环境变量
[root@localhost ~]# java -version #查询java版本,查不出来就是环境变量设置有问题
java端口号9066
下载 : mycat
[root@localhost ~]# tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
[root@localhost ~]# ls /usr/local/mycat/
[root@localhost ~]# vim /usr/local/mycat/conf/server.xml
注释掉多余用户
启动mycat管理员 登录mycat的账户
请务必先备份此文件 schema.xml
[root@localhost ~]# vim /usr/local/mycat/conf/schema.xml
上面这个是我自己的配置
这个schema 的 name="mycat" 和 bataNode 的database="mycat" 再加上前端的mycat 必须一致,否则会报错。
schema name:mycat维护的集群名称。
datanode:后方节点群的名称。
datahost:后方节点群的主机名称。
writehost:写主机
readhost:读主机
小技巧!!!!倒着看。一般的脚本倒着看都能看懂.
关于属性(参数)的介绍:
负载均衡类型:
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", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
writeType 属性 :
1. writeType="0", 所有写操作发送到配置的第一个 writeHost,
第一个挂了切到还生存的第二个writeHost,
重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType="1",所有写操作都随机的发送到配置的 writeHost。
3. writeType="2",没实现。
M-M-S-S准备Mycat连接的用户及权限:
再其中一个M 服务器上设置,其余都会同步
mysql > grant all on *.* to 'mycatproxy'@'192.168.0.118' identified by 'WJW952945084@qq.com';
在mycat服务器上:
root@localhost ~]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
启动成功,否则就是配置Mycat后端语法错误。ps:这里启动成功并不能说明什么,是一种假象。你配置有问题它一样也能起来。
[root@localhost ~]# ss -tnlp |grep java #监测端口是否启动
[root@localhost ~]# ps aux | grep mycat #检测进程是否启动
为了显示效果在mycat服务器上安装一个 mariadb查看效果
[root@localhost ~]# yum install -y mariadb
[root@localhost ~]# mysql -h10.18.43.101 -uroot -p123456 -P8066
MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| mycat |
+----------+
1 row in set (0.00 sec)
! 注意后方mysql群中应该创建该库
在mycat上
select * from tianyun.t1;
insert into tianyun.t1 values(3);
查看效果
最后报错就去查询 mycat.log 日志
[root@localhost ~]# tailf /usr/local/mycat/logs/mycat.log
多库时设置mycat思路: