DBA04-1 搭建mycat 分片服务器

数据分片
概念: 按特定方式拆分,分散存放到多个数据库服务器上,达到负载效果
垂直分割:单个表切换成多个表,按业务类别分散到不同数据库.
水平分割:将表里的多条记录切分到不同数据库.

搭建数据分片服务器 MyCAT

基于JAVA的分布式
适合大量写入数据的存储需求
分片 高可用集群 读写分离 都可以使用MYCAT
支持MYSQL Oracle Sqlserver Mongodb

分片规则:
枚举法 固定分片 范围约定 求模法 日期列分区法 通配取模 ASCII码求模通配
编程指定 字符串拆分hash 一致性hash
Mycat软件介绍:
DBA04-1 搭建mycat 分片服务器_第1张图片
DBA04-1 搭建mycat 分片服务器_第2张图片
工作过程图一
DBA04-1 搭建mycat 分片服务器_第3张图片
工作过程图二
DBA04-1 搭建mycat 分片服务器_第4张图片

一、配置mycat环境

拓扑结构、

DBA04-1 搭建mycat 分片服务器_第5张图片
IP规划
DBA04-1 搭建mycat 分片服务器_第6张图片

二、开始搭建mycat分片服务器(56操作)

步骤一:公共配置
1)关闭防火墙和selinux,配置yum源(系统源),这里不再操作
2)把53,54,55还原成独立数据库服务器,56主机下载mycat 软件包
需要的软件包:Mycat-server-1.6 这个软包需要三台数据库服务器

    56]#  tar -zxvf Mycat-server-1.6-linux.tar.gz
    56]#  mv mycat/ /usr/local
    56 ]# cd /usr/local/mycat/
    56 mycat]# ls
    bin  catlet  conf  lib  logs  version.txt

配置文件
DBA04-1 搭建mycat 分片服务器_第7张图片
修改配置文件图一
DBA04-1 搭建mycat 分片服务器_第8张图片
3)在53(主机)54(主机)和55(主机)上面创建db3、db2、db1库和授权一个用户。

53]# mysql -u root [email protected]
mysql> create database db3;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on * . * to roota@"%" identified by "[email protected]";
52]# mysql -u root [email protected]
mysql> create database db2;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on * . * to roota@"%" identified by "[email protected]";
51]# mysql -u root [email protected]
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> grant all on * . * to roota@"%" identified by "[email protected]";

4)修改数据库的配置文件(53、54、55)
注意:1代表不区分表名的大小写,0为区分大小写
主机c1上面:

53]# vim /etc/my.cnf
[mysqld]
lower_case_table_names=1			//表名忽视大小写
53]# systemctl restart mysqld
54]# vim /etc/my.cnf
[mysqld]
lower_case_table_names=1			//表名忽视大小写
54]# systemctl restart mysqld
55]# vim /etc/my.cnf
[mysqld]
lower_case_table_names=1			//表名忽视大小写
55]# systemctl restart mysqld

5)在56主机上面安装JDK和mycat

56]# rpm -qa | grep -i jdk //安装自带的即可
java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64
java-1.8.0-openjdk-headless-1.8.0.131-11.b12.el7.x86_64
copy-jdk-configs-2.2-3.el7.noarch
56]# yum -y install java-1.8.0-openjdk
56]# cd mysql/
56mysql]# tar -xf Mycat-server-1.4-beta-20150604171601-linux.tar.gz //免安装,解压即可使用
56mysql]# mv mycat/ /usr/local/
56mysql]# ls /usr/local/mycat/
bin catlet conf lib logs version.txt
56mysql]# cd /usr/local/mycat/
56mycat]# ./bin/mycat --help
Usage: ./bin/mycat { console | start | stop | restart | status | dump }
修改配置文件图二(图片上的修改仅供查看,不做修改)
DBA04-1 搭建mycat 分片服务器_第9张图片
修改配置文件图三(图片上的修改仅供查看,不做修改)
DBA04-1 搭建mycat 分片服务器_第10张图片
修改配置文件图四(图片上的修改仅供查看,不做修改)
DBA04-1 搭建mycat 分片服务器_第11张图片

修改配置文件图五(图片上的修改仅供查看,不做修改)DBA04-1 搭建mycat 分片服务器_第12张图片
6)56主机上修改配置文件。

56]# cd /usr/local/mycat/conf
56conf]# vim schema.xml
 7                 				//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。
  8 
  9                 
//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。 10
//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。 12
//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。 14
//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个 16
//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个 .......... ......... 27 //在53创建的数据库 28 //在54创建的数据库 29 //在55创建的数据库 //代表一个数据库服务器 31 33 select user() 34 //数据库服务器的IP、端口、用户、密码 36 37 38 39 // name="localhost54"代表主机54,只是一个标识。 41 select user() 42 44 45 46 47 // name="localhost55"代表主机53,只是一个标识。 49 select user() 50 //数据库的IP、用户、密码 52 53

7)添加PATH路径(可不用)

56 conf]#  export PATH=/usr/local/mycat/bin:$PATH
56 conf]# echo "PATH=/usr/local/mycat/bin:$PATH" >> /etc/profile
56 conf]# source /etc/profile
56 conf]# echo $PATH
/usr/local/mycat/bin:/usr/local/mycat/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
56 conf]# which mycat
/usr/local/mycat/bin/mycat

8)启动服务并查看端口

56 conf]#  /usr/local/mycat/bin/mycat start
Starting Mycat-server...
56 conf]# netstat -antup | grep :8066
tcp6       0      0 :::8066                 :::*         LISTEN      6421/java
[root@mycat conf]# ps -C java
  PID TTY          TIME CMD
 6421 ?        00:00:04 java

DBA04-1 搭建mycat 分片服务器_第13张图片
DBA04-1 搭建mycat 分片服务器_第14张图片

9)客户端验证:

客户端50连接分片服务器访问数据

50]# mysql -h192.168.4.56 -P8066 -u root -p123456;
mysql> show databases;
mysql> use testdb;
mysql> create table employee(
		> ID int primary key auto_increment,
		> sharding_id int,
		> name char(30),
		> age int);
mysql> desc employee;
mysql> insert into employee(sharding_id,name,age) values(10000,"bob",19);	//插入的数据库存储在53
mysql> insert into employee(sharding_id,name,age) values(10010,"fanny",19);	//插入的数据库存储在54
select * from employee;

10)修改56主机分片规则配置文件,让数据库可以分片存储到服务55里
56]# /usr/local/mycat/bin/mysqlcat stop
56]# vim /usr/local/mycat/conf/partition-hash-int.txt
10000=0
10010=1
10020=2

partition-hash-int.txt //设置分片规则的配置文件,规则为枚举算法。
枚举类型算法:
10000=0 //代表数据存储在数据服务器53
10010=1 //代表数据存储在数据服务器54
10020=2 //代表数据存储在数据服务器55

56]# /usr/local/mycat/bin/mysqlcat start
56]# ss -unptl | grep 8066
50]# mysql -h192.168.4.56 -P8066 -u root -p123456 
mysql> create table company(ID int primary key auto_increment,name char(30));
Query OK, 0 rows affected (0.77 sec)

mysql> desc company;
+-------+----------+------+-----+---------+----------------+
| Field | Type     | Null | Key | Default | Extra          |
+-------+----------+------+-----+---------+----------------+
| ID    | int(11)  | NO   | PRI | NULL    | auto_increment |
| name  | char(30) | YES  |     | NULL    |                |
+-------+----------+------+-----+---------+----------------+
55 ~]# mysql -u root [email protected]
mysql> use db1;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)

53 ~]# mysql -u root [email protected]
mysql> use db2;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)55 ~]# mysql -u root [email protected]

mysql> use db3;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db3 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)

11)创建表指定余数存储到数据库服务器

56]# mysql -h192.168.4.56 -u root -p123456
mysql> create table hotnews(id int,name char(30));
Query OK, 0 rows affected (0.98 sec)

mysql> insert into hotnews(id,name) values(10,"qq"),(8,"oo"),(12,"uu");
Query OK, 3 rows affected (0.37 sec)
55]# mysql -u root [email protected]
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| company       |
| employee      |
| employee02    |
| hotnews       |
+---------------+
4 rows in set (0.00 sec)

mysql> select * from hotnews;
+------+------+
| id   | name |
+------+------+
|    8 | oo   |
+------+------+
1 row in set (0.00 sec)
54]# mysql -u root [email protected]
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)

mysql> select * from hotnews;
±-----±-----+
| id | name |
±-----±-----+
| 10 | qq |
±-----±-----+
1 row in set (0.00 sec)
53]# mysql -u root [email protected]
mysql> show tables;
±--------------+
| Tables_in_db3 |
±--------------+
| company |
| employee |
±--------------+
2 rows in set (0.00 sec)

mysql> select * from hotnews;
±-----±-----+
| id | name |
±-----±-----+
| 12 | uu |
±-----±-----+
1 row in set (0.00 sec)

你可能感兴趣的:(MySQL数据库知识集,搭建mycat分片服务器)