MyCat - 分片 - MyCat 环境搭建 | 学习笔记

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 快速学习 MyCat - 分片 - MyCat 环境搭建

开发者学堂课程【全面讲解开源数据库中间件 MyCat 使用及原理(四):MyCat - 分片 - MyCat 环境搭建】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/758/detail/13330


MyCat - 分片 - MyCat 环境搭建

内容介绍:

一、分片配置

二、创建数据库

三、测试

 

一、分片配置

1.配置 MyCat 的 schema.xml

打开服务器,MyCat 将会部署在 157 这台服务器上

在该服务器上查看:

image.png

在 MyCat 中找到核心配置文件 schema.xml:

image.png

通过 vi schema.xml 不是特别方便:

image.png

在此处修改并不方便,因为此处的内容较多。

这时,借助于 notepad++  中的一个插件,NppFTP。

在这之前,已经连接过 MyCat1 ,可以检查 MyCat1:
image.png

即157 上的 MyCat1

所以连接 MyCat1,连接完成后,找到 schema.xml (找到 usr,usr 下有一个 local,在 local 下找到 mycat ,打开 mycat 下 conf 下的配置文件,找到 schema.xml)

将配置好的文件拷贝到 schema.xml

逻辑库的配置:

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

逻辑表的配置:
image.png

数据节点的配置:

<dataNode name="dn1" dataHost="host1" database="v_goods"/>

<dataNode name="dn2" dataHost="host2" dat abase="v_order"/>

<dataNode name="dn3" dataHost="host3" dat abase="v_log”/>

<dataNode name="dn4" dataHost="host4" database="v_log”/>

节点主机的配置:

image.png

可以看到连接的服务器为 158、159、160、161

2.rule.xml 中配置

在 schema.xml 中,还关联了一块信息:

分片规则:

<table name=”tb_operatelog” dataNode=”dn3,dn4” primaryKey=”id” rule=”log-sharding-by-murmur”/>

所以接下来要声明这样一个分片规则,该规则叫 log-sharding-by-murmur,

打开 rule.xml,可以找到 sharding-by-murmur。

有了一致性 hash 的分片,为什么需要在此处再声明(也可以将 sharding-by-murmur 改为 log-sharding-by-murmur):

因为当前 mycat 中,

该 schema.xml 表用 log-sharding-by-murmur 一致性 hash,有可能其他表也用一致性 hash ,而这两张表的组件不一样,所以为了方便起见,根据分片规则再声明:

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

<rule>

<columns>id</ columns>

<algorithm>log-murmur</ algorithm>

</rule>

</ tableRule>

注意:log-murmur 是别名,该别名引用的是分片函数

还需要声明 function:

该 function 的声明就是将下面的function(上图所示)拷贝,然后将<property name=.”count”>3</property>

改为<property name=.”count”>2</property>

因为再当前的架构中,operatelog 有两个节点。

该处配置为:

//1og-murmur 就是分片函数

<functionname="1og-murmur” " class="io.mycat.route.function.PartitionByMurmurHash">

<property name="seed">0</property>

<property name="count">2</ property>

<property name="virtualBucketTimes ">160</ property>

</function>

配置权限信息:

哪些用户能访问该逻辑库,这时需要在 server.xml 中配置

打开 server.xml ,找到:

<user name="root" defaultAccount="true">

//加密密码

<property name="password">GO0bnPVwrAuFgr1JMuEZkvfDNyTpoiGu7n/Wlsa151cirHQnANVk3NzE3FErx8v6pAcO0ctx3xFecmSr+9760A==

</property>

//访问 V_SHOP

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

<property name="readOnly">false</property>

<property name="benchmark">1000</property>

<property name="usingDecrypt">1</property>

将下面的 <property name="schemas">ITCAST</property> 也该为 <property name="schemas"> V_SHOP </property>

意味着两个用户 root 和 user 都可以访问 V_SHOP,但是 user 是只读的。

 

二、创建数据库

在各个 MySQL 数据库实例中创建数据库

需要创建 MyCat 中关联的 MySQL 的数据库

MyCat 中关联的 MySQL 的数据库:

<dataNode name="dn1" dataHost="host1" database="v_goods"/>

<dataNode name="dn2" dataHost="host2" dat abase="v_order"/>

<dataNode name="dn3" dataHost="host3" dat abase="v_log”/>

<dataNode name="dn4" dataHost="host4" database="v_log”/>

1.这时需要连接 158、159、160、161 四台服务器连接 MySQL 创建数据库。

在四台服务器中输入mysql-u root -p,如下图:
image.png

连接上 MySQL 后,检查当前 MySQL 中的数据库(在测试时遗留下的数据库),如下图:

image.png

之前搭建 MyCat 中关于双主双从的 MySQL 集群时,也用到这几台服务器,要将原有的双主双从的配置删除,还原数据库。这里每一个都是单独的数据库,需要把双主双从的配置以及 MySQL 的配置文件中所有的配置都注释。这样相当于四台独立的 MySQL。

2.接下来创建数据库:

首先在 158 这台服务器上创建数据库 v_goods(存储商品相关的信息)

创建数据库的语句:

create database v_goods default charset utf8mb4;

创建完成

可以输入语句查询:

image.png

然后创建服务器 159 上的数据库

其中存储的是订单信息

create database v_order default charset utf8mb4;

创建完成

 

三、测试

1.可以输入语句查询:

image.png

接下来服务器 160 和 161 上存储的是与日志相关的信息,要创建数据库,输入语句:

create database v_log default charset utf8mb4;

image.png

四台 MySQL 中关于该四个数据库创建完成。

到此,将 MyCat 的环境都创建完成。

2. 关闭防火墙

接下来启动 MyCat,但是在 启动 MyCat 之前,要保证所有服务器上的防火墙要全部关闭,先检查防火墙的状态,输入语句:

service iptables status

image.png

此时防火墙的状态是关闭的,同样的操作检查 158、159、160、161(检查防火墙是否关闭,避免重启后连接不上 MySQL )

3.将五台服务器所有防火墙都关闭后,启动 MyCat:

image.png

发现 mycat server 已经在运行,所以先将其关闭(输入语句 bin/myct stop)

再执行 start 开启,开启后查看 log 中关于 mycat 的日志:

image.png

successfully 意味着启动成功,再在 157上登录 mycat(输入语句:mysql-h192.168.192.157 -P 8066 -u root -p ,然后输入密码 123456):

image.png

然后通过语句 show databases  查看里面的数据库

image.png

数据库中有一逻辑库 V_SHOP,使用 use v_shop 语句:

image.png

发现其报错,因为 MyCat 中数据表是严格区分大小写的,所以应该改为:use V_SHOP,然后再输入 show tables:

image.png

这时可以看到所有的逻辑库。

注意:在 MyCat 中,可以看到这些逻辑库,但是这些逻辑表的表结构不能看到。

所以在 v_goods 、v_order、v_log 中没有表,如下图示例:

image.png

说明只是在逻辑上定义了逻辑库和逻辑表,实际在各个数据中,各个数据库表、表结构都不存在。

4.所以接下来要导出在本地 localhost 的表、表结构以及表中的数据,然后从 MyCat 中执行 SQL 脚本,创建数据表,并导入数据。

从本地数据库中将当前信息导出:

image.png

image.png

导出前不选择 “CREATE database” 语句,假设选择了该语句:

导出完成,SQL 脚本上传到服务器后打开:

image.png

使用 head 指令:

head-30 v_shop.sql

image.png

在该 SQL 脚本的前 30 行中,有语句:

CREATE DATABASE /*!32312 IF NOT EXISTS* /v_shop/*!40100 DEFAULT CHARACTER SET utf8mb4 */;

之前说到不选择“CREATE database” 语句,就是为了删除该语句,因为该脚本需要在 MyCat 中执行,MyCat 中 V_SHOP 的逻辑库已经存在,不需要再次创建,所以要将该语句删除。

然后需要对 USE ‘v_shop’这条语句做处理:

在切换数据库时,数据库名严格区分大小写,所以这里不能用小写,将其改为 V_SHOP。

然后保存,并查看保存是否成功:

image.png

接下来需要在 MyCat 中执行该脚本,用到指令:

source /root/v_shop.sql

image.png

查看当前目录有一个脚本叫 zookeeper:
image.png

然后执行:

(执行过程需要等待,因为脚本中要插入很多记录,有很多表结构需要创建)

导入完成:

image.png

再次执行语句:show tables

image.png

发现在 MyCat 中没有任何变化,因为其展示的是逻辑表。

5.在四台 MySQL 的服务器上查看是否有表结构:

服务器 158:

image.png

发现有表结构,第一台服务器存储的是商品相关的表,另外四张表是全局表。

服务器 159:

image.png 

服务器160:

image.png 

服务器161:

image.png

6.此时要查询一张表,执行语句:

select *from tb_operatelog

image.png

在该日志表结构中,一共20条记录。

7.该 20 条记录存储在哪个节点?

由于采用的是水平拆分,所以这张表的数据会被分散,根据一致性 hash 算法分散在 160、161 上,所以这两张表中都有数据,查看:

image.png

在第一个节点中有 14 条数据,一共 20 条数据,说明第二个节点中有 6 条,如果是 6 条说明当前的水平拆分是没有问题的,

查看:

image.png

相关文章
|
1月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
38 0
|
运维 关系型数据库 MySQL
MyCat-架构剖析-MyCat 主从切换实现 | 学习笔记
快速学习 MyCat-架构剖析-MyCat 主从切换实现
668 0
MyCat-架构剖析-MyCat 主从切换实现 | 学习笔记
|
11月前
|
SQL 存储 关系型数据库
04MyCat - MyCat概述
04MyCat - MyCat概述
91 0
|
关系型数据库 MySQL 中间件
MyCat-入门-分片测试-访问 MyCat | 学习笔记
快速学习 MyCat-入门-分片测试-访问 MyCat
74 0
MyCat-入门-分片测试-访问 MyCat | 学习笔记
|
SQL 缓存 监控
MyCat - 分片 - MyCat 监控 | 学习笔记
快速学习 MyCat - 分片 - MyCat 监控
100 0
MyCat - 分片 - MyCat 监控 | 学习笔记
|
SQL 负载均衡 监控
MyCat-集群-两台 MyCat 的安装配置 | 学习笔记
快速学习 MyCat-集群-两台 MyCat 的安装配置
308 0
MyCat-集群-两台 MyCat 的安装配置 | 学习笔记
|
存储 关系型数据库 MySQL
MyCat-入门-分片测试-需求 | 学习笔记
快速学习 MyCat-入门-分片测试-需求
88 0
MyCat-入门-分片测试-需求 | 学习笔记
|
负载均衡 关系型数据库 MySQL
MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记
快速学习 MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离
117 0
MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记
|
中间件 数据库 开发者
MyCat-需求说明 | 学习笔记
快速学习 MyCat -需求说明
81 0
MyCat-需求说明 | 学习笔记
|
存储 Java 中间件
MyCat-入门-环境搭建-MyCat 安装 | 学习笔记
快速学习 MyCat-入门-环境搭建-MyCat 安装
156 0
MyCat-入门-环境搭建-MyCat 安装 | 学习笔记