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
在这里插入图片描述
手动使得主从的数据不一致
在这里插入图片描述
验证读写分离
在这里插入图片描述
读的是从节点的数据
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle(2-15)RMAN Incomplete Recovery

文章目录 一、基础知识1、The Procedure 不完全恢复步骤2、UNTIL TIME Example 基于时间的恢复3、UNTIL SEOUENCE Example 基于序列的恢复 二、基础操作1、不完全恢复准备工作2、不完全恢复开始恢复 RMAN Incomplete Recovery RMAN的不完全恢复 目标&#xff1a; 使用“UNTIL T…

【开源】基于Vue和SpringBoot的计算机机房作业管理系统

项目编号&#xff1a; S 017 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S017&#xff0c;文末获取源码。} 项目编号&#xff1a;S017&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 登录注册模块2.2 课程管理模块2.3 课…

Linux基础指令(2)

今天我们继续来学我们有关于Linux的指令&#xff0c;今天的指令要比上次多多了。开始我们的学习吧。 man手册 先来看标题&#xff0c;手册我们第一时间想到的就是手册的查阅功能&#xff0c;我们都知道在我们上小学的时候&#xff0c;如果遇到不会的字&#xff0c;我们会通过…

《opencv实用探索·十六》opencv直方图计算calcHist函数解析

直方图理解&#xff1a; &#xff08;对于8位灰度图像亮度/灰度为(0-255)&#xff0c;12位灰度图像亮度/灰度为(0-4095)&#xff09; 以8位图像为例&#xff0c;亮度分为0到255共256个数值&#xff0c;数值越大&#xff0c;代表的亮度越高。其中0代表纯黑色的最暗区域&#xff…

微服务学习:Nacos配置中心

先打开Nacos&#xff08;详见微服务学习&#xff1a;Nacos微服务架构中的服务注册、服务发现和动态配置&Nacos下载&#xff09; 1.环境隔离&#xff1a; 新建命名空间&#xff1a; 记住命名空间ID&#xff1a; c82496fb-237f-47f7-91ed-288a53a63324 再配置 就可达成环…

kube-prometheus+kube-thanos

背景 最近在做监控&#xff0c;选择了thanos架构&#xff0c;使用了kube-prometheuskube-thanos&#xff0c;这里记录一下搭建过程。 原理 我选择的是sidecar的方式&#xff0c;这张图画的很好&#xff0c;thanos就理解为多个prometheus的汇合点&#xff0c;当一个query发到t…

npm run build时提示vue/types/jsx.d.ts中的错误

解决方法一&#xff1a; 可能是因为vue版本过高引起的 我直接将package.json中vue以及vue-template-compiler的版本的前面^去掉&#xff0c;安装指定的版本 注意&#xff1a;vue和vue-template-compiler需要版本一致 参考链接&#xff1a;链接 解决方法二&#xff1a; 如果如…

LV.13 D2 开发板启动流程 学习笔记

一、开发板启动过程 EMMC&#xff1a;相当于电脑的外存&#xff0c;断电不丢失 开发板上电后首先运行SOC内部iROM中固化的代码(BL0)&#xff0c;这段代码先对基本的软硬件环境(时钟等...)进行初始化&#xff0c;然后再检测拨码开关位置获取启动方式&#xff0c;然后再将对应存储…

解决HTTP 429错误的Scrapy中间件配置

引言 在进行网络数据抓取时&#xff0c;经常会遇到HTTP 429错误&#xff0c;表示请求速率已超出API限制。为避免封禁或限制访问&#xff0c;需要调整Scrapy的请求速率&#xff0c;以在不触发HTTP 429错误的情况下完成数据抓取。针对这一问题&#xff0c;可使用Scrapy的AutoThr…

3DMax物理画笔物体填充放置绘制画笔插件安装使用方法

3DMax物理画笔物体填充放置绘制画笔插件&#xff0c;允许您使用笔刷以非常自然的方式用物品快速填充场景&#xff0c;并使用刚体模拟自动放置它们。 无论你是从事建筑、游戏电影还是商业。。。等等&#xff0c;你经常需要用一些物品为你的场景添加细节。手工放置它们是乏味的&…

采集数据更快捷,轻松生成调查问卷二维码

现在用二维码的方式来采集用户的数据&#xff0c;是现在很常用的一种统计数据的手段&#xff0c;这种方法更加简单快捷做好数据统计&#xff0c;那么表单类型的二维码能如何快速生成呢&#xff1f;下面来教大家在线二维码生成器的使用方法&#xff0c;能够用简单的步骤快速制作…

最长子字符串的长度 (一) - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 给你一个字符串 s&#xff0c;字符串s首尾相连成一个环形&#xff0c;请你在环中找出字符出现了偶数次最长子字符串的长度。 输入描述 输入是一串小写字母组成的…

玩转大数据14:分布式计算框架的选择与比较

1. 引言 随着大数据时代的到来&#xff0c;越来越多的企业和组织需要处理海量数据。分布式计算框架提供了一种有效的方式来解决大数据处理的问题。分布式计算框架将计算任务分解成多个子任务&#xff0c;并在多个节点上并行执行&#xff0c;从而提高计算效率。 2. 分布式计算…

低代码(low code)开发平台,我选JNPF

近年来&#xff0c;低代码开发技术正以迅猛的步伐崭露头角&#xff0c;成为数字化转型浪潮下的重要工具。据 Gartner 预测&#xff0c;到 2025 年&#xff0c;低代码技术将占据 70% 的新应用开发份额&#xff0c;引领着企业应用开发的新趋势。然而&#xff0c;随之而来的是市场…

传音荣获2023首届全国人工智能应用场景创新挑战赛“智能遥感专项赛”三等奖

11月26日&#xff0c;2023首届全国人工智能应用场景创新挑战赛“智能遥感专项赛”在北京圆满落幕。传音参赛项目《传音智慧应用平台产业化》凭借在技术攻关、社会效益和经济效益等多方面的突出优势荣获“智能遥感专项赛”三等奖。 本次竞赛以“场景驱动数智强国”为主题&#…

张正友相机标定法原理与实现

张正友相机标定法是张正友教授1998年提出的单平面棋盘格的相机标定方法。传统标定法的标定板是需要三维的,需要非常精确,这很难制作,而张正友教授提出的方法介于传统标定法和自标定法之间,但克服了传统标定法需要的高精度标定物的缺点,而仅需使用一个打印出来的棋盘格就可…

智慧储能数字孪生,引领新能源革命

随着社会对清洁能源的需求不断增加&#xff0c;智能储能技术成为能源转型的关键驱动力。在这一领域中&#xff0c;数字孪生技术的应用为智慧储能带来了全新的可能性。数字孪生是指数字化、实时、可视化的模拟系统&#xff0c;通过复制现实世界中的对象或过程&#xff0c;为智能…

【多线程】Java中多线程的几种实现方式

多线程&#xff08;multithreading&#xff09;是指在一个程序中同时执行多个不同的线程&#xff08;thread&#xff09;&#xff0c;每个线程都是程序的一部分&#xff0c;是独立的执行路径。相比于单线程程序&#xff0c;多线程程序可以更充分地利用计算机的多核心或多处理器…

一拎即走的轻薄云台投影,极米投影仪Z7X解锁观影新姿势

近年来&#xff0c;随着投影技术的不断提高以及大屏幕带来的加倍快乐&#xff0c;让投影仪成为了一种新的观影潮流。尤其是“去客厅化”的大背景下&#xff0c;年轻人几乎将目光都投向了投影仪&#xff0c;从而实现在家就能享受大屏观影的效果和体验。那么备受当下年轻消费者青…

全套的外贸出口业务流程,赶紧收藏起来吧

很多做外贸的小伙伴入行遇到的第一个问题就是对外贸业务流程的不熟悉&#xff0c;今天小易给大家整理了一份外贸业务全流程&#xff0c;从开发客户到售后服务一整套流程&#xff0c;一起来看看吧&#xff01; 目前做外贸开发客户的渠道一般有以下几种&#xff1a; 1、自建站、外…