mycat部署和配置读写分离(二)

说明:
MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

1. jdk1.8安装

详见jdk环境安装

2. Mysql安装

详见mysql8.0.11源码安装,实际使用的是mysql8.0.16

3. Mysql 主从配置

详见主从同步原理和mysql的主从同步详解

3.1 安装mycat服务

3.1.1 部署mycat
cd /root
wget http://dl.mycat.org.cn/1.6.7.6/20210303094759/Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz
tar -xf Mycat-server-1.6.7.6-release-20210303094759-linux.tar.gz -C /usr/local
cd /usr/local/mycat/conf
  • /usr/local/mycat/conf/server.xml:定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
  • /usr/local/mycat/conf/schema.xml:定义逻辑库,表、分片节点等内容。
  • /usr/local/mycat/conf/rule.xml:定义分片规则
    在这里插入图片描述
3.1.2 server.xml配置文件

server.xml文件跟读写分离策略关系不大,但是需要用此文件来配置连接MyCat的用户及权限等(关注user标签即可),因此在这里简单说明。

<user name="mycat" defaultAccount="true">  #通过mycat登录的用户名和密码<property name="password">123456</property><property name="schemas">mycatDB</property> <!-- #逻辑库,真实不存在的库,可以自定义修改,但一定要对应上,要不然就会报错 --><property name="defaultSchema">mycatDB</property>  <!-- #逻辑库,真实不存在的库,可以自定义修改 --><!-- 表级 DML 权限设置 --><!--            <privileges check="false"><schema name="TESTDB" dml="0110" >               #0000分表表示数据库的增删改查,0比表示关闭,1表示打开,如果配置 name需和前面定义的一致<table name="tb01" dml="0000"></table>   #0000分表表示数据表的增删改查,0比表示关闭,1表示打开<table name="tb02" dml="1111"></table></schema></privileges>           --></user><user name="user">  <!-- 这个账号只能读不能写,见下面的定义readOnly --><property name="password">user</property><property name="schemas">mycatDB</property><property name="readOnly">true</property><property name="defaultSchema">mycatDB</property>
</user>

说明:

  • server.xml文件里登录mycat的用户名和密码可以任意定义,这个账号和密码是为客户机登录mycat时使用的账号信息。
  • 逻辑库名(如上面的mycatDB,也就是登录mycat后显示的库名,切换这个库之后,显示的就是代理的真实mysql数据库的表)要在schema.xml里面也定义,否则会导致mycat服务启动失败!
  • 这里只定义了一个标签,所以把多余的都注释了。如果定义多个标签,即设置多个连接mycat的用户名和密码,那么就需要在schema.xml文件中定义多个对应的库!
3.1.3 schema.xml配置文件

schema.xml是最主要的配置项,此文件关联mysql读写分离策略!读写分离、分库分表策略、分片节点都是在此文件中配置的!MyCat作为中间件,它只是一个代理,本身并不进行数据存储,需要连接后端的MySQL物理服务器,此文件就是用来连接MySQL服务器的!

schema.xml文件分为三部分,分别时schema、dataNode、dataHost

  • schema
<schema name="mycatDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">  <!-- 其中name要和server.xml中定义的逻辑看必须一致;checkSQLschema 表示是否检测语法,一般不需要,因为要连接多个数据库,语法不一样;sqlMaxLimit 每个sql语句最多返回100条--><!-- 如果不进行分库分表,下面的配置可以不用管,注释即可 --><!-- auto sharding by id (long) --><!--splitTableNames 启用<table name 属性使用逗号分割配置多个表,即多个表使用这个配置--><!--    <table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>  --><!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"/> -->
</schema>
  • dataNode
<!-- dataNode用于配置物理数据库的名称,name可以自定义;dataHost自定义,但是需要和后面的dataHost有对应关系;database是真实存在的库 -->
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> -->
  • dataHost
<!-- dataHost 是用于配置读写分离的,name 自定义,但需要和dataNode中的dataHost完全一致;maxCon和minCon 表示最大最小连接数量;balance表示负载均衡策略;writeType已废弃,无需关注;dbType是mycat连接数据库的类型;dbDriver指数据库的驱动类型(如果dbType配的是Oracle,dbDriver则是jdbc);switchType 配置故障切换类型,需要配合下面的心跳机制heartbeat;slaveThreshold 指的是从节点的数量--><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat>  <!-- 心跳sql语句,需要配置故障切换类型 --><!-- can have multi write hosts --><!-- 写节点的配置:host 自定义即可;url 数据库的url连接地址;user 和 password指访问这个库的用户名和密码;如果是一主一从就配置一个writeHost和一个readHost,一主多从>就配置一个writeHost和多个readHost,多主多从就配置多个writeHost和多个readHost --><writeHost host="hostM1" url="localhost:3306" user="root"password="123456"><!-- can have multi read hosts --><!-- 读节点的配置: host 自定义即可;url 数据库的url连接地址;user 和 password指访问这个库的用户名和密码 --><readHost host="hostS1" url="localhost:3316" user="root" password="123456" /></writeHost><!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</dataHost>
3.1.4 标签属性

Balance属性

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

writeType属性(已废弃,直接跳过)

  • writeType=“0”:所有写操作发送到配置的第一个
    writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties
    .
  • writeType=“1”:所有写操作都随机的发送到配置的writeHost。
  • writeType=“2”:没实现。

switchType 属性,主从切换(双主failover)

  • switchType=“-1”:不自动切换
  • switchType=“1”:默认值,自动切换
  • switchType=“2”:基于MySQL主从同步的状态来决定是否切换。需修改heartbeat语句(即心跳语句):show slave status
  • switchType=“3”:基于Mysql Galera
    Cluster(集群多节点复制)的切换机制。需修改heartbeat语句(即心跳语句):show status like ‘wsrep%’

dbType属性
指定后端连接的数据库类型,目前支持二进制的mysql协议,还有其他使用JDBC连接的数据库。例如:mongodb、oracle、spark等。

dbDriver属性
指定连接后端数据库使用的Driver,目前可选的值有native和JDBC。

  • native
    使用native的话,因为这个值执行的是二进制的mysql协议,所以可以使用mysql和maridb。
  • JDBC
    其他类型的数据库则需要使用JDBC驱动来支持。从1.6版本开始支持postgresql的native原始协议。
    如果使用JDBC的话需要将符合JDBC 4标准的驱动JAR包放到MYCAT\lib目录下,并检查驱动JAR包中包括如下目录结构的文件:META-INF\services\java.sql.Driver。在这个文件内写上具体的Driver类名,例如:com.mysql.jdbc.Driver。
3.1.5 读写分离配置

cat server.xml

...
...
...<user name="mycat" defaultAccount="true"><property name="password">mycat123</property><property name="schemas">mycatDB</property><property name="defaultSchema">mycatDB</property></user>
...
...
...

在这里插入图片描述
cat schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="mycatDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema><dataNode name="dn1" dataHost="localhost1" database="external_service" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="3" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>show slave status</heartbeat><writeHost host="hostM1" url="10.99.200.110:3306" user="dba" password="dba110"><readHost host="hostS1" url="10.99.200.111:3306" user="dba" password="dba111" /></writeHost></dataHost>
</mycat:schema>

在这里插入图片描述

3.1.6 启动服务

修改mycat的启动内存(/usr/local/mycat/conf/wrapper.conf)
在这里插入图片描述
启动方式

cd /usr/local/mycat/bin 
./mycat console|stop|start|restart|dump    #前台启动|停止|后台启动|导入

登录验证
主从同步ok
在这里插入图片描述
手动使得主从的数据不一致
在这里插入图片描述
验证读写分离
在这里插入图片描述
读的是从节点的数据
在这里插入图片描述

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

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

相关文章

【lesson11】数据类型之string类型

文章目录 数据类型分类string类型set类型测试 enum类型测试 string类型的内容查找找所有女生&#xff08;enum中&#xff09;找爱好有游泳的人&#xff08;set中&#xff09;找到爱好中有足球和篮球的人 数据类型分类 string类型 set类型 说明&#xff1a; set&#xff1a;集…

SL9008 3.6-60V输入 LED降压恒流芯片 内置MOS管 带PWM调光

SL9008是一款内置MOS管、具有PWM调光功能的LED降压恒流芯片&#xff0c;适用于3.6-60V的输入电压范围。它采用了先进的电路设计&#xff0c;确保了高效率和长寿命&#xff0c;同时具有宽电压输入范围和优异的负载调整率。 SL9008的主要特点包括&#xff1a; 1. 宽输入电压范围&…

HarmonyOS4.0开发应用——【ArkUI组件使用】

ArkUI组件使用 这里会详细演示以下组件使用: ImageTextTextInputButtonSliderColumn&&RowList自定义组件以及相关函数使用 Image 可以是网络图片、可以是本地图片、也可以是像素图 Image("https://ts1.cn.mm.bing.net/th?idOIP-C.cYA-_PINA-ND9OeBaolDTwHaHa&…

CLIP在Github上的使用教程

CLIP的github链接&#xff1a;https://github.com/openai/CLIP CLIP Blog&#xff0c;Paper&#xff0c;Model Card&#xff0c;Colab CLIP&#xff08;对比语言-图像预训练&#xff09;是一个在各种&#xff08;图像、文本&#xff09;对上进行训练的神经网络。可以用自然语…

鸿蒙HarmonyOS(ArkTS)语法 声明变量及注意事项

好 今天我们来看一个基础的harmonyOS语法 变量声明 这里 我们还是用 ArkTS项目 我们声明变量的语法并不是ArkTS的 而是 javaScript 和 TypeScript的 可以看一下下面一张图 js是最初弱类型语言 于是TS作为js的副类 是一种更严谨的数据限定语法 而ArkTS 是TS的改良版 其实我们…

一篇文章教你快速弄懂 web自动化测试中的三种等待方式

前言 现在的网页很多都是动态加载的&#xff0c;如果页面的内容发生了改变&#xff0c;就需要时间来渲染。在咱们做web自动化测试的时候&#xff0c;由于代码是自动执行的&#xff0c;代码在执行的时候&#xff0c;有可能上一步操作而加载的元素还没加载出来&#xff0c;就会报…

配置本地端口镜像示例(1:1)

本地端口镜像简介 本地端口镜像是指观察端口与监控设备直接相连&#xff0c;观察端口直接将镜像端口复制来的报文转发到与其相连的监控设备进行故障定位和业务监测。 配置注意事项 观察端口专门用于镜像报文的转发&#xff0c;因此不要在上面配置其他业务&#xff0c;防止镜像…

建筑学VR虚拟仿真情景实训教学

首先&#xff0c;建筑学VR虚拟仿真情景实训教学为建筑学专业的学生提供了一个身临其境的学习环境。通过使用VR仿真技术&#xff0c;学生可以在虚拟环境中观察和理解建筑结构、材料、设计以及施工等方面的知识。这种教学方法不仅能帮助学生更直观地理解复杂的建筑理论&#xff0…

记录 | ubuntu源码编译安装/更新boost版本

一、卸载当前的版本 1、查看当前安装的boost版本 dpkg -S /usr/include/boost/version.hpp通过上面的命令&#xff0c;你就可以发现boost的版本了&#xff0c;查看结果可能如下&#xff1a; libboost1.54-dev: /usr/include/boost/version.hpp 2、删除当前安装的boost sudo …

记录 | 使用samba将ubuntu文件夹映射到windows实现共享文件夹

一、ubuntu配置 1. 安装 samba samba 是在 Linux 和 UNIX 系统上实现 SMB 协议的一个免费软件&#xff0c;由服务器及客户端程序构成。SMB&#xff08;Server Messages Block&#xff0c;信息服务块&#xff09;是一种在局域网上共享文件和打印机的一种通信协议。 sudo apt-…

Excel COUNT类函数使用

目录 一. COUNT二. COUNTA三. COUNTBLANK四. COUNTIF五. COUNTIFS 一. COUNT ⏹用于计算指定范围内包含数字的单元格数量。 基本语法 COUNT(value1, [value2], ...)✅统计A2到A7所有数字单元格的数量 ✅统计A2到A7&#xff0c;B2到B7的所有数字单元格的数量 二. COUNTA ⏹计…

大数据分析与应用实验任务十一

大数据分析与应用实验任务十一 实验目的 通过实验掌握spark Streaming相关对象的创建方法&#xff1b; 熟悉spark Streaming对文件流、套接字流和RDD队列流的数据接收处理方法&#xff1b; 熟悉spark Streaming的转换操作&#xff0c;包括无状态和有状态转换。 熟悉spark S…

Linux 驱动开发需要掌握哪些编程语言和技术?

Linux 驱动开发需要掌握哪些编程语言和技术&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「Linux从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xf…

1. mycat入门

1、mycat介绍 Mycat 是一个开源的分布式数据库系统&#xff0c;但是由于真正的数据库需要存储引擎&#xff0c;而 Mycat 并没有存 储引擎&#xff0c;所以并不是完全意义的分布式数据库系统。MyCat是目前最流行的基于Java语言编写的数据库中间件&#xff0c;也可以理解为是数据…

鸿蒙HarmonyOS4.0 入门与实战

一、开发准备: 熟悉鸿蒙官网安装DevEco Studio熟悉鸿蒙官网 HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 应用设计相关资源: 开发相关资源: 例如开发工具 DevEco Studio 的下载 应用发布: 开发文档:

LeetCode 1631. 最小体力消耗路径:广度优先搜索BFS

【LetMeFly】1631.最小体力消耗路径&#xff1a;广度优先搜索BFS 力扣题目链接&#xff1a;https://leetcode.cn/problems/path-with-minimum-effort/ 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights &#xff0c;其中 heights[row][col] 表示格子 (ro…

视频如何提取文字?这四个方法一键提取视频文案

视频如何提取文字&#xff1f;你用过哪些视频提取工具&#xff1f;视频转文字工具&#xff0c;又称为语音识别软件&#xff0c;是一款能够将视频中的语音或对话转化为文字的实用工具。它运用了尖端的声音识别和语言理解技术&#xff0c;能精准地捕捉视频中的音频&#xff0c;并…

弧形导轨的工作原理

弧形导轨是一种能够将物体沿着弧形轨道运动的装置&#xff0c;它由个弧形轨道和沿着轨道运动的物体组成&#xff0c;弧形导轨的工作原理是利用轨道的形状和物体的运动方式来实现运动&#xff0c;当物体处于轨道上时&#xff0c;它会受到轨道的引导&#xff0c;从而沿着轨道的弧…

Nginx正则表达式

目录 1.nginx常用的正则表达式 2.location location 大致可以分为三类 location 常用的匹配规则 location 优先级 location 示例说明 优先级总结 3.rewrite rewrite功能 rewrite跳转实现 rewrite执行顺序 语法格式 rewrite示例 实例1&#xff1a; 实例2&#xf…

【Python必做100题】之第六题(求圆的周长)

圆的周长公式&#xff1a;C 2 * pi * r 代码如下&#xff1a; pi 3.14 r float(input("请输入圆的半径&#xff1a;")) c 2 * pi *r print(f"圆的周长为{c}") 运行截图&#xff1a; 总结 1、圆周长的公式&#xff1a;C 2 * pi * r 2、输出结果注意…