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.hqwc.cn/news/265665.html

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

相关文章

pycharm手动安装包

1.下载对应的包 TTS PyPI 2.手动解压&#xff0c;找到文件放到pycharm对应项目的lib文件夹中 以TTS包为例&#xff0c;找到下载并解压的包中的2个文件&#xff0c;一个名称一个info结尾 3.放到项目的lib文件夹中 eg&#xff1a;路径&#xff1b;C:\doc\myProject\speaker\venv…

工业级路由器在货运物流仓储管理中的应用

工业级路由器在货运物流仓储管理中扮演着重要的角色&#xff0c;为整个物流系统提供了稳定可靠的网络连接和数据传输支持。下面将从以下几个方面介绍工业级路由器在货运物流仓储管理中的应用。 实时监控和追踪&#xff1a;工业级路由器通过与各种传感器、监控设备和物联网设备的…

亚马逊云科技Amazon Bedrock,现推出更多模型选择和全新强大功能

亚马逊云科技在re:Invent 2023上宣布推出Amazon Bedrock更多模型选择和强大功能&#xff0c;帮助客户更轻松地构建和规模化针对其业务定制的生成式AI应用程序。 Amazon Bedrock是一项全面托管的服务&#xff0c;用户可轻松访问来自AI21 Labs、Anthropic、Cohere、Meta、Stabili…

Word插件-好用的插件-一键标记-大珩助手

一键标记 在审阅重要文件时&#xff0c;需要将重点的信息标记出来&#xff0c;这些重点信息有一些具有相似性&#xff0c;比如甲方、地址、要求、必续等等&#xff0c;以避免遗漏重要内容&#xff0c;由此设计一个可一次标记多个关键字的标记工具 使用方法 关键字之间用逗号“…

PO模式在selenium自动化测试框架有什么好处

PO模式是在UI自动化测试过程当中使用非常频繁的一种设计模式&#xff0c;使用这种模式后&#xff0c;可以有效的提升代码的复用能力&#xff0c;并且让自动化测试代码维护起来更加方便。 PO模式的全称叫page object model&#xff08;POM&#xff09;&#xff0c;有时候叫做 p…

移动端原生实现列表列固定横向滚动功能

功能介绍&#xff1a; 在移动端开发中&#xff0c;会用到列表作为信息展示方式&#xff0c;一般希望上下滚动时&#xff0c;可以固定表头&#xff0c;左右滚动时&#xff0c;可以固定最左列。 需求&#xff1a; 1、列表可以使用数组循环遍历&#xff1b; 2、上下滚动时&…

快手商品采集API商品列表API商品详情数据API接口获取快手商品信息API

背景介绍 快手商城是快手平台上的一个电商购物频道&#xff0c;类似于淘宝、京东等商城&#xff0c;用户可以通过搜索或者快手App首页的一级入口进入。目前&#xff0c;快手商城正在招商中&#xff0c;今年双11期间&#xff0c;快手将力推短视频、直播间、店铺、商城这一全新的…

springboot整合通用Mapper入门

springboot整合通用Mapper入门 概述 通用 Mapper 是一个用于简化 MyBatis 操作的开发框架。它通过提供通用的 CRUD&#xff08;创建、读取、更新、删除&#xff09;方法&#xff0c;减少了开发者需要编写的重复代码。通用 Mapper 的一个著名的实现是 MyBatis Generator&#…

python基于ModBusTCP服务端的业务实现特定的client

python实现ModBusTCP协议的client是一件简单的事情&#xff0c;只要通过pymodbus、pyModbusTCP等模块都可以实现&#xff0c;本文采用pymodbus。但要基于ModBusTCP服务端的业务实现特定的client&#xff0c;那得看看服务端是否复杂。前面系列文章&#xff0c;我们学习了对服务端…

推荐几款常用Web自动化测试神器!

1、介绍 Web自动化测试在保证质量、提升效率、软件开发加速迭代上起到关键作用&#xff0c;它已经成为现代软件测试中不可或缺的一部分&#xff0c;今天给大家介绍推荐几款常用的Web自动化测试工具。 2、常用测试工具 常用的Web自动化测试工具包括&#xff1a; Selenium&am…

什么是双电机打包机?

我们都知道有的机器可能不只有一个电机&#xff0c;像我们公司最新生产的打包机&#xff0c;双电机打包机就是有两个电机&#xff0c;一个是退带电机&#xff0c;一个是进带电机&#xff0c;两个电机的好处就是更能提高包装速度&#xff0c;而且还能减少故障录&#xff0c;双电…

风控之Android设备指纹技术

标识性参数——Android ID、IMEI、OAID非标识性参数 非标识性参数——手机运营商 1 设备指纹 简单来讲&#xff0c;设备指纹是指用于标识出该设备的设备特征。可以是单一设备特征&#xff0c;也可以是多种设备特征的组合&#xff0c;以方便风控系统对设备的唯一性进行识别。…