图片 16

1.1 什么是数据库分片

简轻松单的话,正是指通过某种特定的规范,将大家寄存在同八个数据库中的数据分散贮存到八个数据库(主机卡塔 尔(英语:State of Qatar)下面,以完结疏散单台设备负载的作用。

数码的切分(Sharding卡塔尔国依照其切分法则的品种,能够分为二种切分情势。

(1卡塔 尔(阿拉伯语:قطر‎意气风发种是安分守纪差别的表(大概Schema)来切分到差别的数据库(主机卡塔尔国之上,这种切能够称为数据的垂直(纵向卡塔 尔(英语:State of Qatar)切分

图片 1

 

 

 

(2卡塔 尔(阿拉伯语:قطر‎别的风流洒脱种则是依赖表中的多寡的逻辑关系,将同八个表中的数据遵照某种条件拆分到多台数据库(主机卡塔 尔(英语:State of Qatar)上边,这种切分称之为数据的品位(横向卡塔尔国切分。

 图片 2

 

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用以生产情形使用

mysql> select * from edu_user;

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了。

附: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

(图片 3)此附属类小构件可保存

 图片 4

 

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’ 要求替换来实际的客户名和密码。

 

5.5 切!切!切!MyCAT中分表分库战略##\


地方只是完毕了什么样进展读写抽离,基于数据库的为主同步复制的规律,
大家在前面包车型客车教程里早已领会,
基本同步复制的多寡是
,有限支撑从数据库和主库的数据后生可畏致,也正是说数据是多复制了风姿罗曼蒂克份出来,

而MYCAT 只所以能支撑上百亿的数据量,在于她的另二个作用:分表分库战略
分表分库简单的话,正是MYCAT
上边连接的数据库节点,打比如说有dn1,dn2,dn3, 他们每一个库中的数据
是各不相像的。
把MYCAT当作一个虚构数据库来看,travelrecord 是MYCAT上边建的一张表,
应用调用MYCAT
库可以调用到整张表的数量, 不过只要查询某二个节点dn1 ,
则只可以查询到部分数码(平常是60%)的数码
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
抽出来也是总体的多少。

分表分库还或然有某些妙方便是,你的数目是纵平昔切,仍然横平素切,
地点讲的不行是 横一直切:正是把一张表的多寡 切到不一样的 数据库中。

纵向切更简短,就是以表来分库, 差别的表 放到区别的库中,
表中的数据在有个别库中是总体的。

 

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.2 Mycat扶助的数据库

 图片 5

 

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

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

                
status就能够时有爆发错误,因为原先的主并未有展开slave,不提议间接利用switch操作,而是在DB中做为主对调。 –>

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 @@connection\G
*************************** 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 @@backend\G
...
...
...
*************************** 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)

一同有十七个后端连接,这里截取最终二个。

展现数据源:

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)

能够看见大旨新闻。

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

 

5.3 十分钟安装使用##\


MYCAT即便强盛,可是她的装置却极度回顾, 上面大家进去我们十分钟安装教程:

图片 6
 

Mycat 管理命令与监察和控制

Mycat的分片

【遍及式架构初探】

MyCat心跳检查语句配置为 show slave status ,dataHost
上定义三个新脾性:switchType=”2″ 与
slaveThreshold=”100″,那个时候期表开启MySQL主从复制状态绑定的读写分离与切换机制,MyCat心跳机制通过检验show slave status 中的

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 另一个注重职能是数码分片,这里未有以身作则。临时就写到这里。

1.2 什么样落成数据库分片

当数据库分片后,数据由一个数据库分散到八个数据库中。那时系统要查询时须要切换差异的数据库进行询问,那么系统怎么样晓得要查询的数目在哪个数据库中?当增加一条记下时要向哪些数据库中插入呢?那么些主题素材管理起来都以相当的麻烦。

这种景色下得以采用一个数据库中间件mycat来消除相关的主题材料。接下来精通一下什么是mycat。

5.2 MyCAT猫的现世##\


MYCAT发展到后天早已不止是MYSQL的代理了,它还支持SQLSECRUISERVE福睿斯/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仍然很值得大家学习和研讨的。

      <!– 注意:schema中的每八个dataHost中的host属性值必需唯风流倜傥,不然会并发主从在全部dataHost中全体切换的现象 –>

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,第一个挂了切到还健在的第一个writeHost,重新开动后已切换后的为准,切换记录在配备文件中:dnindex.properties
    .

  2. balance=”3″,全数读诉求随机的分发到 wiriterHost 对应的 readhost
    执行,writerHost 不担当读压力,注意 balance=3 只在 1.4
    及其以后版本有,1.3 未有。

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卡塔 尔(阿拉伯语:قطر‎

      <!– <property
name=”processorBufferChunk”>40960</property> –>

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 上。

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 布署数据 

 

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

 图片 7

 

 

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.公安项目,贰10个表,30多亿条数据,接受符合的职业使用mycat

从这几个项目中大家能够看来,mycat擅长对上亿条单表数据量的管理,并提供能够的实时查询服务。
而作者辈了然,MYSQL的库中很难管理上亿条数据的询问工作,MYCAT升高了MYSQL数据库的拍卖才干,
从官方的解说来看,MYCAT相符处理千亿条以下的数码,千亿条以上的数额更切合HADOOP那个系统来拍卖。

说了半天,什么是MYCAT呢?
MYCAT正是多个诬捏的MYSQL SE中华VVE昂科雷, 这么说恐怕不太明白,
但是对于利用来讲,他便是三个MYSQL SECRUISERVE哈弗,
行使就好像连接普通的MYSQL数据库相像的
去老是他,SQL查询、操作等等风流罗曼蒂克律。

而MYCAT把数据库复杂的架构,以至背后复杂的分表分库的逻辑整体透明化了,MYCAT中间件连接四个MYSQL数据库,
多个数据库之间还足以做为主同步,而那整个的一切,对利用来讲,独有二个数据库,那正是MYCAT。

      <!– 定义MyCat的多少节点 –>

2.1 什么是Mycat?

 

Mycat 背后是Ali业已开源的有名产物——Cobar。Cobar 的中坚功效和优势是 MySQL 数据库分片,此付加物早已传出,据他们说最先的发起者对
Mysql 很精晓,后来从Ali跳槽了,Ali随之开源的
Cobar,并保证到 2011 年年终,然后,就从不然后了。

Cobar 的思路和贯彻路径的确不错。基于
Java 开辟的,达成了 MySQL 公开的二进制传输左券,奇妙地将和睦伪装成多少个MySQL Server,方今市情上绝大非常多 MySQL 客商端工具和选取都能同盟。比本人达成贰个新的数据库契约要明智的多,因为生态情状在什么地方摆着。

 

Mycat 是依照 cobar 演变而来,对 cobar 的代码实行了彻底的重构,使用 NIO 重构了网络模块,並且优化了 Buffer 内核,巩固了汇集,Join 等主导脾性,同时协作绝大超越四分之二据库成为通用的数据库中间件。

粗略的说,MyCAT正是:

·三个新型的数据库中间件成品扶持mysql集群,也许mariadb cluster,提供高可用性数据分片集群。你能够像使用mysql相仿采纳mycat。对于开采人士来讲根本以为不到mycat的存在。

 图片 8

5.4 MYCAT下促成读写分离##\


第生机勃勃参考上焕发青大年MYSQL配置主从复制,配置好主从数据库之间的数目复制成效。

      <!– writeType=”0″,全部写操作都发送到可用的writeHost上 –>

5.1 Mysql的主从复制

 

主干配置必要注意的地点

1、主DB server和从DB server数据库的版本同样

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

3、主DB server开启二进制日志,主DB
server和从DB server的server_id都必须要唯大器晚成

 

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

mysql> show slave status\G
以下八个参数必得为YES:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

动用安装好的mysql顾客端登入MyCat

2.4.4 节点主机(dataHost)

多少切分后,各样分片节点(dataNode卡塔 尔(阿拉伯语:قطر‎不必然都会侵夺风华正茂台机器,同一机器上边能够有多少个分片数据库,那样一个或多少个分片节点(dataNode卡塔 尔(英语:State of Qatar)所在的机器便是节点主机(dataHost卡塔 尔(阿拉伯语:قطر‎,为了逃避单节点主机并发数节制,尽量将读写压力高的分片节点(dataNode卡塔尔国均衡的放在差别的节点主机(dataHost卡塔 尔(阿拉伯语:قطر‎。

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 实行测量检验。

图片 9
 

4.1 需求

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

 

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线程池、网络通信、路由分发、事务管理、缓存等模块做输入的读书和解析。

           <!–<property
name=”frontSocketNoDelay”>1</property>–>

4.6 测量试验分片

5.7 课后作业##\


  1. 用MYCAT 完结上黄金年代节中的 读写分离案例
  2. 用MYCAT 落成多少个分表分库的施用

越来越多课程关怀大伙儿号【小张网校】
大众号里有Wechat群参与交换,有大腕亲自指点实战!

barcode.jpg

接下去陈设课程:

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 

 

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下的读写抽离。

           –>

2.4.5 分片准则(rule)

前方讲了数码切分,多少个大表被分成若干个分片表,就须要自然的平整,那样依据某种业务法则把多少分到某些分片的规行矩步正是分片法则,数据切分选取合适的分片准则不行重大,将十分大的制止后续数据管理的难度。

图片 10
 

2.3 Mycat的分片战术

 图片 11

 

 

 

<?xml version=”1.0″?>

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。

此布局文件可以不要改良,使用暗中认可就能够。

[mycat@edu-mycat-01 logs]$ tail -f mycat.log

Mycat介绍

      <!– 定义MyCat的逻辑库,逻辑库的定义与MySQL中的 database 概念同样 –>

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

 

一、环境

2.4.2 逻辑表(table):

既是有逻辑库,那么就能有逻辑表,布满式数据库中,对采用来说,读写多少的表正是逻辑表。逻辑表,能够是数据切分后,布满在多个或八个分片库中,也得以不做多少切分,不分片,唯有二个表构成。

分片表:是指那么些原本的不小数据的表,供给切分到四个数据库的表,那样,各类分片都有后生可畏对数量,全部分片构成了完全的数据。
一句话来讲就是需求打开分片的表。

非分片表:一个数据库中并非有所的表都超级大,有些表是能够不用举办切分的,非分片是相持分片表来说的,便是那几个无需举办多少切分的表。

2、配置MyCat的schema.xml

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

“Seconds_Behind_Master”, “Slave_IO_Running”,
“Slave_SQL_Running” 两个字段来规定当前主导同步的景观以致Seconds_Behind_Master主从复制时延,当Seconds_Behind_Master
大于slaveThreshold时,读写分离筛选器会过滤掉此Slave机器,防止读到相当久在此之前的旧数据,而当主节点宕机后,切换逻辑会检查Slave上的Seconds_Behind_Master是不是为0,为0时则代表主从同步,可以悠闲自在切换,不然不会切换。

4.4.1 Server.xml介绍

server.xml大概保存了富有mycat须要的连串布局音讯。最常用的是在那布局客商名、密码及权限。

 

重启防火墙:

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文件,重新启动服务。

 

 图片 12

 

上述操作进度,从服务器配置达成。

 

                  <property
name=”mutiNodePatchSize”>100</property> 亿级数量排序批量

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

 

 

 

综上,基于MyCat的读写分离集群配置成功。 

2.4 概念表达

图片 13
 

Mycat的下载及安装

## MyCat

2.4.3 分片节点(dataNode)

数量切分后,二个大表被分到不一致的分片数据库方面,每一种表分片所在的数据库便是分片节点(dataNode卡塔 尔(阿拉伯语:قطر‎。

           <writeHost host=”hostS2″ url=”192.168.1.206:3306″ user=”root” password=”www.roncoo.com” />

4.3 配置schema.xml

      <dataNode name=”pay_dn2″ dataHost=”dtHost2″ database=”edu_simple_pay” />

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主从复制时延。“

 

 

 

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卡塔尔国

 

      <property name=”processors”>1</property>

Mycat读写分离

数据库读写分离对于大型系统只怕访谈量异常高的网络应用来说,是必不可缺的一位命关天意义。对于MySQL来讲,规范的读写分离是中央形式,多个写节点Master后边随着多个读节点,读节点的多少决意于系统的下压力,常常是1-3个读节点的配置

 图片 14

 

Mycat读写抽离和机动切换机制,需求mysql的主从复制机制合营。

 图片 15

 

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

海量数据的蕴藏难题

现行反革命搭飞机网络的向上,数据的量级也是撑指数的滋长,从GB到TB到PB。对数码的各样操作也是更加的辛劳,古板的关系性数据库已经江郎才尽满意快捷查询与插入数据的必要。那时候NoSQL的出现一时缓慢解决了那后生可畏风险。它通过降落数据的安全性,收缩对作业的支撑,减弱对复杂查询的扶助,来收获品质上的进级换代。

不过,在有个别场面NoSQL一些低头是力所不比满意使用处境的,就例如有些使用情况是一定要有作业与四平目标的。这时NoSQL确定是力不胜任满意的,所以照旧供给利用关系性数据库。假若应用关系型数据库消逝海量存款和储蓄的难点吗?当时就须要做数据库集群,为了加强查询品质将三个数据库的数目分散到不一样的数据库中存款和储蓄。

                 <property name=”serverPort”>8066</property>
<property name=”managerPort”>9066</property>

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

那时候亟需增添节点了。

 

<property name=”processors”>32</property>

           <!–默认是65535 64K 用于sql深入分析时最大文本长度 –>

 

# cd /usr/local/mycat/

schema.xml是MyCat最要紧的配置文件之大器晚成,用于安装MyCat的逻辑库、表、数据节点、dataHost等剧情,

(1)
MySQL主从复制配置中,假使提到到函数或存款和储蓄进程的一齐复制,需要在/etc/my.cnf中的[mysqld]段中扩张安排log_bin_trust_function_creators=true 或在客户端中设置 set
global log_bin_trust_function_creators = 1;

 

往往施行 select * from
edu_user 语句,MyCat打字与印刷出来的日志音信呈现读操作诉求都以路由到Slave节点(192.168.1.206卡塔 尔(阿拉伯语:قطر‎。

server.xml 主要用于安装系统变量、管理客商、设置客户权限等。

192.168.1.203 edu-mycat-01

 

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

       –>

4、防火墙中展开8066和9066端口

192.168.1.205 edu-mysql-01

几度实践以上插入语句,发掘新加多少都以从 Master节点(192.168.1.205卡塔尔插进去的,並且Slave节点通过Binlog同步了Master节点中的数据。

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

 

增加:

施行上边的新扩展插入语句后,这时候对应的MyCat日志音讯如下:

      <user name=”user2″>

[mycat@edu-mycat-01 conf]$ cd /usr/local/mycat/conf/

# java -version

 

           <!–<property
name=”maxStringLiteralLength”>65535</property>–>

           <!– can have multi write hosts –>

(1)     调控台启动,这种运营方式在支配台关闭后,MyCat服务也将关门,符合调节和测量试验使用:

[mycat@edu-mycat-01 conf]$ vi /usr/local/mycat/conf/log4j.xml

图片 16
 

mysql> use rc_schema2;

      </user>

      <dataHost name=”dtHost2″ maxCon=”500″ minCon=”20″ balance=”1″

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注