MyCat安装及启动

1.1.1MySQL安装与启动

JDK:要求jdk必须是1.7及以上版本

MySQL:推荐mysql是5.5以上版本

MySQL安装与启动步骤如下:( 步骤1-5省略 )

(1)将MySQL的服务端和客户端安装包(RPM)上传到服务器

        

(2)查询之前是否安装过MySQL

rpm -qa|grep -i mysql

(3)卸载旧版本MySQL

rpm -e --nodeps  软件名称(上面查找出来的MySQL旧版本)

(4)安装服务端

rpm -ivh MySQL-server-5.5.49-1.linux2.6.i386.rpm

(5)安装客户端

rpm -ivh MySQL-client-5.5.49-1.linux2.6.i386.rpm

(6)启动MySQL服务

service mysql start

(7)登录MySQL

mysql -u root

(8)设置远程登录权限

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456'  WITH GRANT OPTION;

在本地SQLyog 连接远程MySQL进行测试 

1.1.2MyCat安装及启动

MyCat:

MyCat的官方网站:

http://www.mycat.org.cn/

下载地址:

https://github.com/MyCATApache/Mycat-download

第一步:将Mycat-server-1.4-release-20151019230038-linux.tar.gz上传至服务器

第二步:将压缩包解压缩。建议将mycat放到/usr/local/mycat目录下。

tar -xzvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

mv mycat /usr/local

第三步:进入mycat目录的bin目录,启动mycat

./mycat start

停止:

./mycat stop

mycat 支持的命令{ console | start | stop | restart | status | dump }

Mycat的默认端口号为:8066

1.2.0MyCat分片配置

(1)配置schema.xml

schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、逻辑表以及对应的分片规则、DataNode以及DataSource。弄懂这些配置,是正确使用MyCat的前提。这里就一层层对该文件进行解析。

schema 标签用于定义MyCat实例中的逻辑库

Table 标签定义了MyCat中的逻辑表  rule用于指定分片规则,auto-sharding-long的分片规则是按ID值的范围进行分片 1-5000000 为第1片  5000001-10000000 为第2片....  具体设置我们会在第5小节中讲解。

dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片

dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例读写分离配置和心跳语句

在服务器上创建3个数据库,分别是db1   db2   db3

修改schema.xml如下:

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="PINYOUGOUDB" checkSQLschema="false" sqlMaxLimit="100">

                 <table name="tb_test" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

        </schema>

        <dataNode name="dn1" dataHost="localhost1" database="db1" />

        <dataNode name="dn2" dataHost="localhost1" database="db2" />

        <dataNode name="dn3" dataHost="localhost1" database="db3" />

        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"

                 writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">

                 <heartbeat>select user()</heartbeat>

                 <writeHost host="hostM1" url="192.168.25.142:3306" user="root"

                         password="123456">

                 </writeHost>

        </dataHost>   

</mycat:schema>

(2)配置 server.xml

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。在system中添加UTF-8字符集设置,否则存储中文会出现问号

<property name="charset">utf8</property>

修改user的设置 ,  我们这里为 PINYOUGOUDB设置了两个用户

        <user name="test">

                 <property name="password">test</property>

                 <property name="schemas">PINYOUGOUDB</property>

        </user>

        <user name="root">

                 <property name="password">123456</property>

                 <property name="schemas">PINYOUGOUDB</property>

        </user>

1.3.4MyCat分片测试

进入mycat ,执行下列语句创建一个表:

CREATE TABLE tb_test (

  id BIGINT(20) NOT NULL,

  title VARCHAR(100) NOT NULL ,

  PRIMARY KEY (id)

) ENGINE=INNODB DEFAULT CHARSET=utf8

创建后你会发现,MyCat会自动将你的表转换为大写,这一点与Oracle有些类似。

我们再查看MySQL的3个库,发现表都自动创建好啦。好神奇。

接下来是插入表数据,注意,在写INSERT语句时一定要写把字段列表写出来,否则会出现下列错误提示:

错误代码: 1064

partition table, insert must provideColumnList

我们试着插入一些数据:

INSERT INTO TB_TEST(ID,TITLE) VALUES(1,'goods1');

INSERT INTO TB_TEST(ID,TITLE) VALUES(2,'goods2');

INSERT INTO TB_TEST(ID,TITLE) VALUES(3,'goods3');

我们会发现这些数据被写入到第一个节点中了,那什么时候数据会写到第二个节点中呢?

我们插入下面的数据就可以插入第二个节点了

INSERT INTO TB_TEST(ID,TITLE) VALUES(5000001,'goods5000001');

因为我们采用的分片规则是每节点存储500万条数据,所以当ID大于5000000则会存储到第二个节点上。

目前只设置了两个节点,如果数据大于1000万条,会怎么样呢?执行下列语句测试一下

INSERT INTO TB_TEST(ID,TITLE) VALUES(10000001,'goods10000001');

1.3.5MyCat分片规则

rule.xml用于定义分片规则  ,我们这里讲解两种最常见的分片规则

(1)按主键范围分片rang-long

在配置文件中我们找到

     <tableRule name="auto-sharding-long">

         <rule>

              <columns>id</columns>

              <algorithm>rang-long</algorithm>

         </rule>

     </tableRule>

tableRule 是定义具体某个表或某一类表的分片规则名称   columns用于定义分片的列  algorithm代表算法名称    我们接着找rang-long的定义

     <function name="rang-long"

         class="org.opencloudb.route.function.AutoPartitionByLong">

         <property name="mapFile">autopartition-long.txt</property>

     </function>

Function用于定义算法 mapFile 用于定义算法需要的数据,我们打开autopartition-long.txt

# range start-end ,data node index

# K=1000,M=10000.

0-500M=0

500M-1000M=1

1000M-1500M=2

 

(2)一致性哈希murmur

当我们需要将数据平均分在几个分区中,需要使用一致性hash规则

我们找到function的name为murmur 的定义,将count属性改为3,因为我要将数据分成3片

           <function name="murmur"

                     class="org.opencloudb.route.function.PartitionByMurmurHash">

                     <property name="seed">0</property><!-- 默认是0 -->

                     <property name="count">3</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->

                     <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->

                     <!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->

                     <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>

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

           </function>

我们再配置文件中可以找到表规则定义

     <tableRule name="sharding-by-murmur">

         <rule>

              <columns>id</columns>

              <algorithm>murmur</algorithm>

         </rule>

     </tableRule>

但是这个规则指定的列是id ,如果我们的表主键不是id ,而是order_id ,那么我们应该重新定义一个tableRule:

     <tableRule name="sharding-by-murmur-order">

         <rule>

              <columns>order_id</columns>

              <algorithm>murmur</algorithm>

         </rule>

     </tableRule>

在schema.xml中配置逻辑表时,指定规则为sharding-by-murmur-order

<table name="tb_order" dataNode="dn1,dn2,dn3" rule="sharding-by-murmur-order" />

1.3了解数据库读写分离

        数据库读写分离对于大型系统或者访问量很高的互联网应用来说,是必不可少的一个重要功能。对于MySQL来说,标准的读写分离是主从模式,一个写节点Master后面跟着多个读节点,读节点的数量取决于系统的压力,通常是1-3个读节点的配置。

 


Mycat 读写分离和自动切换机制,需要 mysql 的主从复制机制配合。



  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值