阿里云
阿里云多端小程序中小企业获客首选
发表主题 回复主题
  • 9405阅读
  • 2回复

[解决方案]Linux下安装mycat分布式数据库中间件

级别: 论坛版主
发帖
3414
云币
8980

        最近在看数据主从,来实现读写分离。正好有有网友问到高并发的问题,所有就搜了一下数据库中间件的东东。一不小心就搜到了mycat,果然是神器。废话不多说,上文档。 (Q+3aEUE  
W% ud nJ  
U<b!$"P9  
一、简介 icmDPq  
        MYCAT基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。 3[rB:cE/  
Ipe;%as#  
TfPx   
       MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。 Kf.b <wP{  
\2jY)UrQs  
6_Kz}PQ  
       MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。 +,lD_{}_  
"^H+A-R[  
2wd(0K}b  
MYCAT架构 BlUY9`VWh@  
]Gr'Bt/  
r!S iR(  
   w9%gaK;  
二、安装使用 pK4)>q  
iJi|*P5dw  
_MU'he^W  
下载地址: https://github.com/MyCATApache/Mycat-download/tree/master/1.4-RELEASE VsC]z, oV  
/2:r}O  
5+UiAc$  
或者 wget  https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz |Xag:hof  
}5k"aCno  
fh~&&f}6  
下载的文件直接解压即可。 ?,j:Y0l.L  
r!#3>F;B  
$spf=t"nh  
tar -xzvf  Mycat-server-1.4-release-20151019230038-linux.tar.gz -cKR15  
",}VB8K  
181P;R=}<  
配置xml: Xk2  75Y  
Ol? 2Qy.2)  
lwU&jo*@  
MyCAT目前通过配置文件的方式来定义逻辑库和相关配置,主要是包括三个文件: )d(cXN-T  
MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容。 Bg`b*(Q  
MYCAT_HOME/conf/rule.xml中定义分片规则。 7v-C-u[E`  
MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。 *M"wH_cd  
_VlN Z/V  
5?b9[o+ D  
schema.xml模版配置 : z'fS%uI  
`9ieTt  
E|>I/!{u7`  
  1. <?xml version="1.0"?>
  2. <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
  3. <mycat:schema xmlns:mycat="http://org.opencloudb/">
  4.     <schema name="db1" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
  5.     </schema>
  6.     <dataNode name="dn1" dataHost="localhost1" database="db1" />
  7.     <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
  8.         writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
  9.         <heartbeat>select user()</heartbeat>
  10.         <!-- can have multi write hosts -->
  11.         <writeHost host="hostM1" url="192.168.1.180:3306" user="root"
  12.             password="root">
  13.         </writeHost>
  14.     </dataHost>
  15. </mycat:schema>
h %nZKhm  
G2Apm`/ y  
>eC^]#c  
比如在这个配置文件里面,就配置了一个数据库,db1。 F JzjS;  
注意:MyCAT对外端显示出来的数据库,和数据库里面的表,全部在schema里面配置,没有写在这个里面的表或者库,即使后端的MySQL里面存在,也无法通过MyCAT去访问,不过MyCAT不会去定义具体表的结构。 9xWrz;tzo  
然后是datanode,这个属性指定了schema的表,具体存放在哪个数据库,比如这个配置里面,指定了dn1的数据节点位于localhost1,这个数据库实例的名为db1的数据库。 eN$~@'w  
datahost列出了实际的后端MySQL集群的具体信息,writehost是负责写入数据的MySQL实例,writehost是负责读的MySQL实例,如果两个实例的具体信息写成一样,那就意味着后端使用单实例,如果配置成不同的实例,那么就在两个实例之间配置主从同步,然后通过MyCAT实现读写分离 pTTif|c  
对数据库进行垂直切分,主要由schema.xml来完成。 $d"6y  
%$cwbh-{{  
b,c vQD  
rule.xml如示例 u&qdrKx  
rh!41  
+z4NxR   
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
  3. <mycat:rule xmlns:mycat="http://org.opencloudb/">
  4. <tableRule name="rule">
  5.     <rule>
  6.       <columns>user_id</columns>
  7.       <algorithm>func1</algorithm>
  8.     </rule>
  9. </tableRule>
  10. <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
  11.     <property name="partitionCount">2</property>
  12.     <property name="partitionLength">512</property>
  13. </function>
  14. </mycat:rule>
v}!,4,]:&  
{*|yU"  
`mMD e  
rule.xml里面的配置主要用于对表的水平切分,MyCAt本身提供了很多种水平切分的策略,这个示例显示的是取模分片,总共分成四片,user_id对1024取模,然后分成两片,每一片512个。 _])1P?.  
8\yH 7H  
+Kk6|+5u  
server.xml如示例 I@hC$o  
  1. <!DOCTYPE mycat:server SYSTEM "server.dtd">
  2. <mycat:server xmlns:mycat="http://org.opencloudb/">
  3.     <system>
  4.         <property name="sequnceHandlerType">0</property>
  5.     </system>
  6.     <user name="test">
  7.        <property name="password">test</property>
  8.        <property name="schemas">db1</property>
  9.     </user>
  10. </mycat:server>
aA:Ky&5e  
 E5o0^^  
server.xml里面配置MyCAT的逻辑库参数,如示例,配置的就是逻辑库db1的登录用户名和密码 U'\\(m|  
y,%w`  
7 724,+2N  
内存配置: pZH bj2~  
nBNZ@nD  
{_ #   
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据己的jvm参数调整。 tp1{)|pwY6  
"aP/214Ul  
E J 9A 4B  
linux下命令: ]-R8W/fDn  
p0@iGyd  
3{:d$- y  
./mycat start 启动 ,@P3!|  
./mycat stop 停止 Jus)cO#I  
./mycat console 前台运行 IlaH,J7n  
./mycat install 添加到系统自动启动(暂未实现) ] $%{nj<  
./mycat remove 取消随系统自动启动(暂未实现) onjTuZ^h  
./mycat restart 重启服务 fxc~5~$>  
./mycat pause 暂停 AD8~  
./mycat status 查看启动状态  1 ft. ZJ  
HVC\(h,)i  
mX<D]Z< k  
wo?C 7,-x  
Tp9LBF  
下面是一些Mycat关键特性 {2V=BDS|?K  
支持SQL92标准 -5E<BmM  
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 <H$CCo  
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 _/KW5  
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster mhcJ0\@_  
基于Nio实现,有效管理线程,高并发问题。 (+4=A k  
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 )of_"gZ$3A  
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 UH[ YH;3O  
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 SK-|O9Ki  
支持多租户方案。 3Hq0\Y"Y  
支持分布式事务(弱xa)。 {"@Bf<J#  
支持全局序列号,解决分布式下的主键生成问题。 >(\[$  
分片规则丰富,插件化开发,易于扩展。 ka]n+"~==\  
强大的web,命令行监控。 [TNYPA> {  
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 6_9w1 ,W E  
支持密码加密 S_\RQB\l  
支持服务降级 BURiLEYZl  
支持IP白名单  *A_  
支持SQL黑名单、sql注入攻击拦截 ;7qk9rz4  
支持分表(1.6) ?p$WqVN}  
2*Gl|@~N  
Jq.26I=  
测试mycat与测试mysql完全一致,mysql怎么连接,mycat就怎么连接。 'o5[ :=K  
^ 41 p+  
$bD!./fl  
推荐先采用命令行测试: X5)>yM^N`  
uZ OUp8QQ  
SLBKXj|  
mysql -uroot -proot -P8066 -h127.0.0.1 L5U>`lx6$  
`5x,N%9{  
M`"2;  
%d*}:295  
}P^n /  
如果采用工具连接,1.4,1.3目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。SQLyog 连接貌似有点问题。 @^`-VF  
[ 此帖被小柒2012在2016-06-13 20:18重新编辑 ]
本帖最近评分记录: 2 条评分 云币 +20
ivmmff 云币 +10 您的帖子很精彩!希望很快能再分享您的下一帖! 2016-06-21
鬼才神兵 云币 +10 优秀文章-欢迎进行技术分享,感谢你的支持! 2016-06-14
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 沙发  发表于: 2016-06-14
优秀文章-欢迎进行技术分享,感谢你的支持!
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 板凳  发表于: 2016-06-21
您的帖子很精彩!希望很快能再分享您的下一帖!
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: ECS是阿里云提供的什么服务? 正确答案:云服务器
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)