原理简述 参考文档 MyCAT主要是经过对SQL的拦截,而后通过必定规则的分片解析、路由分析、读写分离分析、缓存分析等,而后将SQL发给后端真实的数据块,并将返回的结果作适当处理返回给客户端。java
mycat功能也比较强大,本案例只是针对于读写分离进行测试mysql
ip | 角色 |
---|---|
192.168.111.8 | mycat |
192.168.111.100 | 写动做数据库 |
192.168.111.200 | 读操做数据库 |
官网地址:http://www.mycat.io/linux
下载地址:http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gzsql
文档地址:http://www.mycat.io/document/Mycat_V1.6.0.pdf数据库
[root@localhost ~]# tar zxf jdk-8u191-linux-x64.tar.gz [root@localhost ~]# mv jdk1.8.0_191/ /usr/local/java8 [root@localhost ~]# rm -rf /usr/bin/java [root@localhost ~]# echo 'export JAVA_HOME=/usr/local/java8' >> /etc/profile [root@localhost ~]# echo 'PATH=$PATH:/usr/local/java8/bin' >> /etc/profile [root@localhost ~]# source /etc/profile [root@localhost ~]# java -version java version "1.8.0_191" Java(TM) SE Runtime Environment (build 1.8.0_191-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@localhost ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ [root@localhost ~]# groupadd mycat [root@localhost ~]# useradd -r -g mycat mycat [root@localhost ~]# chown -R mycat.mycat /usr/local/mycat/ #下面是添加环境变量 [root@localhost ~]# echo 'PATH=$PATH:/usr/local/mycat/bin' >> /etc/profile [root@localhost ~]# source /etc/profile [root@localhost ~]# tar zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local [root@localhost ~]# vim /usr/local/mycat/conf/server.xml 80 <user name="root"> #链接mycat的用户名 81 <property name="password">123456</property> #链接mycat对应的密码 82 <property name="schemas">test</property> #使用该用户名登陆时,是用哪一个数据库,这里写的是逻辑库名,在scheme.xml中会与物理库库名关联起来 94 <!-- 95 <user name="user"> 96 <property name="password">user</property> 97 <property name="schemas">TESTDB</property> 98 <property name="readOnly">true</property> 99 </user> 100 --> #将这些注释掉,暂时用不到,咱们只用上面一个用户 #这个配置文件就这些 5 <schema name="test" checkSQLschema="false" sqlMaxLimit="100"> 6 <table name="test1" dataNode="dn1"/> 7 <table name="test2" dataNode="dn1"/> 8 <table name="test3" dataNode="dn1"/> 9 <table name="test4" dataNode="dn1"/> 10 <table name="test5" dataNode="dn1"/> 11 </schema> #这些是提早定义的表,将这些表都写入dn1,dn1主机在下面配置文件会定义 14 <dataNode name="dn1" dataHost="test1" database="test" /> #database指定物理数据库的库名,将dn1,关联到test1,test1在下面配置文件定义 15 <dataHost name="test1" maxCon="1000" minCon="10" balance="1" 16 writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> #name:物理数据库名,与dataNode中dataHost对应 #calance:均衡负载的方式;1表示开启读写分离 #dbType:数据库类型 #writeType:写入方式 17 <heartbeat>select user();</heartbeat> #heartbeat:心跳检测语句,注意语句结尾的分号要加。 18 <writeHost host="hostM1" url="192.168.111.100:3306" user="root" 19 password="123456"> 20 21 <readHost host="hostS2" url="192.168.111.200:3306" user="root" password="123456" /> 22 </writeHost> 24 </dataHost> #以上配置达到的效果就是192.168.111.100为主库,192.168.111.200为从库。 #Mycat主从分离只是在读的时候作了处理,写入数据的时候,只会写入到writehost,须要经过mycat的主从复制将数据复制到readhost [root@localhost ~]# /usr/local/mycat/bin/mycat start #启动服务 [root@localhost ~]# netstat -lnpt | grep 8066 tcp6 0 0 :::8066 :::* LISTEN 60034/java [root@localhost ~]# yum -y install mariadb [root@localhost ~]# mysql -u root -p123456 -h192.168.111.8 -P8066 #安装mysql工具,进行测试一下 [root@localhost ~]# mysql -u root -p123456 -h192.168.111.8 -P8066 MySQL [(none)]>
暂时完结...vim