mycat实现mysql读写分离,热切换,集群

2023-11-13

在互联网时代,实现mysql读写分离,热切换,集群能大大提高mysql数据库访问压力,防止数据丢失,使用mycat能帮我们实现这些。我们要实现的是这种架构。

这里写图片描述

1、Mycat能实现数据库的垂直切分和水平切分,这里用户写数据的时候,通过mycat把数据按照特定的规则存储到mysql-1,mysql-2,mysq-3…中,读的时候,分布从mysql-1,mysql-2,mysql-3…等读出数据然后由tomcat合并结果给客户端,这样子能分发数据库的压力,实现mysql的集群。

2、Mysql自身能支持主从复制和主主复制,能够在不同服务器的数据库中相互复制数据,这是实现读写分离的前提。

3、Mycat能支持mysql的读写分离,还有热切换,可以在conf下schema.xml配置。

<dataHost name="master1" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <writeHost host="host1" url="192.168.137.101:3306" user="root" password="123" >
          <readHost host="host3" url="192.168.137.103:3306" user="root" password="123" />
       </writeHost>
</dataHost><dataHost name="master2" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <writeHost host="host2" url="192.168.137.102:3306" user="root" password="123" />
       <writeHost host="host4" url="192.168.137.104:3306" user="root" password="123" /> 
</dataHost>

第一种的缺点是,当主down了之后,从也就不能读了,第二种,当主挂了,从还可以切换,继续可以用,上面的架构图中,我们采用第二种模式,另外在同步数据的时候,我们为什么要处理充主主同步,而不是主从同步呢,原因是,当主挂了之后,作为热备的mysql可以切换作为主继续服务,然后我们可以恢复原先down的mysql机器,那么他就可以同步数据了。如果是主从的话,当主down了之后,从切换为主,但是当原因的主重启之后,就很难同步从的mysq的数据了。那我们就来配置下上面那个架构

1、配置conf/schema.xml,配置切片集群,还有读写分离,热切换,主主数据的同步,参考http://blog.csdn.net/yingxiake/article/details/51691986http://blog.csdn.net/yingxiake/article/details/51693537

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">

    <schema name="test" checkSQLschema="false" sqlMaxLimit="100">
       <table name="tb_fenpian" dataNode="dn1,dn2" rule="rule1" primaryKey="id"/>
    </schema>

    <!--将逻辑数据库和实际数据库进行关联-->
    <dataNode name="dn1" dataHost="master1" database="fenpian" /> 
    <dataNode name="dn2" dataHost="master2" database="fenpian" />

    <!--切片mysql-1-->
    <dataHost name="master1" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <!--主,用于写-->
       <writeHost host="host1" url="192.168.137.101:3306" user="root" password="123" />
         <!--主2,用于读,host1 down了,自动切换为主,读写都可以-->
       <writeHost host="host3" url="192.168.137.103:3306" user="root" password="123" /> 
    </dataHost> 
    <!--切片mysql-2-->
    <dataHost name="master2" maxCon="1000" minCon="10" balance="1"
       writeType="0" dbType="mysql" dbDriver="native">
       <heartbeat>show slave status</heartbeat> 
       <!--主1,用于写-->
       <writeHost host="host2" url="192.168.137.102:3306" user="root" password="123" />
       <!--主2,用于读,host2 down了,自动切换为主,读写都可以-->
       <writeHost host="host4" url="192.168.137.104:3306" user="root" password="123" /> 
    </dataHost>

</mycat:schema>

这里要说下,mycat读写分离的一些关键配置,按照官方文档说明:

a. balance 属性负载均衡类型,目前的取值有 4 种:
1. balance=”0”, 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
2. balance=”1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
3. balance=”2”,所有读操作都随机的在 writeHost、 readhost 上分发。
4. balance=”3”, 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

b. writeType 属性,负载均衡类型,目前的取值有 3 种:
1. writeType=”0”, 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个
writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .
2. writeType=”1”,所有写操作都随机的发送到配置的 writeHost。
3. writeType=”2”,没实现。

c. switchType 属性
- -1 表示不自动切换
- 1 默认值,自动切换
- 2 基于MySQL 主从同步的状态决定是否切换

2、配置conf/schema.xml了,需要配下分片规则,在/conf/rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/"> 
 <tableRule name="rule1">
    <rule>
      <columns>id</columns>
      <algorithm>func1</algorithm>
    </rule>
 </tableRule>

 <function name="func1" class="org.opencloudb.route.function.PartitionByLong">
    <property name="partitionCount">2</property>
    <property name="partitionLength">512</property>
 </function>
</mycat:rule>

3、配置下链接mysql的帐号信息等,/conf/server.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://org.opencloudb/">
    <system>
      <property name="defaultSqlParser">druidparser</property>
    </system>
    <user name="test">
        <property name="password">test</property>
        <property name="schemas">test</property>
    </user>

    <user name="user">
        <property name="password">user</property>
        <property name="schemas">test</property>
        <property name="readOnly">true</property>
    </user>
</mycat:server>

4、进行测试步骤,可以按如下方式进行,本人测试通过,mycat是放在windows上,四个mysql是放在linux rhel7的四个虚拟机上。

a.验证分片规则集群,在mycat分别插入id为1还有id为513的数据,看看是否能根据id的分片规则,分布差到俩个数据库中,1在0~512,应该到101的数据库中,513在512~1024应该到102的数据库中

b.验证主主数据是否同步,查看年103还有104的数据是否和101和102的数据库数据一致

c.验证热切换,将101down掉,103是否能继续服务,读写是否正常,然后再启动101,是否正常

d.读写分离在主主同步的架构下,还没想出测试的方式,再看看。

现在这个架构还存在一个问题,就是mycat单点问题,由于篇幅问题,就留在下一篇博客写吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mycat实现mysql读写分离,热切换,集群 的相关文章

  • Spring Framework与JDK版本对应关系

    最近在实践Spring项目时 发现无法通过注解的方式实现Bean容器管理 控制器报错信息为 Failed to read candidate component class 也就是注解扫描不了 在反复检查代码不存在问题后意识到可能是版本兼容
  • layui的自定义page

    一 前端页面使用laypage div align center style margin top 20px div let totalCount 0 getPageData 1 6 function getPageData page li
  • Nginx的配置(转载)

    虚拟主机与域名解析 虚拟主机是使用特殊的软硬件技术 把一台运行在因特网上的服务器主机分成一台台 虚拟 的主机 每一台虚拟主机都具有独立的域名 具有完整的Internet服务器 WWW FTP Email等 功能 虚拟主机之间完全独立 并可由
  • Easyexcel导入导出List类型数据报错:Can not find ‘Converter’ support class Li,的解决方法

    目录 问题分析 解决方法 手动编写List类型转换类 问题分析 Easyexcel默认是不支持List类型数据自动转换的 因此当实体类传递数据为List类型时需要手动编写转换类来实现数据转换 否则会报错 Can not find Conve
  • 面试题:两个按递增顺序排列的整数数组 nums1 和 nums2合并到nums1中,并递增排序,只允许开辟常量空间!!

    给你两个按递增顺序排列的整数数组 nums1 和 nums2 另有两个整数 m 和 n 分别表示 nums1 和 nums2 中的元素数目 请你合并 nums2 到 nums1 中 使合并后的数组同样按 递增顺序 排列 只允许开辟常量空间
  • 解决 Spring Cloud 部分版本,使用 nacos 做配置中心,报 No spring.config.import property has been defined 的问题

    报错信息如下 Description No spring config import property has been defined Spring 官方给出的解决方案如下 Add a spring config import nacos
  • Excel文件读取和生成_模板方法模式&建造者模式&反射

    一 需求说明 系统中经常有读取各种不同表头excel的需求 如根据用户上传的数据来实现某种功能的批量操作 我们通常会根据读取的内容把数据放入不同的实体中 形成List
  • java在注解中绑定方法参数的解决方案

    我们有这样子的需求 需要记录用户操作某个方法的信息并记录到日志里面 例如 用户在保存和更新任务的时候 我们需要记录下用户的ip 具体是保存还是更新 调用的是哪个方法 保存和更新的任务名称以及操作是否成功 这里最好的技术就是spring ao
  • dll、so库转Java代码

    dll so库转Java代码 下载jar JNA代码生成 参数说明 生成的maven项目代码结构如下 众所周知 java程序如果要调用动态库 so dll 的函数 最传统方式是使用JNI技术 用JNI写java调用接口代码是非常痛苦的 调试
  • Java private方法访问

    大家知道 Java中private修饰符修饰的方法或属性 只有在该类内可以访问 其他类均无法访问 事实真的是这样吗 下面一个例子可以实现访问一个类中的private方法 原理是通过Java的反射机制 感觉Java反射机制在这点似乎不太安全
  • Linux下JDK安装及配置 (tar.gz版)

    安装环境 Linux JDK安装 tar gz为解压后就可以使用的版本 这里我将使用jdk 8u65 linux x64 tar gz版 安装到 usr java 下 步骤一 将文件jdk 8u65 linux x64 gz移动到 usr
  • spring boot 启动报错,找不到DataSource

    报错信息如下 16 39 11 372 1653 main WARN o s b c e AnnotationConfigEmbeddedWebApplicationContext AbstractApplicationContext ja
  • Springboot +Flowable,DataObject的使用方式

    一 简介 在 Flowable 流程图的绘制过程中 可以编写一个名为 dataObject 数据对象 的元素 这个元素可以指定变量的 id 名称以及数据类型等各种属性 并且在流程实例启动的时候 会自动将 dataObject 元素的信息转换
  • JDK的下载与安装详细解释

    JDK的下载与安装 一 JDK下载 进入Oracle官网 https www oracle com index html 打开后我们通过选项卡找到Downloads 操作如下界面 接下来我们找到Deverloper Downloads中的J
  • Java复习:IO流

    File类的使用 IO流原理及流的分类 1 I O是Input Output的缩写 I O技术是非常实用的技术 用于 处理设备之间的数据传输 如读 写文件 网络通讯等 2 Java程序中 对于数据的输入 输出操作以 流 stream 的 方
  • JavaWeb图表插件的小研究

    背景 最近的一个项目中 对数据的统计分析有很大的要求 这就要求有一款很强大的报表 图表插件 因此 组长给分了任务 让我们各自去研究不同的图表插件 用了一两天的时间 对java这块的图表插件做了一个简单的研究 java方向的图报表还是有很多很
  • mycat 分片规则-枚举分片-hash-int

    为方便测试 本实例在以下案例中测试https blog csdn net qq 41712271 article details 114984855 spm 1001 2014 3001 5501 通过在配置文件中配置可能的枚举值 指定数据
  • Hibernate复合主键的注解

    最近做项目用到了Hibernate框架 采用了纯面向对象的思想 使用ORM映射实体 在开发中 实体中出现了复合主键 不再是单一的属性作主键 由于采用了注解的方式 就不再使用xml文件进行配置了 而是直接在实体中进行注释 Hibernate注
  • ShardingJDBC数据库中间件学习笔记

    简介 官网地址 https shardingsphere apache org index zh html Apache ShardingSphere 产品定位为 Database Plus 旨在构建多模数据库上层的标准和生态 它关注如何充
  • Mycat 学习小结

    Mycat 学习小结 Mycat 是什么 Mycat 是一个彻底开源的面向企业应用开发的大数据库集群 支持事务 ACID 是可以替代Mysql 的加强版数据库 Mycat被视为 Mysql 集群的企业级数据库 用来替代昂贵的 Oracle

随机推荐

  • 我所理解的设计模式(C++实现)——适配器模式(Adapter Pattern)

    解决的问题 适配器模式把一个类的接口变换成客户端所期待的另一种接口 从而使原本接口不匹配而无法在一起工作的两个类能够在一起工作 比如说我的hp笔记本 美国产品 人家美国的电压是110V的 而我们中国的电压是220V 要在中国能使用 必须找个
  • Csdn爬虫自动评论

    前言 因为发现自己的csdn博客被机器人自动评论 这些博客很多都是对别人进行评论 然后别人就有可能回访或者点赞关注等等 基本上总积分非常高 为了覆盖掉这些机器评论 本篇主要是实现java爬虫对自己的博客所有文章进行自动评论 一 准备分析工作
  • vscode插件一draw.io绘图工具

    vscode 插件推荐一draw io 日常工作中需要制作时序图 流程图等 这里推荐的是vscode的插件中draw io 先自行在官网下载vscode https code visualstudio com 安装后打开vscode 如图在
  • c++ map 析构函数_C++核心准则C.36:析构函数不应该失败

    C 36 A destructor may not fail析构函数不应该失败 Reason 原因 In general we do not know how to write error free code if a destructor
  • Crazyswarm framework

    Crazyswarm framework 1 Tools Crazyfile Chooser Simulation sim flag 2 软件架构 使用方法 参考论文 应用的论文 3使用教程 参考网页 配置文件 example 基础 轨迹生
  • k8s 部署dubbo

    docker pull chenchuxin dubbo admin docker tag chenchuxin dubbo admin hub redblue ai com dubbo admin cat lt lt END gt dub
  • sql 数据查询返回值问题

    1 create 返回值 若发生错误 返回false 成功则返回创建的数据 2 add 返回值 addAll 返回值 成功 id或true 失败 false 成功 如果主键是自动增长型 返回值为新增记录Id值 addAll为最大值 否则返回
  • Microsoft Store打不开的解决方案

    Microsoft Store无法打开的解决方案 一 方案一 1 按Win i键 点击 网络和internet 2 转到 代理 关闭 使用代理服务器 3 尝试打开 microsoft store 二 方案二 1 按Win R键 输入inet
  • PHP请求微信接口获取用户电话号

    前言情景剧 业务场景是为了在用户登录的时候判断其是否已经成功注册 没有成功注册的话就将获取到的openid和session key加密后作为token传给前端 然后让前台通过组件获得code之后连着token一起传给后端 后端拿着code再
  • 服务机器人串口配置

    服务机器人串口配置 1 确定串口号 2 查看串口号对应的kernels 3 修改rules 1 确定串口号 如下图 以雷达为了例子 插拔之后 可知串口号为 ttyUSB1 2 查看串口号对应的kernels 3 修改rules 更改KERN
  • 搭建Zerotier内网穿透网络及彻底删除zerotier方法

    搭建Zerotier内网穿透网络 1 注册zerotier账号并登录https my zerotier com 2 访问https my zerotier com network 点击Create a Network 之后再Your Net
  • Java 【基础】 模拟log4j,输出当前语句的行数,和类路径

    一直很好奇log4j 是如何获取到当前输出的行数的 今天学到了 原来是堆栈跟踪 把代码贴出来给大家看一下 模拟log4j public static void debug String string System out println 调
  • declare-styleable的使用

    declare styleable是给自定义控件添加自定义属性用的 可以定义多种类型 int Boolean string等等 参考链接
  • 正则表达式去除冗长代码,tppabs

    利用正则表达式去除网页中的冗长没用代码 1 btppabs h 2 tpa http 3 清除css内的 tpa http s gif png jpg 4 tpa
  • org.springframework.http.converter.HttpMessageNotWritableException

    这里说无法将 对应对象转换 原因在于没有导入json 依赖 所以无法转换 org springframework http converter HttpMessageNotWritableException No converter fou
  • SD/MMC存储器启动方案在SoC中的设计与实现

    原文地址 http blog csdn net allen6268198 article details 7745208 引言 SD MMC存储器以其成本低廉 存储容量大 性能优良 安全性高等特点越来越广泛地应用于便携式设备和家用电子设备
  • Android Studio中设置鼠标悬停显示文档提示方法

    有些小伙伴在开发的过程中可能会习惯使用文档注释 那么在Android Studio中如何设置启用文档注释呢 1 首先打开Android Studio 点击菜单栏中的 File选项菜单 点击如下的Settings 进行设置 2 点击Edito
  • Windows10系统下swin-transformer目标检测环境搭建

    Swin Transformer Object Detection环境搭建 前言 1 环境准备 2 虚拟环境创建 3 安装pytorch 4 安装mmcv 5 安装mmdet 6 安装apex 7 测试 前言 刚搞明白了分类 又进来了检测这
  • 基于 Linux 安装 web 服务及基本配置

    在网络环境中 web 服务无疑是最为流行的应用系统 有了 web 站点 企业可以充分展示自己的作品 宣传企业形象 web 站点还为企业提供了与客户交流 电子商务交易平台等丰富的网络应用 Apache HTTP Server 是 ASF 旗下
  • mycat实现mysql读写分离,热切换,集群

    在互联网时代 实现mysql读写分离 热切换 集群能大大提高mysql数据库访问压力 防止数据丢失 使用mycat能帮我们实现这些 我们要实现的是这种架构 1 Mycat能实现数据库的垂直切分和水平切分 这里用户写数据的时候 通过mycat