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

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

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

        最近在看数据主从,来实现读写分离。正好有有网友问到高并发的问题,所有就搜了一下数据库中间件的东东。一不小心就搜到了mycat,果然是神器。废话不多说,上文档。 yg@}j   
c jBHczkY  
ZfIeq<8 _  
一、简介 7:h_U9Za?$  
        MYCAT基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。 7#iT33(3  
Ix|^c268o<  
|:d:uj/  
       MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。 jQ\/R~)O  
1"HSM =p  
3ocRq %%K  
       MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。 Zl`sY5{1  
O7tL,)Vv  
STQ~mFs"  
MYCAT架构 {Ng HH]]O  
gT4H? #UB  
|oJ R+  
   jp QmKX  
二、安装使用 rlVo}kc7:  
||sj*K  
r=pb7=M#LN  
下载地址: https://github.com/MyCATApache/Mycat-download/tree/master/1.4-RELEASE ]$96#}7N  
834dsl+U  
+S>}<OE  
或者 wget  https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz J*CfG;Y:  
7u7 <"?v=  
Qz?r4kR  
下载的文件直接解压即可。 w*s#=]6  
s_N]$3'[E  
s|=.L&"   
tar -xzvf  Mycat-server-1.4-release-20151019230038-linux.tar.gz wC[Bh^]  
O1K~]Nt  
N8:&v  
配置xml: ,\ RxKSU  
9d!}]+"d42  
Z<0+<tt  
MyCAT目前通过配置文件的方式来定义逻辑库和相关配置,主要是包括三个文件: ec` $2u  
MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容。 b/Z 0{38  
MYCAT_HOME/conf/rule.xml中定义分片规则。 (" >gLr  
MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。 5Pl~du  
Y4|g^>{<ni  
F DCHB~D  
schema.xml模版配置 : +~A<&7[}  
)vFZl]  
\aO.LwYm;:  
  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>
z~BrKdS  
)pXw 3Fo  
#D{//P|;  
比如在这个配置文件里面,就配置了一个数据库,db1。 :{v:sK  
注意:MyCAT对外端显示出来的数据库,和数据库里面的表,全部在schema里面配置,没有写在这个里面的表或者库,即使后端的MySQL里面存在,也无法通过MyCAT去访问,不过MyCAT不会去定义具体表的结构。 _('KNA~  
然后是datanode,这个属性指定了schema的表,具体存放在哪个数据库,比如这个配置里面,指定了dn1的数据节点位于localhost1,这个数据库实例的名为db1的数据库。 H-,RzL/  
datahost列出了实际的后端MySQL集群的具体信息,writehost是负责写入数据的MySQL实例,writehost是负责读的MySQL实例,如果两个实例的具体信息写成一样,那就意味着后端使用单实例,如果配置成不同的实例,那么就在两个实例之间配置主从同步,然后通过MyCAT实现读写分离 *AU"FI> V  
对数据库进行垂直切分,主要由schema.xml来完成。 _(8HK  
7E9h!<5v  
IlcFW  
rule.xml如示例 61J01(+|  
AQ 5CrYb  
zSi SZMP"  
  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>
g{ cHh(S  
d6.9]V?  
E0Vl}b  
rule.xml里面的配置主要用于对表的水平切分,MyCAt本身提供了很多种水平切分的策略,这个示例显示的是取模分片,总共分成四片,user_id对1024取模,然后分成两片,每一片512个。 $v6dB {%Qu  
!Ax7k;T  
_;B N;].  
server.xml如示例 t'EH_ U  
  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>
<Z c:  
?)cNe:KY  
server.xml里面配置MyCAT的逻辑库参数,如示例,配置的就是逻辑库db1的登录用户名和密码 $W8  
F=hfbCF5x  
snBC +`-  
内存配置: |j i}LWcD  
imtW[y+4  
%XqLyeOS  
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据己的jvm参数调整。 m GWT</=[$  
'H`_Z e<  
<bf^'$l  
linux下命令: 8fdK|l w  
<)]B$~(a  
By@<N [I@  
./mycat start 启动 d+|8({X]D8  
./mycat stop 停止 1Ly?XNS  
./mycat console 前台运行 [PrR 3 0:  
./mycat install 添加到系统自动启动(暂未实现) 2I'\o7Y  
./mycat remove 取消随系统自动启动(暂未实现)  IjDG  
./mycat restart 重启服务 0rT-8iJp4P  
./mycat pause 暂停 w>X33Ff]8@  
./mycat status 查看启动状态 cmu5KeH  
}tU<RvT  
H+; _fd  
2D MH@U2  
h"YIAQ',  
下面是一些Mycat关键特性 'W$jHs  
支持SQL92标准 b=QO^  
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 *kxk@(lT?  
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 (G"b)"Qum  
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster =?57*=]0M  
基于Nio实现,有效管理线程,高并发问题。 / GJ"##<  
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 5-w6(uu  
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 oa`,|dA"  
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 q01zN:|-1  
支持多租户方案。 ha'oLm#  
支持分布式事务(弱xa)。 :f^O!^N  
支持全局序列号,解决分布式下的主键生成问题。 tGD$cBE  
分片规则丰富,插件化开发,易于扩展。 Xt8;Pl  
强大的web,命令行监控。 gzP(Lf I5  
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 q[q#cY:0  
支持密码加密 -2tX 15,  
支持服务降级 @}x)>tqD  
支持IP白名单 _q=$L eO5  
支持SQL黑名单、sql注入攻击拦截 x-Z`^O  
支持分表(1.6) s+^o[R T3  
:M ix*NCf  
5<a)SP 0  
测试mycat与测试mysql完全一致,mysql怎么连接,mycat就怎么连接。 _?@>S7-  
iAT&C`,(&  
6yTL7@V|B  
推荐先采用命令行测试: q`}Q[Li  
A@_F ;4X  
^$_ifkkLz  
mysql -uroot -proot -P8066 -h127.0.0.1 *D,+v!wG9  
bR*T}w$<  
%o#D"  
ssi{(}H/Jv  
bg_Zf7{  
如果采用工具连接,1.4,1.3目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。SQLyog 连接貌似有点问题。 -j]r\EVKS  
[ 此帖被小柒2012在2016-06-13 20:18重新编辑 ]
本帖最近评分记录: 2 条评分 云币 +20
ivmmff 云币 +10 您的帖子很精彩!希望很快能再分享您的下一帖! 2016-06-21
鬼才神兵 云币 +10 优秀文章-欢迎进行技术分享,感谢你的支持! 2016-06-14
级别: 论坛版主
发帖
9349
云币
14165
只看该作者 板凳  发表于: 2016-06-21
您的帖子很精彩!希望很快能再分享您的下一帖!
级别: 论坛版主
发帖
1784
云币
3327

只看该作者 沙发  发表于: 2016-06-14
优秀文章-欢迎进行技术分享,感谢你的支持!
发表主题 回复主题
« 返回列表上一主题下一主题

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