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

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

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

        最近在看数据主从,来实现读写分离。正好有有网友问到高并发的问题,所有就搜了一下数据库中间件的东东。一不小心就搜到了mycat,果然是神器。废话不多说,上文档。 *fd:(dN|  
BGfwgI.m  
1Z_]Ge<a  
一、简介 o;9H~E  
        MYCAT基于阿里开源的Cobar产品而研发,Cobar的稳定性、可靠性、优秀的架构和性能以及众多成熟的使用案例使得MYCAT一开始就拥有一个很好的起点,站在巨人的肩膀上,我们能看到更远。业界优秀的开源项目和创新思路被广泛融入到MYCAT的基因中,使得MYCAT在很多方面都领先于目前其他一些同类的开源项目,甚至超越某些商业产品。 k^JgCC+  
RKMF?:  
cMtUb  
       MYCAT背后有一支强大的技术团队,其参与者都是5年以上资深软件工程师、架构师、DBA等,优秀的技术团队保证了MYCAT的产品质量。 ,F!-17_vt  
SANb g&$  
;=%cA#}_0  
       MYCAT并不依托于任何一个商业公司,因此不像某些开源项目,将一些重要的特性封闭在其商业产品中,使得开源项目成了一个摆设。 {a>JQW5=  
}|-8- ;  
9JMf T]  
MYCAT架构 J#w=Z>oz<  
q}'<[Wg  
k,OxGG  
   f[`&3+  
二、安装使用 -hF!_);{  
O d6'bO;G  
we}5'bS>  
下载地址: https://github.com/MyCATApache/Mycat-download/tree/master/1.4-RELEASE jA@ uV,w  
4ke.p<dG  
B'B0e`  
或者 wget  https://github.com/MyCATApache/Mycat-download/blob/master/1.4-RELEASE/Mycat-server-1.4-release-20151019230038-linux.tar.gz #RdcSrw)W!  
,rY}IwM w  
>_\]c-~<  
下载的文件直接解压即可。 E^w0X,0XlE  
} ?+0s=Z  
e=tM=i"  
tar -xzvf  Mycat-server-1.4-release-20151019230038-linux.tar.gz !t)uRJ   
Jn&u u  
+5GC?cW  
配置xml: djdSD  
(:+Wc^0  
sBxCi~  
MyCAT目前通过配置文件的方式来定义逻辑库和相关配置,主要是包括三个文件: 925T#%y  
MYCAT_HOME/conf/schema.xml中定义逻辑库,表、分片节点等内容。 0!c/4^  
MYCAT_HOME/conf/rule.xml中定义分片规则。 # 5{lOeN  
MYCAT_HOME/conf/server.xml中定义用户以及系统相关变量,如端口等。 K(NP%:  
wqE2n  
]'#^ ~.  
schema.xml模版配置 : @71y:)W<  
93.L887  
-S@ ys  
  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>
i&}LuF8  
xnZ  
TYxi &;w  
比如在这个配置文件里面,就配置了一个数据库,db1。 U|+`Eth8(  
注意:MyCAT对外端显示出来的数据库,和数据库里面的表,全部在schema里面配置,没有写在这个里面的表或者库,即使后端的MySQL里面存在,也无法通过MyCAT去访问,不过MyCAT不会去定义具体表的结构。 naY#`xig  
然后是datanode,这个属性指定了schema的表,具体存放在哪个数据库,比如这个配置里面,指定了dn1的数据节点位于localhost1,这个数据库实例的名为db1的数据库。 p2GN93,u@P  
datahost列出了实际的后端MySQL集群的具体信息,writehost是负责写入数据的MySQL实例,writehost是负责读的MySQL实例,如果两个实例的具体信息写成一样,那就意味着后端使用单实例,如果配置成不同的实例,那么就在两个实例之间配置主从同步,然后通过MyCAT实现读写分离 esv<b>`R  
对数据库进行垂直切分,主要由schema.xml来完成。 `Z`o[]%  
,+5 !1>\  
CS xB)-  
rule.xml如示例 gFM~M(  
MLmk=&d  
Pi[(xD8  
  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>
!uKuO  
=*WfS^O  
rsK b9G  
rule.xml里面的配置主要用于对表的水平切分,MyCAt本身提供了很多种水平切分的策略,这个示例显示的是取模分片,总共分成四片,user_id对1024取模,然后分成两片,每一片512个。 .6i +_B|  
@^Kw\s  
- :x6X$=  
server.xml如示例 mndNkK5o  
  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>
xAf?E%_pi  
6A} 45  
server.xml里面配置MyCAT的逻辑库参数,如示例,配置的就是逻辑库db1的登录用户名和密码 erV&N,cI  
W$R@Klz  
i:^ 8zW  
内存配置: x1`Jlzrp,  
`b5pa`\4  
C:}"?tri  
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据己的jvm参数调整。 .!1E7\  
Or()AzwE@  
V#-8[G6Ra  
linux下命令: 74~ %4  
]u >~:  
k'd=|U;(FV  
./mycat start 启动 z0tm3ovp  
./mycat stop 停止 F)tcQO"G  
./mycat console 前台运行 R M`iOV,Y  
./mycat install 添加到系统自动启动(暂未实现) y-:d`>b>\  
./mycat remove 取消随系统自动启动(暂未实现) s !HOrhV  
./mycat restart 重启服务 -sk!XWW+  
./mycat pause 暂停 cfW;gFf  
./mycat status 查看启动状态 T C._kAm  
?w"zW6U  
AhSN'gWpbF  
h\OMWJ~  
A!`Q[%$  
下面是一些Mycat关键特性 !JwR[X\f  
支持SQL92标准 K!SFS   
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。 1:q5h*  
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。 <SNu`,/I  
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster @avG*Mr^  
基于Nio实现,有效管理线程,高并发问题。 `CEHl &w  
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数,支持跨库分页。 V0F&a~Q  
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。 )ocr.wU@  
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。 H_7EK  
支持多租户方案。 lyyR yFfQ  
支持分布式事务(弱xa)。 kt hy9<!$  
支持全局序列号,解决分布式下的主键生成问题。 kR;Hb3hb  
分片规则丰富,插件化开发,易于扩展。 1ihdH1rg[  
强大的web,命令行监控。 A#Jx6T`a  
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。 &\M<>>IB  
支持密码加密 #qdfr3  
支持服务降级 nHF%PH#|o  
支持IP白名单 77p8|63  
支持SQL黑名单、sql注入攻击拦截 96S#Q*6+R  
支持分表(1.6) i}r|Zo  
4Yya+[RY  
5X,|Pn  
测试mycat与测试mysql完全一致,mysql怎么连接,mycat就怎么连接。 7 y'2  
p;9"0rj,z  
5Z*6,P0  
推荐先采用命令行测试: h7F5-~SpD  
yk&PJ;%O<  
, LVZ  
mysql -uroot -proot -P8066 -h127.0.0.1 jkfc=O6^  
!juh}q&}|  
e4(E!;Z!QF  
^s?=$&8f![  
0hM!#BU5K  
如果采用工具连接,1.4,1.3目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。SQLyog 连接貌似有点问题。 N)^` 15w  
[ 此帖被小柒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 字节
如果您在写长篇帖子又不马上发表,建议存为草稿
 
验证问题: 阿里云官网域名是什么? 正确答案:www.aliyun.com
上一个 下一个
      ×
      全新阿里云开发者社区, 去探索开发者的新世界吧!
      一站式的体验,更多的精彩!
      通过下面领域大门,一起探索新的技术世界吧~ (点击图标进入)