一步一步在Windows中使用MyCat负载均衡 上篇

传统关系型数据库的分布式开发通常需要自己做,不仅耗时耗力而且效果不是很理想,当想快速搭建时,最初想到的是看有没有第三方,网上牛人还是很多的,做得比较好的其中之一Mycat,它是开源的分布式数据库系统,解决数据库的负载均衡,主备复制,读写分离,简单来说就是你只管直接与mycat通讯,至于分离什么的交给它里面自己做,其它啥都不用操心。

至于什么是MyCat有什么优势,可以看看官网介绍Mycat 数据库分库分表中间件

上图是MyCat架构图。

MyCat可以与HAProxy使用实现高可用数据库集群,更深入的内容自己去查,本章只详讲从0开始使用MyCat 基础篇,至少能先跑起来。

一、下载

本次运行环境为windows,Linux下更好吧,然后数据库用mysql,需要java环境,下载jdk8

jdk安装配置

1. 首先去oracle官网下载并安装jdk8,添加环境变量,JAVA_HOME设置为D:\Java\jdk1.8

2. CLASSPATH设置为.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

3. path系统变量追加%JAVA_HOME%\bin;

安装Mysql,需要注意的是数据库,表,字段的编码都采用utf8吧,否则插入的中文显示为乱码,具体解决方法网上查一查,去试一试。

下载MyCat,http://dl.mycat.io/   选择最新的版本下载。(下图可以看到还有其它前面需要的资源都可以从这里下载)

二、配置

下载解压后就要先配置MyCat了,(这里不是exe文件,没有安装,配置好后直接运行startup_nowrap.bat)

打开mycat\conf里面的startup_nowrap.bat 为了降低资源占用,mycat的jvm设置在startup_nowrap.bat 可以清楚看到如下配置:

“%JAVA_CMD%” -server -Xms1G -Xmx2G -XX:MaxPermSize=64M -XX:+AggressiveOpts -XX:MaxDirectMemorySize=1G -DMYCAT_HOME=%MYCAT_HOME% -cp “..\conf;..\lib*” io.mycat.MycatStartup

这里将-Xms1G改成-Xms512M,-Xmx2G改成-Xmx1024M,保存后重新启动即可。

添加Windows环境变量,MYCAT_HOME设置为安装目录D:\MycatServer1.5

修改wrapper.conf文件里的改成wrapper.java.command=D:\jdk1.8\bin\java.exe

三、连接MySQL

Mycat绑定MySQL 启动的配置

conf 配置文件存放配置文件:

--server.xml:是Mycat服务器参数调整和用户授权的配置文件。--schema.xml:是逻辑库定义和表以及分片定义的配置文件。--rule.xml:  是分片规则的配置文件,分片规则的具体一些参数信息单独存放为文件,也在这个目录下,配置文件修改需要重启MyCAT。--log4j.xml: 日志存放在logs/log中,每天一个文件,日志的配置是在conf/log4j.xml中,根据自己的需要可以调整输出级别为debug                          debug级别下,会输出更多的信息,方便排查问题。--autopartition-long.txt,partition-hash-int.txt,sequence_conf.properties, sequence_db_conf.properties 分片相关的id分片规则配置文件--lib    MyCAT自身的jar包或依赖的jar包的存放目录。--logs        MyCAT日志的存放目录。日志存放在logs/log中,每天一个文件

具体什么意思后面慢慢看。

先解决主配置,server.xml配置文件配置访问用户及权限, 修改高亮处信息,其中mycat、user为访问mycat的用户,TESTDB为mycat虚拟的数据库,供上层应用访问。

123456TESTDB-->

-->123456TESTDBtrue

mycat的数据库配置是在schema.xml中配置,这部分不太好理解,精简了一下,主要分schema、dataNode、dataHost三个主要配置。

节点定义了mycat的虚拟数据库为TESTDB,下面借用园友的说明:

dataNode的意义很简单,这个逻辑表的数据存储在后端的哪几个数据库里面rule代表的是这个逻辑表students的具体切分策略,目前MyCAT只支持按照某一个特殊列,遵循一些特殊的规则来切分,如取模,枚举等,具体的留给之后细说-->

这意味着,childtable的joinkey会按照父表的parentKey的策略一起切分,当父表与子表进行连接,

且连接条件是childtable.joinKey=parenttable.parentKey时,不会进行跨库的连接.-->

这里的测试过程比较麻烦,所以直接贴结论:

1.balance=0时,读操作都在localhost上(localhost失败时,后端直接失败)

2.balance=1时,读操作会随机分散在localhost1和两个readhost上面(localhost失败时,写操作会在localhost1,如果localhost1再失败,则无法进行写操作)

3.balance=2时,写操作会在localhost上,读操作会随机分散在localhost1,localhost1和两个readhost上面(同上)

4.writeType=0时,写操作会在localhost上,如果localhost失败,会自动切换到localhost1,localhost恢复以后并不会切换回localhost进行写操作

5.writeType=1时,写操作会随机分布在localhost和localhost1上,单点失败并不会影响集群的写操作,但是后端的从库会无法从挂掉的主库获取更新,会在读数据的时候出现数据不一致

举例:localhost失败了,写操作会在localhost1上面进行,localhost1的主从正常运行,但是localhost的从库无法从localhost获取更新,localhost的从库于其他库出现数据不一致-->select user()-->

以上配置注意高亮部分,配置的是每个dn对应哪个实体服务器里面哪个实体库(此处只有本机,所以都绑定到本机localhost,再添加3个不同的数据库TESTDB1\TESTDB2\TESTDB3,手动都添加要测试的表,若有多余的服务器可以将ip替换掉测试),详细的内容参考文中的注释。

经过实验 goods表:在mycat的TESTDB的虚拟表goods中添加一行记录会在 TESTDB1和TESTDB2中的表goods同步添加一行记录。

hotnews表:在mycat的TESTDB的虚拟表hotnews中添加的一行记录会随机插入 TESTDB1、TESTDB2、TESTDB3的其中一个库中的hotnews表。

其它表的测试你们自己试试。

这就是分片,靠的是分片规则,下面就来看rule。

(每个数据库中相同的表要手工提前生成表结构,否则会提示找不到此表,操作mycat时它并不能自动同步实体数据库生成,可能有方法,现在还没深入了解)

rule.xml配置文件,可以先不管。


- you may not use this file except in compliance with the License. - You

may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0

- - Unless required by applicable law or agreed to in writing, software -

distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT

WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the

License for the specific language governing permissions and - limitations

under the License.-->idfunc1user_idfunc1sharding_idhash-intidrang-longidmod-longidmurmurcreate_datepartbymonthcalldatelatestMonthidrang-modidjump-consistent-hash02160weightMapFile 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替-->/etc/mycat/bucketMapPath-->

用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西-->partition-hash-int.txtautopartition-long.txt3812824yyyy-MM-dd2015-01-01partition-range-mod.txt3

四、运行

用管理员权限运行startup_nowrap.bat启动MyCat。

若出现上面的问题,检查java的环境是否正确和mycat的环境配置。

启动成功后会出现:

#如果启动失败,请修改D:\mycat\bin\startup_nowrap.bat文件中的以下参数。默认占用内存为2G

D:\dev-bin\mycat\bin>"C:\Program Files (x86)\Java\jdk1.7.0_13/bin/java" -server-Xms512m -Xmx512m -XX:MaxPermSize=64M-XX:+AggressiveOpts -XX:MaxDirectMemorySize=768m-DMYCAT_HOME=D:\

p "..\conf;..\lib\*" io.mycat.MycatStartup

然后dos中会不停的出现心跳检测,有错误信息可去mycat\logs中查看日志。

注意:如日志中出现192.168.xxx not connected 等信息,请允许对应的mysql远程访问,且先提前独自检查mysql都能正确访问。

使用navicat连接mycat,操作方式和连接物理mysql库一致,用户mycat,密码123456,端口8066

连接成功后,将看到TESTDB数据库和hotnews等数据表

在hotnews表中添加一些数据,保存

执行select * from hotnews 查看操作,然后去TESTDB1、TESTDB2、TESTDB3中查询hotnews表

MyCat中TESTDB是中间件逻辑数据库,MySQL中的testdb、testdb2、testdb3是真实的数据库。

在mycat中添加数据时若提示testdb2.hotnews不存在,则要手动在testdb2中添加相同表结构。

添加完后,可以看到hotnews记录在三个testdb、testdb2、testdb3中是均衡随机插入的。

而goods在testdb、testdb2中是一样的。

至此可以配置出MyCat了,敬请期待下篇 net下如何使用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,265评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,078评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,852评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,408评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,445评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,772评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,921评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,688评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,130评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,467评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,617评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,276评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,882评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,740评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,967评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,315评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,486评论 2 348

推荐阅读更多精彩内容