当前位置: 56net亚洲必嬴 > 数据库 > 正文

必嬴56net:猫从哪儿来,要到什么地方去(Mycat的前

时间:2019-10-24 18:29来源:数据库
1  海量数据的储慰藉题 现行反革命搭乘飞机网络的开发进取,数据的量级也是撑指数的升高,从GB到TB到PB。对数据的各个操作也是更上一层楼的困难,古板的关系性数据库已经心余力

海量数据的储慰藉题

现行反革命搭乘飞机网络的开发进取,数据的量级也是撑指数的升高,从GB到TB到PB。对数据的各个操作也是更上一层楼的困难,古板的关系性数据库已经心余力绌满意飞快查询与插入数据的急需。这一年NoSQL的现身有的时候消除了那风流罗曼蒂克危害。它经过减少数据的安全性,减少对业务的帮忙,减弱对复杂查询的支撑,来获得质量上的进级。

然而,在多少场面NoSQL一些投降是无计可施知足使用情形的,就比如某个使用意况是纯属要有作业与石嘴山目的的。这一年NoSQL确定是回天无力知足的,所以依旧需求运用关系性数据库。假诺运用关系型数据库解决海量存款和储蓄的标题吗?此时就需求做数据库集群,为了抓好查询品质将多个数据库的数额分散到分歧的数据库中蕴藏。

【分布式架构初探】

实战操作可参照:

Mycat 完结 MySQL 读写抽离

环境:CentOS 6.8

实验拓扑:

        mycat
        /    
  master -- slave (主从复制)

mycat: 192.168.0.121
master: 192.168.0.120
slave: 192.168.0.122

Mycat 提供了编写翻译好的安装包,下载地址:http://dl.mycat.io
Mycat 官方首页:http://mycat.org.cn

Index of /

../
1.6-RELEASE/                                       28-Oct-2016 12:56                   -
1.6.5-DEV/                                         15-Jan-2017 07:10                   -
2.0-dev/                                           02-Jan-2017 07:24                   -
mycat-web-1.0/                                     02-Jan-2017 07:40                   -
yum/                                               18-May-2016 02:51                   -
Mycat-server-1.4-beta-20150604171601-linux.tar.gz  27-Jun-2015 10:09             7663894
apache-maven-3.3.3-bin.tar.gz                      27-Jun-2015 10:09             8042383
apache-tomcat-7.0.62.tar.gz                        27-Jun-2015 10:09             8824528
jdk-7u79-linux-x64.tar.gz                          27-Jun-2015 10:09           153512879
jdk-8u20-linux-x64.tar.gz                          27-Jun-2015 10:09           160872342
phpMyAdmin-4.4.9-all-languages.tar.gz              27-Jun-2015 10:09             9352049
probe-2.3.3.zip                                    27-Jun-2015 10:09             7957290
toolset.sh                                         26-Oct-2015 05:03               16015
zookeeper-3.4.6.tar.gz

wget 一下 Mycat-server 1.6 和 jdk-7u79 两个包:

wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
wget http://dl.mycat.io/jdk-7u79-linux-x64.tar.gz

[root@vm2 ~]# ll -h Mycat* jdk*
-rw-r--r-- 1 root root 147M Jun 27  2015 jdk-7u79-linux-x64.tar.gz
-rw-r--r-- 1 root root 7.4M Jun 27  2015 Mycat-server-1.4-beta-20150604171601-linux.tar.gz

Mycat-server 包解压后可一直使用。

tar -xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/

其目录结构是如此的:

[root@vm2 local]# tree -L 1 mycat
mycat
|-- bin
|-- catlet
|-- conf
|-- lib
|-- logs
`-- version.txt

5 directories, 1 file

bin 目录中是可试行文件以至脚本,我们得以行使此中的 mycat 脚本决定mycat的运行和停业。

conf 目录中是安排文件,这里配置读写抽离首要接纳 schema.xml 和 server.xml。别的安插分片的安顿请参见官方文书档案。

logs 目录寄放日志文件,蒙受mycat出错了,就在那地查看难点的案由。

安装 jdk:

mkdir /usr/java
tar -xf jdk-7u79-linux-x64.tar.gz -C /usr/java 

[root@vm2 logs]# cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.7.0_79
export PATH=$JAVA_HOME/bin:$PATH

source /etc/profile.d/java.sh

[root@vm2 logs]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

完成。

这里只讲明一下读写分离用到的安排文件:server.xml, schema.xml。

前提:已经有一个布置好的 mysql 生机勃勃主后生可畏从框架结构。

多少个中坚集群在Mycat里面由一个 dataNode 定义,dataNode 定义了三个数据库实例及其间的一个实际的库。Mycat 的一个数据库实例能够实际上是贰个主从复制架构:后生可畏主多从,生龙活虎主后生可畏从,多主多从等等,具体在 dataHost 中定义。

此间创建三个非拆分库(将mycat逻辑库绑定到三个切实的 dataNode 上)testdb,绑定到 dn1 这几个 dataNode 上。

1.1 怎么是数据库分片

轻巧的话,就是指通过某种特定的尺度,将大家寄存在同一个数据库中的数据分散存放到多个数据库(主机)下边,以高达疏散单台设备负载的效劳。

数据的切分(Sharding)依据其切分法规的类别,能够分成三种切分方式。

(1)大器晚成种是比照差异的表(只怕Schema)来切分到差别的数据库(主机)之上,这种切能够称之为数据的垂直(纵向)切分

必嬴56net 1

 

 

 

(2)此外意气风发种则是依赖表中的数目标逻辑关系,将同二个表中的数目遵照某种条件拆分到多台数据库(主机)上面,这种切分称之为数据的程度(横向)切分。

 必嬴56net 2

 

第五节-猫从哪儿来,要到何地去(Mycat的前生今生)

5.1 MyCAT猫的前世
5.2 MyCAT猫的今生
5.3 十分钟安装使用
5.4 MYCAT下实现读写分离
5.5 切!切!切!MyCAT中分表分库策略
5.6 MyCAT的五脏六腑
5.7 课后作业

一、环境

schema.xml:

<schema name="testdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">

</schema>

前不久具备的表会走暗许的节点 dn1。逻辑库 testdb,对应了数码节点 dn1。dn1 对应着真实的数据库实例上的叁个如履薄冰的库。

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

定义数据节点,dn1,那些节点对应一个数据库实例中的叁个实际的库,库名字为db1。

dataNode 标订立义了 MyCat 中的数据节点,也正是大家经常说所的数码分片。多个 dataNode 标签正是一个单身的数额分片。

事例中所表述的情趣为:使用名为 vm3306 数据库实例上的 db1 物理数据库,那就重新组合三个数额分片,最 后,大家运用名字 dn1 标志这么些分片。

该属性用于定义该分片属性哪个具体数据库实例上的具体库,因为这里运用三个纬度来定义分片,正是:实 例+具体的库。因为各样库上树立的表和表结构是同等的。所以这么做就足以轻易的对表进行水平拆分。

dataHost: 包罗三个 writeHost 和 七个readHost,它们以前已经布置好主从复制了。

balance="3":表示写央求只发放节点,读央浼只发放读节点。

<dataHost name="vm3306" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native">

    <heartbeat>select user()</heartbeat>

    <!-- can have multi write hosts -->

    <writeHost host="hostM1" url="192.168.0.120:3306" user="tuser" password="guli123">
        <!-- can have multi read hosts -->
        <readHost host="hostS1" url="192.168.0.122:3306" user="tuser" password="guli123"/>
    </writeHost>

    <!-- <writeHost host="hostM2" url="localhost:3316" user="tuser" password="guli123"/> --> 
</dataHost>

user 及 password属性是后端主从mysql的账户密码音信。

dataHost属性表明:

  1. writeType="0", 全部写操作发送到配置的率先个 writeHost,第二个挂了切到还健在的第2个writeHost,重新开动后已切换后的为准,切换记录在配备文件中:dnindex.properties .

  2. balance="3",全数读须要随机的分发到 wiriterHost 对应的 readhost 施行,writerHost 不担当读压力,注意 balance=3 只在 1.4 会同以往版本有,1.3 未有。

1.2 何以落成数据库分片

当数据库分片后,数据由一个数据库分散到多个数据库中。此时系统要查询时要求切换不一致的数据库进行询问,那么系统怎样知道要查询的数码在哪个数据库中?当增多一条记下时要向哪些数据库中插入呢?这一个主题素材管理起来都以极其的麻烦。

这种情景下得以行使八个数据库中间件mycat来缓和有关的主题素材。接下来领悟一下什么是mycat。

5.1 MyCAT猫的前生##


近年来猫为何这么火,Apache的猫,MyCAT的猫。
基本上都长这些样

5.1-01.png

MyCAT原来本未有想着来生做猫的,因为他的前生是Ali的Cobar,
转世之后,成为了MyCAT,並且开源了,就决定做一个中华的Apache猫.

共谋他的前生是Ali的Cobar, Cobar的撰稿人离职了以往,Cobar就大约从未开展一而再一而再开辟和保安了,
新生转为开源的MyCAT,又扩充了高速的腾飞,未来初始总计有超过常规300个种类应用mycat,当中包蕴:
中国际结盟通/中国移动/兔儿菜传播媒介/天狮集团等等

5.1-02.png

为什么有像这种类型多的显赫公司选拔mycat 呢, 大家看看他们的业务量,
1.安智账户种类, 数据量单表6000万条,20多张表,上亿条数据, 系统运转优异,偶然有SQL操作迟缓的情景。
2.公安项目,十九个表,30多亿条数据,选拔适合的事体使用mycat

从那么些品种中咱们可以看出,mycat专长对上亿条单表数据量的管理,并提供精美的实时查询服务。
而作者辈知晓,MYSQL的库中很难处理上亿条数据的查询工作,MYCAT升高了MYSQL数据库的管理工科夫,
从官方的解释来看,MYCAT相符管理千亿条以下的数量,千亿条以上的数量更相符HADOOP这几个种类来管理。

说了半天,什么是MYCAT呢?
MYCAT正是多少个设想的MYSQL SE奇骏VE奥迪Q5, 这么说大概不太理解, 但是对于使用来讲,他就是四个MYSQL SE哈弗VE奥迪Q7,
动用犹如连接普通的MYSQL数据库一样的 去老是他,SQL查询、操作等等相像。

而MYCAT把数据库复杂的架构,以致幕后复杂的分表分库的逻辑全体透明化了,MYCAT中间件连接八个MYSQL数据库,
多个数据库之间还足以做为主同步,而这一切的百分百,对使用来讲,唯有一个数据库,那便是MYCAT。

操作系统:CentOS-6.6-x86_64-bin-DVD1.iso

server.xml 配置:

    <user name="test">
            <property name="password">test</property>
            <property name="schemas">testdb</property>
    </user>

    <user name="user">
            <property name="password">user</property>
            <property name="schemas">testdb</property>
            <property name="readOnly">true</property>
    </user>

大家在主导 mysql 中开创测验客商 tuser,付与增加和删除改查,创制库和表的权柄。

master:

mysql> GRANT CREATE,DELETE,INSERT,SELECT,UPDATE ON db1.* TO 'tuser'@'192.168.0.%' IDENTIFIED BY 'guli123';

启动 mycat:

cd /usr/local/mycat/bin
./mycat start

开发银行 mycat 遭逢第三个日志报错,在 logs/wrapper.log 见到如下错误:

ERROR  | wrapper  | 2017/01/23 11:59:42 | JVM exited while loading the application.
INFO   | jvm 1    | 2017/01/23 11:59:42 | Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000007a6aa0000, 1431699456, 0) failed; error='Cannot allocate memory' (errno=12)
INFO   | jvm 1    | 2017/01/23 11:59:42 | #
INFO   | jvm 1    | 2017/01/23 11:59:42 | # There is insufficient memory for the Java Runtime Environment to continue.
INFO   | jvm 1    | 2017/01/23 11:59:42 | # Native memory allocation (malloc) failed to allocate 1431699456 bytes for committing reserved memory.

提醒说并未有足够的内存来运维 Java 运转时境况,因为本身用的设想机,给了 512M 内部存款和储蓄器,所以内部存款和储蓄器非常不足,重新分配了1.5G,就不会报那个错了。

起步 mycat 遇到第四个日志报错,在 logs/wrapper.log 见到如下错误:

[root@vm2 logs]# tail -f wrapper.log:

ERROR  | wrapper  | 2017/01/23 17:19:28 | JVM exited while loading the application.
INFO   | jvm 5    | 2017/01/23 17:19:28 | 错误: 代理抛出异常错误: java.net.MalformedURLException: Local host name unknown: java.net.UnknownHostException: vm2: vm2: 未知的名称或服务

不当提示,恐怕未有安插好本地主机名的名号深入分析。

加多本地主机名深入分析:

[root@vm2 bin]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.0.121 vm2

再度尝试运行:

# ./mycat start

翻看日志 wrapper.log:

INFO   | jvm 1    | 2017/01/23 17:24:40 | log4j 2017-01-23 17:24:40 [./conf/log4j.xml] load completed.
INFO   | jvm 1    | 2017/01/23 17:24:41 | MyCAT Server startup successfully. see logs in logs/mycat.log

显示运营成功,这一次OK了。

Mycat介绍

5.2 MyCAT猫的现世##


MYCAT发展到将来曾经不只有是MYSQL的代理了,它还辅助SQLSELANDVE凯雷德/ORACLE/DB2/POSTGRESQL等主流数据库。
MYCAT仍然是能够将多少个表定义为其余豆蔻年华种MYCAT扶持的寄放形式,譬喻MySQL的MyISAM 表、内部存款和储蓄器表、恐怕MongDB这种
内部存款和储蓄器数据库上。

MYCAT这么强大,那么她的规律是还是不是专程的复杂,非也,Mycat 的法则能够用一个动词来描写:”拦截“
它阻挡应用发送过来的SQL, 并对SQL语句实香港行政局地一定的深入分析:分片深入分析、路由剖判、读写抽离解析、缓存深入分析等,然后将
剖析后的SQL分别发送到不一样的真人真事数据库,最后对数据库重回的结果进行拍卖,重临给客商。

5.2-01.png

下边罗列多少个MYCAT 规范的应用场景:

  • 单纯的读写分离,在底下大家会有批注怎么样进展Mycat上边包车型客车读写分离的配备
  • 分表分库,对于当先1000万的表举办分片,最大帮助1000亿的单表分片
  • 多租户应用,每种应用一个库,但应用程序只连接MYCAT ,进而不改动程序自个儿,实现多租户
  • 报表系统,依赖于MYCAT的分表本事,处理大面积报表的总括
  • 代表HBase, 解析大额
  • 用作海量数据实时查询的豆蔻梢头种轻松实用的建设方案, 比方100亿条数据要求在3秒内实时查询出来,此时得以设想MYCAT

明天MYCAT社区活跃,MYCAT 左近的系统也逐步衍生出来,渐渐的产生了MYCAT生态圈了,像MYCAT-WEB 监察和控制,MYCAT-HA
高可用方案等等,所以MYCAT依然很值得我们学习和切磋的。

JDK版本:jdk1.7.0_45

Mycat 管理命令与监控

2.1 什么是Mycat?

 

Mycat 背后是Ali现已开源的名牌产品——Cobar。Cobar 的主干职能和优势是 MySQL 数据库分片,此产品早就传出,听大人讲最初的发起者对 Mysql 很明白,后来从阿里换单位了,阿里随后开源的 Cobar,并保证到 二〇一三 年年终,然后,就未有然后了。

Cobar 的思路和得以达成路线的确不易。基于 Java 开垦的,达成了 MySQL 公开的二进制传输公约,奇妙地将和煦伪装成一个MySQL Server,最近市情上绝大许多 MySQL 顾客端工具和平运动用都能相配。比本身达成一个新的数据库公约要明智的多,因为生态意况在哪个地方摆着。

 

Mycat 是依照 cobar 蜕变而来,对 cobar 的代码进行了干净的重构,使用 NIO 重构了网络模块,并且优化了 Buffer 内核,巩固了汇集,Join 等基本特色,同不经常常间匹配绝大比超多数据库成为通用的数据库中间件。

大约的说,MyCAT正是:

·二个新星的数据库中间件产品扶持mysql集群,或许mariadb cluster,提供高可用性数据分片集群。你能够像使用mysql同样使用mycat。对于开发人士来说根本感到不到mycat的存在。

 必嬴56net 3

5.3 十二分钟安装使用##


MYCAT即便强盛,但是她的装置却特别简单, 上面大家进去大家十分钟安装教程:

MyCat版本:Mycat-server-1.4-release-20151019230038-linux.tar.gz

1. 管理命令

mysql -h127.0.0.1 -utest -ptest -P9066

MyCAT 本人有相似其余数据库的管住监察和控制措施,能够由此 Mysql 命令行,登陆管理端口(9066)奉行相应 的 SQL 举行保管,也能够经过 jdbc 的点子进行长途连接管理,本小节首要疏解命令行的保管操作。

签到:这几天 mycat 有七个端口,8066 数据端口,9066 管理端口,命令行的登入是经过 9066 处理端口来操 作,登陆格局临近于 mysql 的服务端登入。

mysql -h127.0.0.1 -utest -ptest -P9066 [-dmycat]
-h 后面是主机,即当前 mycat 按照的主机地址,本地可用 127.0.0.1 远程需要远程 ip -u Mycat server.xml 中配置的逻辑库用户
-p Mycat server.xml 中配置的逻辑库密码
-P 后面是端口 默认 9066,注意 P 是大写
-d Mycat server.xml 中配置的逻辑库 

数码端口与治本端口的配备端口校订:数据端口私下认可 8066,管理端口暗许 9066 ,倘诺急需改革供给安顿 server.xml

管住端口用于施行管理命令:

mysql -h127.0.0.1 -utest -ptest -P9066 

指令端口客户执行增删改查等 SQL 语句:

mysql -h127.0.0.1 -utest -ptest -P8066 

上面先看看管理端口扶持的命令。

从 9066 管理端口登录后,推行 show @@help 能够查阅到具有命令:

mysql> show @@help;
+------------------------------------------+--------------------------------------------+
| STATEMENT                                | DESCRIPTION                                |
+------------------------------------------+--------------------------------------------+
| show @@time.current                      | Report current timestamp                   |
| show @@time.startup                      | Report startup timestamp                   |
| show @@version                           | Report Mycat Server version                |
| show @@server                            | Report server status                       |
| show @@threadpool                        | Report threadPool status                   |
| show @@database                          | Report databases                           |
| show @@datanode                          | Report dataNodes                           |
| show @@datanode where schema = ?         | Report dataNodes                           |
| show @@datasource                        | Report dataSources                         |
| show @@datasource where dataNode = ?     | Report dataSources                         |
| show @@datasource.synstatus              | Report datasource data synchronous         |
| show @@datasource.syndetail where name=? | Report datasource data synchronous detail  |
| show @@datasource.cluster                | Report datasource galary cluster variables |
| show @@processor                         | Report processor status                    |
| show @@command                           | Report commands status                     |
| show @@connection                        | Report connection status                   |
| show @@cache                             | Report system cache usage                  |
| show @@backend                           | Report backend connection status           |
| show @@session                           | Report front session details               |
| show @@connection.sql                    | Report connection sql                      |
| show @@sql.execute                       | Report execute status                      |
| show @@sql.detail where id = ?           | Report execute detail status               |
| show @@sql                               | Report SQL list                            |
| show @@sql.high                          | Report Hight Frequency SQL                 |
| show @@sql.slow                          | Report slow SQL                            |
| show @@sql.resultset                     | Report BIG RESULTSET SQL                   |
| show @@sql.sum                           | Report  User RW Stat                       |
| show @@sql.sum.user                      | Report  User RW Stat                       |
| show @@sql.sum.table                     | Report  Table RW Stat                      |
| show @@parser                            | Report parser status                       |
| show @@router                            | Report router status                       |
| show @@heartbeat                         | Report heartbeat status                    |
| show @@heartbeat.detail where name=?     | Report heartbeat current detail            |
| show @@slow where schema = ?             | Report schema slow sql                     |
| show @@slow where datanode = ?           | Report datanode slow sql                   |
| show @@sysparam                          | Report system param                        |
| show @@syslog limit=?                    | Report system mycat.log                    |
| show @@white                             | show mycat white host                      |
| show @@white.set=?,?                     | set mycat white host,[ip,user]             |
| show @@directmemory=1 or 2               | show mycat direct memory usage             |
| switch @@datasource name:index           | Switch dataSource                          |
| kill @@connection id1,id2,...            | Kill the specified connections             |
| stop @@heartbeat name:time               | Pause dataNode heartbeat                   |
| reload @@config                          | Reload basic config from file              |
| reload @@config_all                      | Reload all config from file                |
| reload @@route                           | Reload route config from file              |
| reload @@user                            | Reload user config from file               |
| reload @@sqlslow=                        | Set Slow SQL Time(ms)                      |
| reload @@user_stat                       | Reset show @@sql  @@sql.sum @@sql.slow     |
| rollback @@config                        | Rollback all config from memory            |
| rollback @@route                         | Rollback route config from memory          |
| rollback @@user                          | Rollback user config from memory           |
| reload @@sqlstat=open                    | Open real-time sql stat analyzer           |
| reload @@sqlstat=close                   | Close real-time sql stat analyzer          |
| offline                                  | Change MyCat status to OFF                 |
| online                                   | Change MyCat status to ON                  |
| clear @@slow where schema = ?            | Clear slow sql by schema                   |
| clear @@slow where datanode = ?          | Clear slow sql by datanode                 |
+------------------------------------------+--------------------------------------------+
58 rows in set (0.00 sec)

查看 mycat 版本:

mysql> show @@version;
+-----------------------------------------+
| VERSION                                 |
+-----------------------------------------+
| 5.6.29-mycat-1.6-RELEASE-20161028204710 |
+-----------------------------------------+
1 row in set (0.00 sec)

翻开当前的库:

mysql> show @@database;
+----------+
| DATABASE |
+----------+
| testdb   |
+----------+
1 row in set (0.00 sec)

查看 MyCAT 的数额节点的列表,对应 schema.xml 配置文件的 dataNode 节点:

mysql> show @@datanode;
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| NAME | DATHOST    | INDEX | TYPE  | ACTIVE | IDLE | SIZE | EXECUTE | TOTAL_TIME | MAX_TIME | MAX_SQL | RECOVERY_TIME |
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
| dn1  | vm3306/db1 |     0 | mysql |      0 |    8 | 1000 |     244 |          0 |        0 |       0 |            -1 |
+------+------------+-------+-------+--------+------+------+---------+------------+----------+---------+---------------+
1 row in set (0.00 sec)

中间,“NAME”表示 dataNode 的称谓;“dataHost”表示对应 dataHost 属性的值,即数据主机; “ACTIVE”表示活跃连接数;“IDLE”表示闲置连接数;“SIZE”对应总连接数量。

这里有 8 个空闲连接,那大家去主从节点用 netstat -ntp 命令看看创立的连天景况:

master:

[root@vm1 ~]# netstat -ntp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 192.168.0.120:22            192.168.0.104:60060         ESTABLISHED 1492/sshd
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58636  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58640  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58582  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58644  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58646  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58641  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58635  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.121:58632  ESTABLISHED 1414/mysqld
tcp        0      0 ::ffff:192.168.0.120:3306   ::ffff:192.168.0.122:48205  ESTABLISHED 1414/mysqld

slave:

[root@vm3 ~]# netstat -ntp
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 192.168.0.122:48205         192.168.0.120:3306          ESTABLISHED 1607/mysqld
tcp        0      0 192.168.0.122:22            192.168.0.104:60102         ESTABLISHED 1196/sshd
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45593  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45591  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45583  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45589  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45579  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45580  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45588  ESTABLISHED 1607/mysqld
tcp        0      0 ::ffff:192.168.0.122:3306   ::ffff:192.168.0.121:45577  ESTABLISHED 1607/mysqld

可观望有超多从 mycat 服务器发起数据库连接(主有9个一而再,从有8个接二连三)。

翻欢腾跳报告:

mysql> show @@heartbeat;
+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| NAME   | TYPE  | HOST          | PORT | RS_CODE | RETRY | STATUS | TIMEOUT | EXECUTE_TIME | LAST_ACTIVE_TIME    | STOP  |
+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
| hostM1 | mysql | 192.168.0.120 | 3306 |       1 |     0 | idle   |       0 | 1,1,1        | 2017-01-24 06:44:38 | false |
| hostS1 | mysql | 192.168.0.122 | 3306 |       1 |     0 | idle   |       0 | 1,1,1        | 2017-01-24 06:44:38 | false |
+--------+-------+---------------+------+---------+-------+--------+---------+--------------+---------------------+-------+
2 rows in set (0.00 sec)

该命令用于报告心跳状态

RS_CODE 状态:
    OK_STATUS = 1;正常状态
    ERROR_STATUS = -1; 连接出错
    TIMEOUT_STATUS = -2; 连接超时
    INIT_STATUS = 0; 初始化状态

若节点故障,会接连暗许 5 个周期检验,心跳一而再退步,就能够成为-1,节点故障确认,然后恐怕发生切换

查阅 Mycat 的前端连接景况,即选用与 mycat 的接连:

mysql> show @@connectionG
*************************** 1. row ***************************
    PROCESSOR: Processor0
           ID: 1
         HOST: 127.0.0.1
         PORT: 9066
   LOCAL_PORT: 50317
       SCHEMA: NULL
      CHARSET: latin1:8
       NET_IN: 257
      NET_OUT: 6343
ALIVE_TIME(S): 1264
  RECV_BUFFER: 4096
   SEND_QUEUE: 0
      txlevel:
   autocommit:
1 row in set (0.00 sec)

从下面拿到到的连天 ID 属性,能够手动杀掉有个别连接。

kill @@connection id,id,id

来得后端连接情状:

mysql> show @@backendG
...
...
...
*************************** 16. row ***************************
 processor: Processor0
        id: 4
   mysqlId: 8
      host: 192.168.0.122
      port: 3306
    l_port: 45583
    net_in: 7018
   net_out: 1646
      life: 6287
    closed: false
  borrowed: false
SEND_QUEUE: 0
    schema: db1
   charset: utf8:33
   txlevel: 3
autocommit: true
16 rows in set (0.00 sec)

共计有14个后端连接,这里截取最终二个。

显示数据源:

mysql> show @@datasource;
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST          | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.0.120 | 3306 | W    |      0 |    8 | 1000 |     231 |         0 |          2 |
| dn1      | hostS1 | mysql | 192.168.0.122 | 3306 | R    |      0 |    8 | 1000 |     211 |         8 |          0 |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)

能够见见中央音讯。

2.2 Mycat协理的数据库

 必嬴56net 4

 

1.下载MYCAT安装包###

在GitHub 的 MyCATApache项目下,我们找到
https://github.com/MyCATApache/Mycat-download/tree/master/1.5-RELEASE
选取 Mycat-server-1.5.1-RELEASE-20160929233042-linux.tar.gz
linux 版本进行 下载

现阶段1.6版本有的机能还在支付中,1.5版本相比牢固,提出下载1.5用来生产条件使用

MyCat节点IP:192.168.1.203      主机名:edu-mycat-01  主机配置:4核CPU、4G内部存款和储蓄器

2. 执行SQL语句

mysql -h127.0.0.1 -utest -ptest -P8066

创建 tb1 表:

mysql> show databases;
+----------+
| DATABASE |
+----------+
| testdb   |
+----------+
1 row in set (0.00 sec)

mysql> use testdb;create table tb1 (id INT, name VARCHAR(20));
Database changed
Query OK, 0 rows affected (0.25 sec)

mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| tb1           |
+---------------+
1 row in set (0.01 sec)

安顿两条数据:

mysql> insert into tb1 values (1, 'guli'), (2, 'xie');
Query OK, 2 rows affected (0.03 sec)
Records: 2  Duplicates: 0  Warnings: 0

查看一下插入结果:

mysql> select * from tb1;
+------+------+
| id   | name |
+------+------+
|    1 | guli |
|    2 | xie  |
+------+------+
2 rows in set (0.00 sec)

没问题。

再分别到中央节点看数量插入未有:

master:

mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| tb1           |
+---------------+
1 row in set (0.00 sec)

mysql> select * from tb1;
+------+------+
| id   | name |
+------+------+
|    1 | guli |
|    2 | xie  |
+------+------+
2 rows in set (0.00 sec)

slave:

mysql> use db1;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| tb1           |
+---------------+
1 row in set (0.00 sec)

mysql> select * from tb1;
+------+------+
| id   | name |
+------+------+
|    1 | guli |
|    2 | xie  |
+------+------+
2 rows in set (0.00 sec)

好,能够看见 OK 了。

查看刚才实施过的 sql 语句:

mysql> show @@sql;
+------+------+---------------+--------------+-------------------+
| ID   | USER | START_TIME    | EXECUTE_TIME | SQL               |
+------+------+---------------+--------------+-------------------+
|    1 | test | 1485212346188 |            1 | select * from tb1 |
|    2 | test | 1485212040101 |            1 | select * from tb1 |
|    3 | test | 1485211834831 |            1 | select * from tb1 |
|    4 | test | 1485211803688 |            1 | select * from tb1 |
|    5 | test | 1485209518691 |            2 | select * from tb1 |
+------+------+---------------+--------------+-------------------+
5 rows in set (0.00 sec)

欣逢的标题:

似乎无法统计 insert 语句,不知为什么。

查看总括数据:

mysql> show @@sql.sum;
+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+
| ID   | USER | R    | W    | R%   | MAX  | NET_IN | NET_OUT | TIME_COUNT   | TTL_COUNT    | LAST_TIME     |
+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+
|    1 | test |    5 |    0 | 1.00 | 1    |     85 |     709 | [5, 0, 0, 0] | [5, 0, 0, 0] | 1485212346189 |
+------+------+------+------+------+------+--------+---------+--------------+--------------+---------------+
1 row in set (0.00 sec)

端口号: 该命令职业在 9066 端口,用来记录客户通过本地 8066 端口向 Mycat-Server 发送的 SQL 要求试行
消息。消息富含有 ID 值,实施 SQL 语句的客户名称,实践的 SQL 语句,命令实行的开首时间,命令施行消耗费时间间

翻开慢查询语句:

安装慢查询阈值为0:reload @@sqlslow=0;

mysql> reload @@sqlslow=0;
Query OK, 1 row affected (0.00 sec)
Reset show  @@sql.slow time success

在8066端口施行查询:select * from tb1;

mysql> select * from tb1;
+------+-------+
| id   | name  |
+------+-------+
|    1 | guli  |
|    2 | xie   |
|    3 | xu    |
|    4 | he    |
|    5 | huang |
|    6 | ma    |
|    7 | liu   |
|    8 | zeng  |
+------+-------+
8 rows in set (0.00 sec)

在 9066 端口实行 show @@sql.slow 查看抓取的慢查询SQL语句:

mysql> show @@sql.slow;
+------+------------+---------------+--------------+-------------------+
| USER | DATASOURCE | START_TIME    | EXECUTE_TIME | SQL               |
+------+------------+---------------+--------------+-------------------+
| test | NULL       | 1485213017329 |            1 | select * from tb1 |
+------+------------+---------------+--------------+-------------------+
1 row in set (0.00 sec)

2.3 Mycat的分片计策

 必嬴56net 5

 

 

 

2. 解压运转MYCAT安装包###

下载文件是二个tar的linux压缩包,用解压命令
tar -zxvf Mycat-server-1.5.1-RELEASE-20160929233042-linux.tar.gz

5.3-01.png

启航命令
./mycat start|restart|stop|console 常用几项内容

5.3-02.png

日记文件
logs/wrapper.log mycat服务器日志
logs/mycat.log 数据库操作日志,分析数据库操作路由运用。

开发银行MyCat最要害的多少个布局文件:
conf/server.xml 服务器客商、设想Sechma、端口等配备音讯。
conf/sechma.xml 物理数据库映射。

选取MyCAT来讲的话,最重大的正是改良那八个文件,接下去大家兑现MYCAT下的读写分离。

MySQL版本:mysql-5.6.26.tar.gz

3,假若要证美赞臣下读写分离已经打响了,应该怎么验证呢?

运用mysql客商端连接9066管制端口,实践 show @@datasource 能够调查到 READ_LOAD,WRITE_LOAD 几个计算参数的变通:

这里呈现 hostM1 为写节点,hostS1 为读节点:

hostM1 的 WRITE_LOAD = 2
hostS1 的 READ_LOAD = 12

mysql> show @@datasource;
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST          | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.0.120 | 3306 | W    |      0 |    8 | 1000 |     287 |         0 |          2 |
| dn1      | hostS1 | mysql | 192.168.0.122 | 3306 | R    |      0 |    8 | 1000 |     271 |        12 |          0 |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)

采纳mysql顾客端连接8066管制端口,推行查询,插入语句,同不时间使用mysql顾客端连接 9066 端口观看一下读写总括参数的变动:

8066:实践查询 select * from tb1;

mysql> select * from tb1;
+------+------+
| id   | name |
+------+------+
|    1 | guli |
|    2 | xie  |
|    3 | xu   |
|    4 | he   |
+------+------+
4 rows in set (0.00 sec)

9066:

mysql> show @@datasource;
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST          | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.0.120 | 3306 | W    |      0 |    8 | 1000 |     308 |         0 |          2 |
| dn1      | hostS1 | mysql | 192.168.0.122 | 3306 | R    |      0 |    8 | 1000 |     293 |        13 |          0 |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)

读节点的读计数加1,

hostM1 的 WRITE_LOAD = 2
hostS1 的 READ_LOAD = 13

8066:施行插入操作 insert into tb1 values (5,'huang');

mysql> insert into tb1 values (5,'huang');
Query OK, 1 row affected (0.02 sec)

9066:

mysql> show @@datasource;
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| DATANODE | NAME   | TYPE  | HOST          | PORT | W/R  | ACTIVE | IDLE | SIZE | EXECUTE | READ_LOAD | WRITE_LOAD |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
| dn1      | hostM1 | mysql | 192.168.0.120 | 3306 | W    |      0 |    8 | 1000 |     332 |         0 |          4 |
| dn1      | hostS1 | mysql | 192.168.0.122 | 3306 | R    |      0 |    8 | 1000 |     315 |        13 |          0 |
+----------+--------+-------+---------------+------+------+--------+------+------+---------+-----------+------------+
2 rows in set (0.00 sec)

写节点的读计数加2

hostM1 的 WRITE_LOAD = 2
hostS1 的 READ_LOAD = 13

总来讲之读写分离是马到功成的。可以看来数据也幸不辱命写入数据库:

mysql> select * from tb1;
+------+-------+
| id   | name  |
+------+-------+
|    1 | guli  |
|    2 | xie   |
|    3 | xu    |
|    4 | he    |
|    5 | huang |
+------+-------+
5 rows in set (0.00 sec)

到此基本演示了 mycat 的中坚读写抽离功效,配置的前提是现本来就有二个安插好的 mysql 主从复制架构,mycat 职业于 mysql 主从架构的前端,担任 SQL 语句的分发。

mycat 另一个关键作用是数额分片,这里未有事必躬亲。一时就写到这里。

2.4 概念表达

5.4 MYCAT下达成读写分离##


第风流倜傥参谋上风度翩翩节MYSQL配置主从复制,配置好主从数据库之间的数额复制功效。

主节点IP:192.168.1.205     主机名:edu-mysql-01   主机配置:4核CPU、4G内存

2.4.1 逻辑库(schema) :

后边大器晚成节讲了数据库中间件,平常对实际行使来讲,并无需知道中间件的存在,业务开采人士只必要通晓数据库的定义,所以数据库中间件可以被视作是一个或多少个数据库集群构成的逻辑库。

1.登入主服务器的mysql,查询master的状态###

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000010 | 106 | db1,db2,db3 | mysql |
+------------------+----------+--------------+------------------+
Master 重启后会匡正mysql-bin(序号加1)

从节点IP:192.168.1.206     主机名:edu-mysql-02   主机配置:4核CPU、4G内部存款和储蓄器

2.4.2 逻辑表(table):

既然如此有逻辑库,那么就能有逻辑表,布满式数据库中,对运用来讲,读写多少的表正是逻辑表。逻辑表,能够是数量切分后,分布在几个或五个分片库中,也足以不做多少切分,不分片,唯有多个表构成。

分片表:是指那多少个原本的超大数指标表,要求切分到四个数据库的表,这样,每一种分片都有点多少,全部分片构成了意气风发体化的数目。 简单的说就是索要进行分片的表。

非分片表:一个数据库中并非全数的表都不小,某个表是能够不用进行切分的,非分片是相对分片表来说的,正是那么些没有必要开展数据切分的表。

2.查看Slave机有未有布置成功:###

mysql> show slave statusG
以下七个参数必得为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

2.4.3 分片节点(dataNode)

数据切分后,两个大表被分到分裂的分片数据库方面,每一个表分片所在的数据库便是分片节点(dataNode)。

3.MyCAT的配置###

不采用Mycat托管的 MySQL主从服务器

schema.xml
<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="hostM" url="172.19.4.239:3306" user="root" password="123456"></writeHost>
</dataHost>

援助MySQL主从复制状态绑定的读写抽离机制,让读特别安全可相信,配置如下
<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="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
<heartbeat>show slave status</heartbeat>
<writeHost host="hostM" url="172.19.4.239:3306" user="root" password="123456">
<readHost host="hostS" url="172.19.4.240:3306" user="root" password="123456" />
</writeHost>
</dataHost>

设置 balance="1"与writeType="0"
Balance参数设置:

  1. balance=“0”, 全体读操作都发送到当前可用的writeHost上。
  2. balance=“1”,全数读操作都随便的发送到readHost。
  3. balance=“2”,全部读操作都随便的在writeHost、readhost上散发

WriteType参数设置:

  1. writeType=“0”, 全部写操作都发送到可用的writeHost上。
  2. writeType=“1”,全部写操作都随便的发送到readHost。
  3. writeType=“2”,全部写操作都随便的在writeHost、readhost分上发。

那样布置了之后,就曾经落到实处了读写剥离的职能, 还可以对数据库进行负荷均衡
开发银行mycat , 用应用或许Navicat等工具 连接mycat ,端口是 8066
insert , select 进行测量检验。

二、注重课程

2.4.4 节点主机(dataHost)

数量切分后,每一个分片节点(dataNode)不自然都会占有风华正茂台机器,同一机器上边能够有七个分片数据库,那样三个或多少个分片节点(dataNode)所在的机器正是节点主机(dataHost),为了规避单节点主机并发数约束,尽量将读写压力高的分片节点(dataNode)均衡的位于区别的节点主机(dataHost)。

5.5 切!切!切!MyCAT中分表分库计谋##


上边只是完成了哪些进行读写分离,基于数据库的核心同步复制的法规, 大家在前头的科目里曾经知晓,
大旨同步复制的多少是 ,有限协助从数据库和主库的多少生龙活虎致,也便是说数据是多复制了风流倜傥份出来,

而MYCAT 只所以能支持上百亿的数据量,在于她的另七个功力:分表分库战术
分表分水库蓄水容量易的话,便是MYCAT 上边连接的数据库节点,打例如说有dn1,dn2,dn3, 他们每种库中的数据
是各不雷同的。
把MYCAT充任叁个虚构数据库来看,travelrecord 是MYCAT上面建的一张表, 应用调用MYCAT
库能够调用到整张表的多少, 可是只要查询某一个节点dn1 , 则只可以查询到部分数码(平常是56%)的数据
dn1, dn2 , dn3 各自存款和储蓄了黄金时代有个别的多少, 然而足以经过MYCAT 来询问到整张表的多寡,
这般加强了各类数据库的数码存款和储蓄管理工科夫, 那正是MYCAT的高明之处,约等于为啥她能够管理上百亿条数据的奥密。

此地列出一个大约的分表分库的布置:
schema.xml
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
在schema中 我们供给配置mycat 中的设想表table ,以至他的rule ,分表法规
auto-sharding-long 的情趣是 事先已经定义好各种dn的 范围,依照范围划分,那么些准绳在rule.xml中实行配置.

datanode 的配置:
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost2" database="db2" />
<dataNode name="dn3" dataHost="localhost3" 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>
    <!-- can have multi write hosts -->
    <writeHost host="hostM1" url="172.19.4.3:3306" user="root" password="123456"></writeHost>
</dataHost>

<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM2" url="172.19.4.201:3306" user="root" password="123456"></writeHost>
</dataHost>

<dataHost name="localhost3" maxCon="1000" minCon="10" balance="0"
          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- can have multi write hosts -->
    <writeHost host="hostM2" url="172.19.4.86:3306" user="root" password="123456"></writeHost>
</dataHost>

那样数据就是半自动切分到那3个不等的datanode中了, select 收取来也是完全的数目。

分表分库还应该有有些门槛便是,你的多少是纵平昔切,照旧横平素切,
地点讲的非凡是 横一向切:就是把一张表的数码 切到分化的 数据库中。

纵向切更简短,就是以表来分库, 不一样的表 放到分化的库中, 表中的数据在有个别库中是完整的。

《高可用架构篇--第13节--MySQL源码编写翻译安装(CentOS-6.6+MySQL-5.6)》

2.4.5 分片准绳(rule)

前方讲了数量切分,一个大表被分成若干个分片表,就须要自然的准则,那样遵照某种业务法则把多少分到某些分片的平整正是分片准则,数据切分选用稳当的分片法则不行重大,将相当的大的制止后续数据管理的难度。

5.6 MyCAT的五藏六府##


学会了MYCAT来做读写分离和分表分库的利用之后,大家应有更深透MYCAT的五藏六府,理解MYCAT的运营机制,这样对线上的施用管理局地
应急事故,以至缓慢解决部分主题素材提供思路,特其他有扶植,有能力的童鞋还是能参加到MYCAT的存在延续开垦中来。

5.6-01.png

MYCAT 的后端通讯选取了NIO非阻塞 和AIO 异步通讯方式, 使得通讯效能更加高
SQL分析这一块用到了Ali的Druid进行拆解剖判
共谋这一块,对于MYSQL数据库选拔原生的二进制左券,还支持驱动情势的三番五次
同一时候MYCAT还扩张order by , group by ,limit 等聚焦成效的支撑

有野趣的童鞋能够对 MYCAT线程池、网络通讯、路由分发、事务处理、缓存等模块做输入的就学和深入分析。

《高可用架构篇--第14节--MySQL主从复制的安顿(CentOS-6.6+MySQL-5.6)》

Mycat的下载及安装

5.7 课后功课##


  1. 用MYCAT 达成上豆蔻梢头节中的 读写分离案例
  2. 用MYCAT 完结八个分表分库的行使

更加的多课程关心大伙儿号【小张网校】
大伙儿号里有微信群参与沟通,有大拿亲自辅导实战!

barcode.jpg

只顾:上后生可畏节课中讲到的MySQL主从复制配置,在用MyCat做主从读写抽离或其结合实际项目场景应用中,主从复制配置还索要按实际须求意况打开调治。

3.1 设置情况

1、jdk:必要jdk必需是1.7及以上版本

2、Mysql:推荐mysql是5.5之上版本

3、Mycat:

Mycat的官网:

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

下载地址:

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

 

(调治后的着力数据库my.cnf配置文件,随摄像教程压缩包提供)

3.2 设置步骤

Mycat有windows、linux两种版本。本学科为linux安装步骤,windows基本相仿。

第一步:下载Mycat-server-xxxx-linux.tar.gz

其次步:将减小包解压缩。提出将mycat放到/usr/local/mycat目录下。

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

./mycat start

停止:

./mycat stop

mycat 援助的命令{ console | start | stop | restart | status | dump }

Mycat的暗中认可端口号为:8066

 

Mycat的分片

三、MyCat介绍  ( MyCat官网: )

4.1 需求

把商品表分片存款和储蓄到多个数据节点上。

 

MyCat的读写分离是借助后端MySQL集群的主干同步来兑现的,而MyCat提供语句的散发功效。MyCat1.4上马扶持MySQL主从复制状态绑定的读写分离机制,让读特别安全可相信。

4.2 安装情况分析

两台mysql数据库服务器:

Host1:192.168.25.134

Host2:192.168.25.166

 

host1环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db1、db3

 

 

mysql节点2环境

操作系统版本 : centos6.4

数据库版本 : mysql-5.6

mycat版本 :1.4 release

数据库名 : db2

 

MyCat安装到节点1上(要求安装jdk)

 

                                              
必嬴56net 6  

4.3 配置schema.xml

四、MyCat的安装

4.3.1 Schema.xml介绍

Schema.xml作为MyCat中关键的布局文件之风姿洒脱,管理着MyCat的逻辑库、表、分片法规、DataNode以至DataSource。弄懂那么些安插,是不利选择MyCat的前提。这里就后生可畏难得一见对该文件进行深入分析。

 

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

Table 标签定义了MyCat中的逻辑表

dataNode 标签订义了MyCat中的数据节点,也便是大家经常说所的数目分片。

dataHost标签在mycat逻辑库中也是当作最底部的价签存在,直接定义了实际的数据库实例、读写分离配置和心跳语句。

 

注意:若是LINUX版本的MYSQL,则需要设置为Mysql大小写不敏感,否则可能会发生表找不到的问题。

在MySQL的配置文件中/etc/my.cnf [mysqld] 中增加一行

  lower_case_table_names=1

 

1、设置MyCat的主机名和IP与主机名的炫人眼目

4.3.2 Schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

        <schema name="e3mall" checkSQLschema="false" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="tb_item" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost2" 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>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.25.134:3306" user="root"
                        password="root">
                        <!-- can have multi read hosts -->

                </writeHost>
        </dataHost>
        <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
                writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="192.168.25.166:3306" user="root"
                        password="root">
                        <!-- can have multi read hosts -->

                </writeHost>
        </dataHost>
</mycat:schema>

 

4.4 配置server.xml 

 

# vi /etc/sysconfig/network

4.4.1 Server.xml介绍

server.xml大致保存了颇有mycat须要的连串布置音讯。最常用的是在这里布局客户名、密码及权限。

 

NETWORKING=yes

4.4.2 Server.xml配置

<user name="test">
    <property name="password">test</property>
    <property name="schemas">e3mall</property>
    <property name="readOnly">false</property>
</user>

 

4.5 配置rule.xml 

rule.xml里面就定义了大家对表进行拆分所涉及到的平整定义。我们能够灵活的对表使用不一样的分片算法,也许对表使用肖似的算法但实际的参数分歧。这么些文件之中首要有tableRule和function那三个标签。在切进行使进度中得以遵照要求增加tableRule

和function。

此铺排文件能够不要校勘,使用默许就能够。

HOSTNAME=edu-mycat-01

4.6 测量检验分片

# vi /etc/hosts

4.6.1 创建表

安插完毕后,重新开动mycat。使用mysql顾客端连接mycat,创建表。

-- ----------------------------
-- Table structure for tb_item
-- ----------------------------
DROP TABLE IF EXISTS `tb_item`;
CREATE TABLE `tb_item` (
  `id` bigint(20) NOT NULL COMMENT '商品id,同时也是商品编号',
  `title` varchar(100) NOT NULL COMMENT '商品标题',
  `sell_point` varchar(500) DEFAULT NULL COMMENT '商品卖点',
  `price` bigint(20) NOT NULL COMMENT '商品价格,单位为:分',
  `num` int(10) NOT NULL COMMENT '库存数量',
  `barcode` varchar(30) DEFAULT NULL COMMENT '商品条形码',
  `image` varchar(500) DEFAULT NULL COMMENT '商品图片',
  `cid` bigint(10) NOT NULL COMMENT '所属类目,叶子类目',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '商品状态,1-正常,2-下架,3-删除',
  `created` datetime NOT NULL COMMENT '创建时间',
  `updated` datetime NOT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `cid` (`cid`),
  KEY `status` (`status`),
  KEY `updated` (`updated`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';

 

4.6.2 布署数据 

 

将此文件中的数据插入到数据库:

 必嬴56net 7

 

 

127.0.0.1 edu-mycat-01

4.6.3 分片测量检验

鉴于配备的分片准绳为“auto-sharding-long”,所以mycat会根据此准则自动分片。

每种datanode中保留一定数量的数量。依据id实行分片

经测试id范围为:

Datanode1:1~5000000

Datanode2:5000000~10000000

Datanode3:10000001~15000000

 

当15000000上述的id插入时报错:

[Err] 1064 - can't find any valid datanode :TB_ITEM -> ID -> 15000001

那时候亟待增多节点了。

 

192.168.1.203 edu-mycat-01

Mycat读写抽离

数据库读写抽离对于大型系统只怕访谈量相当的高的互连网使用来讲,是非常重要的二个重要职能。对于MySQL来讲,规范的读写分离是着力情势,贰个写节点Master前边随着五个读节点,读节点的数码决计于系统的压力,日常是1-3个读节点的布局

 必嬴56net 8

 

Mycat读写抽离和自动切换机制,必要mysql的主从复制机制同盟。

 必嬴56net 9

 

192.168.1.205 edu-mysql-01

5.1 Mysql的主从复制

 

基本配置需要留意的地点

1、主DB server和从DB server数据库的本子相通

2、主DB server和从DB server数据库数据名称相符

3、主DB server开启二进制日志,主DB server和从DB server的server_id都必须要唯后生可畏

 

192.168.1.206 edu-mysql-02

5.2 Mysql主服务器配置

第一步:修改my.cnf文件:

在[mysqld]段下增多:

binlog-do-db=db1

binlog-ignore-db=mysql

#启用二进制日志

log-bin=mysql-bin

#服务器唯一ID,一般取IP最后一段

server-id=134

第二步:重启mysql服务

service mysqld restart

其三步:建构帐户并授权slave

mysql>GRANT FILE ON *.* TO 'backup'@'%' IDENTIFIED BY '123456';

mysql>GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'backup'@'%' identified by '123456';

#貌似不要root帐号,“%”表示全部客商端都可能连,只要帐号,密码正确,此处可用具体客户端IP取代,如192.168.145.226,抓牢平安。

 

刷新权限

mysql> FLUSH PRIVILEGES;

  

查阅mysql今后有啥客商

mysql>select user,host from mysql.user;

 

第四步:查询master的状态

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000001 |      120 | db1          | mysql            |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set

 

 

 

 

5.3 Mysql从服务器配置

第一步:修改my.cnf文件

[mysqld]

server-id=166

 

第二步:配置从服务器

mysql>change master to master_host='192.168.25.128',master_port=3306,master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=120

 

在乎语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为实践同步操作的数据库账户,“120”无单引号(此处的120正是show master status 中见到的position的值,这里的mysql-bin.000001就是file对应的值)。

 

第二步:运维从服务器复制功用

Mysql>start slave;

 

其三步:检查从服务器复制效能状态:

mysql> show slave status

 

……………………(省略部分)

Slave_IO_Running: Yes //此状态必须YES

Slave_SQL_Running: Yes //此状态必得YES

……………………(省略部分)

 

注:Slave_IO及Slave_SQL进程必需符合规律运营,即YES状态,不然都以大错特错的事态(如:此中贰个NO均属不当)。

 

错误处理:

如果出现此错误:

Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

因为是mysql是克隆的系统所以mysql的uuid是一样的,所以需要修改。

解决方法:

删除/var/lib/mysql/auto.cnf文件,重新启动服务。

 

 必嬴56net 10

 

如上操作进度,从服务器配置实现。

 

2、因为MyCat是用Java开荒的,因而MyCat运转供给设置JDK(准确来讲是JRE就够了),何况要求JDK1.7或以上版本

5.4 Mycat配置

Mycat 1.4 帮助MySQL主从复制状态绑定的读写分离机制,让读越发安全可信赖,配置如下:

 

<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="1"

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

<heartbeat>show slave status</heartbeat>

<writeHost host="hostM" url="192.168.25.134:3306" user="root"

    password="root">

    <readHost host="hostS" url="192.168.25.166:3306" user="root"

    password="root" />

  </writeHost>

</dataHost>

 

 

 

(1) 设置 balance="1"与writeType="0"

Balance参数设置:

  1. balance=“0”, 全体读操作都发送到当前可用的writeHost上。

2. balance=“1”,所有读操作都随便的发送到readHost。

  1. balance=“2”,全部读操作都随便的在writeHost、readhost上散发

WriteType参数设置:

  1. writeType=“0”, 全数写操作都发送到可用的writeHost上。

  2. writeType=“1”,全体写操作都随便的发送到readHost。

  3. writeType=“2”,全数写操作都随便的在writeHost、readhost分上发。

 “readHost是隶属于writeHost的,即表示它从十二分writeHost获取同步数据,因而,当它所属的writeHost宕机了,则它也不会再参加到读写分离中来,即“不工作了”,那是因为那时候,它的多寡已经“离谱”了。基于那一个思虑,近来mycat 1.3和1.4本子中,若想帮衬MySQL生龙活虎主后生可畏从的标准配置,并且在主节点宕机的景况下,从节点还能够读取数据,则需求在Mycat里安插为八个writeHost并设置banlance=1。”

(2) 设置 switchType="2" 与slaveThreshold="100"

switchType 近来有三种选用:

-1:表示不自行切换

1 :暗中同意值,自动切换

2 :基于MySQL主从同步的情状调整是还是不是切换

“Mycat心跳检查语句配置为 show slave status ,dataHost 上定义五个新天性: switchType="2" 与slaveThreshold="100",此时期表开启MySQL主从复制状态绑定的读写抽离与切换机制。Mycat心跳机制通过检验show slave status 中的 "Seconds_Behind_Master", "Slave_IO_Running", "Slave_SQL_Running" 八个字段来规定当前中央同步的图景以至Seconds_Behind_Master主从复制时延。“

 

 

# vi /etc/profile

附:Centos6.5下安装mysql

率先步:查看mysql是或不是安装。

rpm -qa|grep mysql

第二步:假使mysql的本子不是想要的本子。要求把mysql卸载。

yum remove mysql mysql-server mysql-libs mysql-common

rm -rf /var/lib/mysql

rm /etc/my.cnf

其三步:安装mysql。要求使用yum命令安装。在设置mysql从前须求安装mysql的下载源。须要从oracle的官方网址下载。

1)下载mysql的源包。

我们是centos6.4对应的rpm包为:mysql-community-release-el6-5.noarch.rpm

2)安装mysql下载源:

yum localinstall mysql-community-release-el6-5.noarch.rpm

(必嬴56net 11)此附属类小部件可保留

 必嬴56net 12

 

3)在线安装mysql:

yum install mysql-community-server

第四步:启动mysql

service mysqld start

第五步:要求给root客户安装密码。

/usr/bin/mysqladmin -u root password 'new-password'  // 为root账号设置密码

第六步:远程连接授权。

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;

留意:'myuser'、'mypassword' 要求替换到实际的客商名和密码。

 

## java env

export JAVA_HOME=/usr/local/java/jdk1.7.0_72

export JRE_HOME=$JAVA_HOME/jre

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib/rt.jar

export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

# source /etc/profile

# java -version

 

3、创制mycat顾客并安装密码

# useradd mycat

# passwd mycat

 

4、上传安装包 Mycat-server-1.4-release-二零一四1019240038-linux.tar.gz 到 MyCat服务器中的/home/mycat目录,并解压并活动到 /usr/local/mycat目录

$ tar -zxvf Mycat-server-1.4-release-20151019230038-linux.tar.gz

必嬴56net 13  

$ su root

Password:

# mv /home/mycat/mycat  /usr/local/

# cd /usr/local/mycat/

# ll

必嬴56net 14  

 

5、设置MyCat的遭遇变量

# vi /etc/profile

## mycat env

export MYCAT_HOME=/usr/local/mycat

export PATH=$PATH:$MYCAT_HOME/bin

# source /etc/profile

 

五、配置MyCat

1、在计划MyCat前,请确认MySQL的主从复制安装配备已做到并符合规律运作。MySQL主从数据的联合签名在MySQL中布署,MyCat不肩负数据同步的主题材料。

补充:

编辑:数据库 本文来源:必嬴56net:猫从哪儿来,要到什么地方去(Mycat的前

关键词: