Mycat 详细介绍及入门实战,解决数据库性能问题

news2024/11/26 13:39:49

一、基本原理

1、数据分片

(1)、水平分片

        Mycat 将一个大表的数据按照一定的规则拆分成多个小表,分布在不同的数据库节点上。例如,可以根据某个字段的值进行哈希取模,将数据均匀的分布到不同的节点上。

        这样做的好处是可以将数据分散到多个节点上,提高查询和写入的性能,同时也可以突破单个数据库的存储和处理能力限制。

(2)、垂直分片

        将一个数据库中的不同表按照业务逻辑进行拆分,分别存储在不同的数据库节点上。

        比如将用户的信息表和订单表分别存储在不同的节点上,这样可以根据业务的需求独立的对不同的表进行扩展和优化

2、中间件层

 (1)、连接管理

        Mycat 作为中间件,接收来自应用程序的数据库连接请求,并将这些请求转发到后端的真实数据库节点上。

        它维护着与应用程序和数据库节点的连接池,提高连接的复用率,减少连接建立和关闭的开销

(2)、SQL解析

        当接收到SQL请求时,Mycat 会对SQL 语句进行解析,识别出查询的表、字段、条件等信息

        根据解析结果和配置的分库分表规则,确定SQL语句应该在那些数据库节点上执行。

(3)、SQL路由

        降解析后的SQL语句转发到相应的数据库节点上执行,如果是查询语句,Mycat 会从多个节点上获取结果,并进行合并和排序后返回给应用程序。

        如果是写入语句,Mycat会根据分库分表规则降数据写入到相应的节点上。

(4)、结果合并

        对于从多个数据库节点返回的查询结果,Mycat 会进行合并和排序 ,使得应用程序看到的结果就像从一个单一的数据库中查询出来的一样。

3、高可用和负载均衡

(1)、高可用

        Mycat 可以配置多个节点组成集群,当某个节点出现故障时,其他节点可以接管其工作,保证系统的高可用性。

        可以通过主从复制、心跳检测等机制实现故障自动切换。

(2)、负载均衡

        Mycat 可以根据配置的策略将请求均匀地分发到不同的数据库节点上,实现负载均衡,避免某个节点负载过高。

        创建的负载均衡策略有,轮询、随机、权重等。

二、基础入门实战

1、部署环境

安装mycat 依赖的jdk环境,以及对应的MySQL客户端

详细安装jdk的方法请看:不依赖zookeeper的Kafka集群_kafka下载哪个版本-CSDN博客

安装MySQL数据库客户端,这里是基于原有的yum源仓库,直接进行下载的

2、部署Mycat

下载安装包:| MYCAT官方网站—中国第一开源分布式数据库中间件

将准备好的mycat二进制安装包解压到指定目录下,并使其命令全局可用,配置对应的环境变量

 tar -xf Mycat-server.tar.gz -C /usr/local/

 vim /etc/profile.d/mycat.sh

 source /etc/profile.d/mycat.sh

运行使其生效

3、先开启mycat 服务,预运行一下

mycat start

开启成功

4、更改其主配置文件和schema.xml 文件

vim conf/server.xml

将端口改为3306

基于root 用户关联MySQL数据库,以及对应的密码,TESTDB 为对外显示的数据库名

vim conf/schema.xml

前端显示数据库

后端关联数据库

心跳检测,读写节点分离

在MySQL数据中进行设置root 用户,使其可以被其他主机访问登录

其密码一般使用兼容老版本的方式老进行设置

CREATE USER 'root'@'%' IDENTIFIED BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

select user,host,authentication_string from mysql.user;

重启mycat服务

mycat restart

5、进行验证

基于中间件,实现分库分表的功能

前端显示的数据库

库中的内容是关联的后端数据库test中的数据

验证其读数据信息来自于后端哪一个MySQL数据库

其所读的数据轮替从后端从服务器中获取

6、开启后端主服务器的通用日志功能,查看其是否被触发日志信息

在配置文件中添加 general_log

重启服务进行查看

查询通用日志所在位置

select @@general_log_file;

可以看到,每过10秒,进行一次的心跳检测

7、当在mycat中对数据进行更改时,查看日志

触发主MySQL数据库的通用日志信息。

可以看出,其写数据时,只会在后端主数据库中写入,而读取数据,是从其他两台从数据库中获取的数据

8、将后端两台从服务器停止服务,然后访问

先将从主机node1停服

Mycat只能从120主机读取数据信息

当node2/120,主机也停止服务时

这时,mycat读写操作均是从node主机中(主MySQL数据库)中获取的数据

从主MySQL服务器的通用日志中可以查看到,其mycat在其所代理的后端所有read服务器全部瘫痪时,将向主数据库中发起read数据调用

当两台从数据库重新启动时,其访问读数据又会重新回归到从数据库中

成功的实现了MySQL数据的读写分离,分库分表功能

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2219723.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

美摄科技云服务解决方案,方案成熟,接入简单

美摄科技作为视频处理领域的先锋,凭借其强大的技术实力和深厚的行业经验,推出了成熟的云服务解决方案,为轻量化视频制作开辟了全新的道路。 一、成熟方案,接入无忧 美摄科技云服务解决方案的最大亮点在于其成熟度和易用性。我们…

RabbitMQ 入门(四)SpringAMQP五种消息类型(Work Queue)

一、WorkQueue(工作消息队列) Work queues,也被称为(Task queues),任务模型。简单来说就是让多个消费者绑定到一个队列,共同消费队列中的消息。 当消息处理比较耗时的时候,可能生产消息的速度会远远大于…

react里实现左右拉伸实战

封装组件: 新建一个resizeBox.tsx文件写上代码如下: import React, { ReactNode, useState, useEffect, useRef } from react; import styles from "./resizeBox.less"; interface ResizableBoxProps {/*** 盒子的宽度*/widthNum?: number;…

比较相同机器上 redis和mysql分别单独承载的 最大连接数量

在相同的机器上,Redis 和 MySQL 的最大连接数量会受到硬件配置(如 CPU、内存、网络等)、配置参数和应用场景的影响。以下是对 Redis 和 MySQL 在单机环境下最大连接数的比较: Redis 最大连接数量 默认配置: Redis 默…

【2024最新版】网络安全学习路线-适合入门小白

首先说明,我是一名CTF的web手,这是我自己亲身学习网络安全的路线,希望能够帮到大家,我虽然不是大牛,但我也希望能够帮助一些网安小白找到自己学习的方向,后面有就业的详细安全技术要求,如果真想…

yolov8实例分隔

1.查看显卡型号 2.在https://en.wikipedia.org/wiki/CUDA上查看显卡算力,这里显卡为1650,算力为7.5 3.查看显卡算力对应的cuda版本 4slurm上该怎么办? 查看slurm上计算节点cuda版本 查看cuda版本 srun -A 2022099 -J job1 -p Gnode --…

【Echarts 实战指南】解锁动态历史曲线之谜

在工作中,大家是否曾遇到过这样一种需求呢?需获取设备最近 10 分钟的历史数据。设备实时数据每 2 秒推送一次,且要把历史数据曲线变成动态变化的状态。倘若设备最近 10 分钟的历史数据为 20 个点,那么现在每 2 秒就要将最前面的点…

Java爬虫:获取直播带货数据的实战指南

在当今数字化时代,直播带货已成为电商领域的新热点,通过直播平台展示商品并进行销售,有效促进了产品的曝光和销售量的提升。然而,如何在直播带货过程中进行数据分析和评估效果,成为了摆在商家面前的一个重要问题。本文…

工业相机有哪些应用场景

工业相机具有高性能、高稳定性和高可靠性的特点,因此在众多工业领域都有广泛的应用场景。以下是朗观视觉小编总结的一些典型的应用场景: 机器视觉与自动化: 工业相机在机器视觉系统中起着核心作用,用于捕捉和分析物体的图像&#…

【Linux】从多线程同步到生产者消费者模型:多线程编程实践

目录 1.线程的同步 1.1.为什么需要线程的同步? 2.2.条件变量的接口函数 2.生产消费模型 2.1 什么是生产消费模型 2.2.生产者消费者模型优点 2.3.为何要使用生产者消费者模型 3.基于BlockingQueue的生产者消费者模型 3.1为什么要将if判断变成while&#xff…

API的力量:解决编程技术问题的利器

在软件开发的世界里,编程技术问题无处不在。从数据获取到用户认证,从支付处理到地图服务,这些问题的解决方案往往需要深厚的专业知识和大量的开发时间。然而,应用程序编程接口(API)的出现,为开发…

架构师备考-背诵精华(系统架构设计)

软件架构风格 类型 子类型 说明 数据流风格 批处理 每个处理步骤是一个单独的程序,每一步必须在前一步结束后才能开始,而且数据必须是完整的,以整体的方式传递。 前面的构件处理完,后面构件才能处理;数据完整传输…

(五)若使用LQR控制小车倒立摆,该如何对小车和摆杆的动力学方程线性化?哪些变量是可以进行简化的,线性化后的状态空间方程应该怎么列写

写在前面: 关于lqr控制的讲解,可以观看如下三个视频: 2. LQR数学公式理解_哔哩哔哩_bilibili 如何感性地理解LQR控制?_哔哩哔哩_bilibili LQR简介与使用_哔哩哔哩_bilibili 正文: 在之前系列的文章中我们已经得出…

scala 抽象类

理解抽象类 抽象的定义 定义一个抽象类 :abstract class A {} idea实例 抽象类重写 idea实例 练习 1.abstract2.错3.abstract class A{}4.对

Redis应用高频面试题

Redis 作为一个高性能的分布式缓存系统,广泛应用于后端开发中,因此在后端研发面试中,关于 Redis 的问题十分常见。 本文整理了30个常见的 Redis 面试题目,涵盖了 Redis 的源码、数据结构、原理、集群模式等方面的知识,并附上简要的回答,帮助大家更好地准备相关的面试。 …

web前端--html 5---qq注册

<!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>qq注册</title> <link rel"impo…

图像识别解决方案

图像识别解决方案是一种基于人工智能技术的图像处理和识别方法&#xff0c;能够实现对图像内容的自动分析和理解。以下是朗观视觉小编对图像识别解决方案的详细阐述&#xff1a; 一、技术原理 图像识别解决方案的核心原理是机器学习算法和深度学习网络。通过收集大量的图像数据…

nnUnet 大模型学习笔记(续):3d_fullres 模型的推理、切片推理、计算dice系数

目录 1. 前言 2. 更改epochs 3. 推理 3.1 nnUNet_predict 3.2 切成小的nii gz文件推理 切片代码 融合代码 3.3 可视化展示 3.4 评估指标 参考 1. 前言 训练了一天半&#xff0c;终于跑完了。。。。 训练的模型在这可以免费下载&#xff1a; 基于nnUnet3d-fullres训…

深⼊理解指针(2)

目录 1. 数组名的理解 2. 使⽤指针访问数组 3. ⼀维数组传参的本质 4. ⼆级指针 5. 指针数组 6. 指针数组模拟⼆维数组 1. 数组名的理解 我们在使⽤指针访问数组的内容时&#xff0c;有这样的代码&#xff1a; int arr[10] {1,2,3,4,5,6,7,8,9,10}; int *p &arr[…

rancher安装并快速部署k8s 管理集群工具

主机准备 准备4台主机 3台用于k8s集群 &#xff0c;1台用于rancher 每台服务器新增配置文件 vi etc/sysctl.confnet.ipv4.ip_forward 1 刷新生效 sysctl –p 安装docker 安装的时候可以去github上检索rancher看看最新版本适配那个版本的docker&#xff0c;这里安装23.0.1…