DBA04-1 搭建mycat 分片服务器

本文详细介绍了如何使用Mycat进行数据分片,包括搭建分片服务器、配置环境、实现读写分离及高可用集群。通过实例展示了数据如何在多个数据库服务器间分配,以及如何制定分片规则。

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

搭建数据分片服务器 MyCAT

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

分片规则:
枚举法 固定分片 范围约定 求模法 日期列分区法 通配取模 ASCII码求模通配
编程指定 字符串拆分hash 一致性hash
Mycat软件介绍:
在这里插入图片描述
在这里插入图片描述
工作过程图一
在这里插入图片描述
工作过程图二
在这里插入图片描述

一、配置mycat环境

拓扑结构、

在这里插入图片描述
IP规划
在这里插入图片描述

二、开始搭建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

配置文件
在这里插入图片描述
修改配置文件图一
在这里插入图片描述
3)在53(主机)54(主机)和55(主机)上面创建db3、db2、db1库和授权一个用户。

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

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 }
修改配置文件图二(图片上的修改仅供查看,不做修改)
在这里插入图片描述
修改配置文件图三(图片上的修改仅供查看,不做修改)
在这里插入图片描述
修改配置文件图四(图片上的修改仅供查看,不做修改)
在这里插入图片描述

修改配置文件图五(图片上的修改仅供查看,不做修改)在这里插入图片描述
6)56主机上修改配置文件。

56]# cd /usr/local/mycat/conf
56conf]# vim schema.xml
 7                 <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />				//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。
  8 
  9                 <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />				//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。
 10                 <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />				//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。
 12                 <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3“
 13                            rule="mod-long" />		//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个dn....。
 14                 <table name="employee" primaryKey="ID" dataNode="dn1,dn2,dn3"
 15		rule="sharding-by-intfile" />			//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个
 16                 <table name="customer" primaryKey="ID" dataNode="dn1,dn2,dn3"
 17                            rule="sharding-by-intfile">		//dataNode="dn1,dn2,dn3"代表数据库,有几个数据库就写几个
            ..........
            <dataHost >
            .........
  27         <dataNode name="dn1" dataHost="localhost53" database="db3" />		//在53创建的数据库
 28         <dataNode name="dn2" dataHost="localhost54" database="db2" />		//在54创建的数据库
 29         <dataNode name="dn3" dataHost="localhost55" database="db1" />		//在55创建的数据库

            </dataHost>			//代表一个数据库服务器
31	<dataHost name="localhost53" maxCon="1000" minCon="10" balance="0"			// name="localhost53"代表主机53,只是一个标识。
 32                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
 33                 <heartbeat>select user()</heartbeat>
 34                 <writeHost host="hostM1" url="192.168.4.53:3306" user="roota"		
 35                                    password="123@qq.Com">				//数据库服务器的IP、端口、用户、密码
 36                 </writeHost>
 37         </dataHost>
 38 
 39         <dataHost name="localhost54" maxCon="1000" minCon="10" balance="0"
 40                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">	// name="localhost54"代表主机54,只是一个标识。
 41                 <heartbeat>select user()</heartbeat>
 42                 <writeHost host="hostM1" url="192.168.4.54:3306" user="roota"		//数据库服务器的IP、端口、用户、密码
 43                                    password="123@qq.Com">
 44                 </writeHost>
 45         </dataHost>
 46 
 47         <dataHost name="localhost55" maxCon="1000" minCon="10" balance="0"
 48                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">	// name="localhost55"代表主机53,只是一个标识。
 49                 <heartbeat>select user()</heartbeat>
 50                 <writeHost host="hostM1" url="192.168.4.55:3306" user="roota"
 51                                    password="123@qq.Com">	//数据库的IP、用户、密码
 52                 </writeHost>
 53         </dataHost>

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

在这里插入图片描述
在这里插入图片描述

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 -p123@qq.Com
mysql> use db1;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)

53 ~]# mysql -u root -p123@qq.Com
mysql> use db2;
Database changed
mysql> show tables;
+---------------+
| Tables_in_db2 |
+---------------+
| company       |
| employee      |
+---------------+
2 rows in set (0.00 sec)55 ~]# mysql -u root -p123@qq.Com

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 -p123@qq.Com
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 -p123@qq.Com
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 -p123@qq.Com
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值