Mycat2原理介绍

news2024/9/24 23:27:14
  • Mycat介绍

  • Mycat原理

  • Mycat 核心配置
    • Scheam.xml  逻辑数据库和节点对应关系配置
    • Server.xml    mycat的连接配置
    • Rule.xml.      分片规则
      • 自动分片auto-sharding-long,比如0-10000节点1 ,10001-20000节点2
      • 枚举分片sahrding-bt-intfile ,比如beijing节点1,shanghai节点2
      • 取模分片mod-long,
      • 按日期分片

  • 操作(水平分库)
    • 可以用数据库工具直接连接Mycat的逻辑数据库。
    • 在Mycat上创建逻辑表,就会在对应的节点上创建真实的物理表(这里会有多个节点)。
    • 执行插入语句,如果是自动分片,那么Mycat就会根据Id存到对应的物理数据库中。

  • Mycat乱码问题
    • dbDriver="native"
    • url="192.168.52.10:3306"

  • 全局序列号问题(分库分表后主键没办法用自增主键)
    • Server.xml里sequnceHandlerTypes设为0,表示使用本地文件sequence_conf.properties的配置当前全局Id

  • Mycat读写分离
    • 为什么需要读写分离?
      • 性能提升:在高并发的情况下,数据库的读操作往往远多于写操作。通过读写分离,可以将读请求分散到多个从数据库上,只将写请求发送到主数据库。这样可以显著减轻主数据库的压力,提升整个数据库系统的处理能力。
      • 可扩展性:随着业务量的增加,数据库的负载会逐渐增大。读写分离允许动态地添加更多的从数据库来应对读负载的增加,从而实现数据库的水平扩展。
      • 高可用性:在Mycat的读写分离模式下,如果主数据库发生故障,可以迅速切换到从数据库进行读操作,保证业务的连续性。同时,也可以通过配置多个从数据库来提高系统的容错能力。
      • 资源优化:读写分离可以根据数据库的负载情况,优化硬件资源的使用。例如,读操作通常不需要太高的CPU性能,但需要更多的I/0资源和网络带宽。可以针对性地为读服务器配置更优的I/0设备和更宽的带宽,而为写服务器配置更强的CPU。

  • 为什么有的必须要从主节点查询?为什么不是所有的查询都放到从节点上?
    • 对事务一致性要求高的查询,为了保证事务的一致性,必须从主节点查询。
  • 主从复制架构
    • 主从复制用途
      • 实时灾备,用于故障切换
      • 读写分离,提高性能
      • 数据备份
    • 原理
      • 把主服务器上的binlog复制到从服务器上执行一遍,这样主从服务器的数据就相同了
        • 其实主节点上会有一个dump线程读取binlog的数据发送给从节点的IO线程
        • 如果有两个从节点,主节点就会有两个dump线程与之对应
        • 为什么需要dump线程?
          • 因为数据安全性考虑,主节点的binlog肯定不能备外部直接访问

  • 执行步骤

  • 造成主从延迟的原因?及解决方案?
    • 延迟1:binlog写入延迟
      • 每个事务提交时会把数据都写入到缓存里,在由fsync线程统一刷到磁盘
      • 这里我可以调整sync_binlog的值,来提高效率

  • 延迟2:sqlThread处理慢的问题
    • Mysql5.6往后把现有的sql线程 替换成了coordinator组件
    • coordinator负责读取realylog的数据,分发给多个worker线程去执行,每个worker线程都会有一个队列(如何保证队列里的事务时有序的?逻辑时钟算法,每个事务在提交的时候都会生成一个时间戳的id,可以排序 )
    • 分配策略(如何保证不同worker之间的事务有序?):1. 更新同一行数据的两个事务,必须发到一个worker上 2. 同一个事务的也不能备拆开,必须分配到一个work中。
    • 解决了原先sql Thread单线程的瓶颈。

  • 搭建步骤
    • 准备主从两个mysql服务器,在主库上创建数据库,表,并插入数据
    • 修改vim /etc/my.cnf配置文件
      • lower_case_table_names=1 忽略大小写
      • log-bin=mysql-bin  开启binlog功能
      • server-id=1
      • binlog-do-db=test 只备份test数据库
      • binlog_ignore_db=dev忽略dev数据库
      • 不加binlog-do-db和binlog_ignore_db表示备份全部数据库
    • 重启mysql
    • 在主服务器上创建一个从服务器访问的用户账户,用replication slave赋权
    • 在从库上创建数据库,表,导入现有主库的数据
    • 修改从库的my.cnf的server-id,并重启
    • 配置从数据库访问主库的连接参数
    • 保证主从服务的auto.cnf配置的uuid不相同
    • 启动从服务器的复制进程,start slave (注意slave就是从服务访问主服务器的账户)
      • Show slave status查看状态,保证slave_io_running和slave_sql_running都是yes
      • 如果不是yes,就用show slave status \G进行排查
    • 在主库进行插入删除更新,看从库有无同步成功
  • 实现读写分离
    • 在Scheam.xml  逻辑数据库和对应的节点,(这里节点应该是一个)
    • 设定balance=1和writeType=0,比如保证从库读,主库写,并设定主从数据库的连接参数
    • 在mycat上创建逻辑库,这样在mycat读其实就是读的从节点的数据库,写就是写的主节点的数据库

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

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

相关文章

【828华为云征文|如何使用华为云Flexus X实例搭建私人博客:从配置到发布全指南】

文章目录 华为云Flexus X实例介绍搭建专属私人博客准备工作具体操作指南服务器环境确认宝塔软件商店操作一键部署WordPress私人博客域名解析WordPress安装初始页数据库信息配置运行安装程序配置博客信息博客管理后台(默认为wp-login.php页面)博客前台页面…

c语言位运算符速成

本篇文章对c语言速成系列的补充,其中的内容会涉及原反补以及& 、| 、 ~ 、^、位运算等等。那么,闲话少叙,我们直接进入正题 首先我们先来讲讲原反补 进制转换(前置知识) 在学原反补之前我们先来学几个机制转换的…

网络高级(学习)2024.9.10

目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 (1)线圈寄存器,类比为开关量,每一个bit都对应一个信号的开关状态。 (2&#xff09…

C++——STL——栈(stack)

栈的定义 栈 ( stack )是限定仅在表的一端进行插入和删除操作的线性表,允许插入和删除的一端称 为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。 栈的示意图 因为栈只能够在一端进行插入和删除,所以…

【Lua学习】Lua入门

上一篇帖子【Lua学习】Lua最最基础的 – 经云的清净小站 (skycreator.top)讲了Lua是什么,Lua如何安装在Linux和Windows上。那么安装好之后,我们就要使用Lua实现我们的各种功能了。 首先,我们要先了解Lua一些最基本的内容,比如怎么…

杀毒软件 | Malware Hunter v1.189.0.816 绿色版

软件简介 Malware Hunter是由Glarysoft开发的一款专业安全防护软件。该软件的主要目的是保护用户的计算机免受恶意软件、病毒和其他网络威胁的侵害。它通过采用高效的云引擎和小红伞引擎,能够快速且全面地扫描电脑中的恶意软件,并进行强力清除&#xff…

5--SpringBoot、Mybatis

目录 Mybatis Mybatis入门操作步骤 1.准备工作 创建springboot工程 创建数据库表和实体类 连接数据库 创建接口XxxMapper 2.数据库连接池 Lombok 使用 Mybatis 准备工作 删除 日志输入 参数占位符 新增 更新 查询 驼峰命名 条件查询 XML 创建XML文件 编…

关于前端知识中框架概念部分的详细介绍

1、为什么要学习流行框架? 企业:为了提高效率,因为时间就是金钱。开发人员:提高了开发效率发展进程: JS>JQuery>模板引擎>框架时代(Angular(2)、React、Vue)好处:不用直接…

2.安卓逆向-初识java语言

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 上一个内容:1.安卓逆向-说明 关于java语言的介绍就不写了没啥用直接开始 首先java语言写的代码运行说明 …

kolors文生图框架安装

环境安装 根据Kolors【github】的指引,安装命令如下: apt-get install git-lfs git clone https://github.com/Kwai-Kolors/Kolors cd Kolors conda create --name kolors python3.8 conda activate kolors pip install -r requirements.txt python3 s…

Vue3+TS项目封装SVG图标显示组件vite-plugin-svg-icons插件使用

准备好svg文件 假设从iconfont-阿里巴巴矢量图标库下载了一个svg格式的图标,放在我们项目里,并重命名为ic_money.svg,相对路径为:src\assets\images\icons\ic_money.svg 安装vite-plugin-svg-icons插件 npm install vite-plugi…

常用电路及分析

前言 最近在研究一些简单的硬件知识,把在网上看到的一些常见电路分析总结了一下。 有纰漏请指出,转载请说明。 学习交流请发邮件 1280253714qq.com 串联稳压电路 三极管串联线性稳压电路原理详解及Multisim仿真_三极管稳压电路-CSDN博客 线性稳压电…

Java小白一文讲清Java中集合相关的知识点(八)

HashMap底层机制及源码剖析 HashMap底层维护了Node类型的数组table,默认为null 当创建对象时,将加载因子初始化为0.75; 当添加key-value时,通过key的哈希值得到在table的索引,然后判断该索引处是否有元素,如果没有元…

力扣 — — 2555. 两个线段获得的最多奖品

力扣 — — 2555. 两个线段获得的最多奖品 一、题目描述 题目大意:给定一个数组prizePositions,数组中的值表示的是奖品的位置,每一个位置可以有多个奖品,并且设定一个线段的长度 K K K,要求从所有奖品位置中选择两个…

修改Netty 中EventLoopGroup的线程名字前缀

此方案针对 netty 4 , 阅读Netty 源码的过程中涉及到多种线程跳转,2-1 3-1 4-1 类似的命名头晕眼花,直接改了成方便辨认的名字吧! 代码如下: public static EventLoopGroup getEventLoopGroup(String name, int nThread) {Defaul…

第十一周:机器学习

第十一周周报 摘要Abstract机器学习1. 注意力机制(下)1.1 multi-head self-attention(多头注意力机制)1.2 Positional Encoding(位置编码)1.3 truncated self attention(截断式注意力机制&#…

SVGJS使用

svgjs用于操作 SVG 和动画的轻量级库。 官网 SVG.js v3.2 |家 (svgjs.dev) 1、安装 npm install svgdotjs/svg.js 或者下载直接引用 2、使用 <script src"https://cdn.jsdelivr.net/npm/svgdotjs/svg.js3.0/dist/svg.min.js"></script> import { S…

Win11 22H2/23H2用户速来!9月更新补丁KB5043076已发布

系统之家于9月11日发出最新报道&#xff0c;微软针对Win11用户发布了9月最新的更新补丁KB5043076&#xff0c;22H2用户升级系统后&#xff0c;版本号升至22621.4169&#xff0c;23H2用户的系统版本也升至22631.4169。此次更新支持用户从Windows分享窗口将内容共享到安卓设备。以…

95. UE5 GAS RPG 实现创建多段飞弹攻击敌人

从这篇开始&#xff0c;我们将实现一些技能&#xff0c;比如多段火球术&#xff0c;闪电链等等。 在这一篇里&#xff0c;我们先实现多段火球术&#xff0c;技能可以通过配置发射出多个火球术进行攻击。 创建多段火球函数 首先在我们之前创建的RPGFireBolt.h类里面增加一个生…

k8s的环境配置

一、前期系统环境准备 准备3台主机&#xff1a;硬盘50G cpu2个 内存2G 1、3台主机同时配置 1&#xff09;关闭防火墙与selinux、NetworkManager [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/…