mycat的部署及测试 (读写分离)

news2025/7/20 21:35:45

声明:读写分离并不局限于主从复制的服务器,主从复制的服务器只是给读写分离又添加了一层保护,本实验做的是没有主从复制的服务器,如果有需求 欢迎大家尝试 私信!

一.基本概念

Mycat 介绍:是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。Mycat是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),并且要求必须在 JDK7 以上的版本上运行。

mycat工作原理:基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

mycat就是一个中间商,它储存数据,mycat伪装mysql协议使用MySQL一样来使用mycat。

常见的中间件:

读写分离的好处

  1. 分担单台的服务器的负载。主从只负责各自的写和读,极大程度的缓解 X(写)锁和 S(读)锁争用。
  2. 从库可配置 myisam 引擎,提升查询性能以及节约系统开销。
  3. 增加冗余,提高可用性。

二.jdk的安装

1.官网下载jdk

Java Downloads | Oracle

2.解压到指定路径

[root@mycat ~]# mkdir /usr/local/java
[root@mycat ~]# tar -xf jdk-8u211-linux-x64.tar.gz -C  /usr/local/java

3.配置环境变量

[root@mycat ~]#vim /etc/profile
export PATH=/usr/local/java/bin:$PATH

4.使环境变量生效

[root@mycat ~]# source /etc/profile

5.查看java版本

[root@localhost ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

如果输入该命令,返回结果是三条信息,则证明jdk安装运行成功!

三、mycat的安装与配置

1、下载mycat

 http://dl.mycat.org.cn/

[root@mycat ~]# wget http://dl.mycat.org.cn/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz

2.解压到指定路径

[root@mycat ~]# tar -xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

3.修改配置文件

(1)了解mycat下的文件
[root@localhost mycat]# ls
bin  catlet  conf  lib  logs  tmlogs  version.txt

--bin:可执行命令

--conf:配置文件

--lib: 存放jar及其依赖包

--logs:日志信息

--tmlogs:临时日志

--version:版本信息

(2)修改配置文件

server.xml:定义用户以及系统相关变量,如端口等。其中用户信息是应用程序连接 mycat 的用户信息

[root@mycat ~]# vim /usr/local/mycat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
#用户和密码是应用程序连接到 MyCat 使用的.schemas 配置项所对应的值是逻辑数据库的名字,这个名字需要和后面 schema.xml 文件中配置的一致
<mycat:server xmlns:mycat="http://io.mycat/">
  <user name="root" defaultAccount="true">
                <property name="password">123456</property>
                <property name="schemas">TESTDB</property>
        </user>
 
</mycat:server>

schema.xml:逻辑库定义和表以及分片定义的配置文件

 
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
 
    #逻辑库名称,与server.xml的一致    不检查sql               最大连接数        数据库节点名称    
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
        </schema>
      # 此数据节点的名称             主机组               真实数据库名称
         <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="master1" url="master1:3306" user="mycat"
                                   password="Qianfeng@123">
                        <readHost host="slave1" url="slave1:3306" user="mycat" password="Qianfeng@123" />
                </writeHost>
                <writeHost host="master2" url="master2:3306" user="mycat"
                                   password="Qianfeng@123">
                        <readHost host="slave2" url="slave2:3306" user="mycat" password="Qianfeng@123" />
                </writeHost>
        </dataHost>
</mycat:schema>

 注意:
1)schema标签中的“name”的值和server.xml文件中user标签中的“schemas”值一样。
2)dataNode标签中的“database”为需要复制的数据库名称,服务器中必须有这个库。
3)dataHost标签中的“balance”和“switchType”。

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

switchType属性
-1表示不自动切换
1默认值,自动切换
2基于MySQL主从同步的状态决定是否切换-3基于MySQL galary cluster的切换机制(适合集群)

(3)启动mycat
#启动mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat start
Starting Mycat-server...
Mycat-server is already running.
 
#查看mycat是否启动
[root@mycat ~]# /usr/local/mycat/bin/mycat status
Mycat-server is running (38335).
[root@mycat ~]# ss -nplt
State       Recv-Q Send-Q       Local Address:Port                      Peer Address:Port              
LISTEN      0      1                127.0.0.1:32000                                *:*                   users:(("java",pid=38337,fd=4))
LISTEN      0      128              127.0.0.1:9000                                 *:*                   users:(("php-fpm",pid=1012,fd=5),("php-fpm",pid=1011,fd=5),("php-fpm",pid=1004,fd=7))
LISTEN      0      128                      *:80                                   *:*                   users:(("nginx",pid=951,fd=6),("nginx",pid=949,fd=6))
LISTEN      0      128                      *:22                                   *:*                   users:(("sshd",pid=941,fd=3))
LISTEN      0      100              127.0.0.1:25                                   *:*                   users:(("master",pid=1351,fd=13))
LISTEN      0      50                    [::]:1984                              [::]:*                   users:(("java",pid=38337,fd=58))
LISTEN      0      100                   [::]:8066                              [::]:*                   users:(("java",pid=38337,fd=87))
LISTEN      0      50                    [::]:37476                             [::]:*                   users:(("java",pid=38337,fd=57))
LISTEN      0      50                    [::]:46405                             [::]:*                   users:(("java",pid=38337,fd=60))
LISTEN      0      100                   [::]:9066                              [::]:*                   users:(("java",pid=38337,fd=83))
LISTEN      0      128                   [::]:22                                [::]:*                   users:(("sshd",pid=941,fd=4))
LISTEN      0      100                  [::1]:25                                [::]:*                   users:(("master",pid=1351,fd=14))
(4)在服务器上给用户授权
mysql> grant all on *.* to 'mycat'@'%' identified by 'Qianfeng@123';
(5)mycat起不来
mycat如果起不来,查看其错误日志发现报错 登录时间超时 
可以在mycat的conf文件下的wrapper文件里面添加这条命令,然后重启即可。

wrapper.startup.timeout=300

四、测试

1.测试客户端登录mycat

语法:mysql -u逻辑用户 -p逻辑密码 -hmycat服务器的主机地址 -P8806(mycat的端口)

                   与server.xml文件中user字节中的信息一致

[root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
 
mysql> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+
1 row in set (0.00 sec)

2、测试读写分离

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", 所有读请求随机的分发到 writerHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有,1.3 没有。
————————————————
版权声明:本文为CSDN博主「火腿炒馕」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2301_78315274/article/details/133735752

balance=0

所有读的信息都发送到master1上

(1)修改配置文件
[root@mycat conf]# vim schema.xml
 
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
(2)重启mycat
[root@mycat ~]# /usr/local/mycat/bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
(3)客户端登录mycat,并读取信息
[root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test1         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test1         |
+---------------+
1 row in set (0.00 sec)

balance=1

所有写发送到master1,所有读随机发送在master2,slave1,slave2上

(1)修改配置信息
[root@mycat conf]# vim schema.xml
 
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
(2) 重启mycat
[root@master ~]# /usr/local/mycat/bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
(3)客户端登录mycat,并查看信息 
[root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test4         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test3         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test2         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test4         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test3         |
+---------------+
1 row in set (0.00 sec)

balance=2

所有读的信息随机发送到master1,master2,slave1,slave2

(1)修改配置文件
[root@mycat conf]# vim schema.xml
 
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="2"
(2) 重启mycat
[root@localhost conf]# /usr/local/mycat/bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
(3)客户端登录mycat,并查看信息 
[root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test2         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test3         |
+---------------+
1 row in set (0.01 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test1         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test1         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test4         |
+---------------+
1 row in set (0.00 sec)

balance=3 

所有读的信息随机发送到slave1 ,slave2

(1)修改配置文件
[root@mycat conf]# vim schema.xml
 
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
(2)重启mycat
[root@localhost conf]# /usr/local/mycat/bin/mycat restart
Stopping Mycat-server...
Stopped Mycat-server.
Starting Mycat-server...
(3)客户端登录mycat,并查看信息
[root@master ~]# mysql -uroot -p123456 -h10.36.192.16 -P8066
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test3         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test3         |
+---------------+
1 row in set (0.00 sec)
 
mysql> show tables;
+---------------+
| Tables_in_db1 |
+---------------+
| test4         |
+---------------+
1 row in set (0.00 sec)

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

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

相关文章

C++<内存管理>

​ ​ ✨前言✨ &#x1f393;作者&#xff1a;【 教主 】 &#x1f4dc;文章推荐&#xff1a; ☕博主水平有限&#xff0c;如有错误&#xff0c;恳请斧正。 &#x1f4cc;机会总是留给有准备的人&#xff0c;越努力&#xff0c;越幸运&#xff01; &#x1f4a6;导航助手&…

会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局

flex弹性布局轮播图后台数据获取及组件使用&#xff08;后台数据交互mockjs&#xff09;首页布局 1.flex弹性布局 什么是flex布局&#xff1f; 1) Flex是Flexible Box的缩写&#xff0c;意为”弹性布局”&#xff0c;用来为盒状模型提供最大的灵活性。 2) 任何一个容器都可以指…

Nginx的安装——Linux环境

1、安装gcc nginx源码的编译依赖于gcc 环境&#xff0c;如果没有 gcc 环境&#xff0c;则需要安装&#xff1a; yum install gcc-c 2、PCRE pcre-devel 安装 PCRE(Perl Compatible Regular Expressions) 是一个Perl库&#xff0c;包括 perl 兼容的正则表达式库。nginx 的 htt…

The given SOAPAction http__xxxxx_xx does not match an operation

这是在客户端调用服务端接口时报出的错误&#xff0c;主要是客户端在调用时设置了SOAPAction&#xff0c;参考如下&#xff1a; 解决方案 在注解WebMethod() 中加上action注解&#xff0c;设置上一模一样的SOAPAction即可&#xff0c;如下&#xff1a; WebMethod(action &qu…

全面超越AutoGPT,面壁智能联合清华NLP实验室开源大模型「超级英雄」XAgent

近日&#xff0c;国内领先的人工智能大模型公司面壁智能又放大招&#xff0c;联合清华大学 NLP 实验室共同研发并推出大模型「超级英雄」——XAgent。 通过任务测试&#xff0c;XAgent 在真实复杂任务的处理能力已全面超越 AutoGPT。 现已在 GitHub 正式开源&#xff0c;地址 …

基于下垂控制的孤岛双机并联逆变器环流抑制MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 在实际应用中逆变器都是并联运行的,但是逆变器的并联运行也存在不少问题,由于线路阻抗差异、各个逆变器输出端瞬时电压幅值不同等,都容易导致环流的出现。环流会导致逆变器损耗增加,从而影响微电网的输出效率…

两个步骤轻松搞定批量合并视频

你是否曾经有过批量合并视频的需求&#xff0c;但是却苦于不知道如何下手&#xff1f;今天&#xff0c;我将为你介绍一个简单易行的方法&#xff0c;只需两个步骤&#xff0c;让你轻松实现批量合并视频。 第一步&#xff1a;下载并打开固乔智剪软件 首先&#xff0c;你需要下载…

【前端学习】—JS判断数据类型的方式有哪些(八)

【前端学习】—JS判断数据类型的方式有哪些&#xff08;八&#xff09; 一、JS中判断数据类型的场景 二、JS中有哪些数据类型 三、JS判断数据类型的方式有哪些 const arr[]; const object{};const number1; const stringstring;//typeofconst typetypeof arr; console.log(type…

01认识微服务

一、微服务架构演变 1.单体架构 将所有的功能集中在一个项目开发&#xff0c;打成一个包部署。优点架构简单&#xff0c;部署成本低。缺点耦合度高&#xff0c;不利于大型项目的开发和维护 2.分布式架构 根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立的项目…

JavaScript基础知识14——运算符:逻辑运算符,运算符优先级

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 一、逻辑运算符 1、概念&#xff1a;在程序中用来连接多个比较条件时候使用的符号。 2、应用场景&#xff1a;在程序中用来连接多个比较条件时候使用。 3、逻辑运算符符号&#xff1a; 4、代码演示逻辑运算符的使用…

opensl学习——base16编码解码、base64编码解码、ASCII码表、扩展ASCII码

文章目录 ASCII表概述base家族简单说明 Hex(十六进制)编码、Base32编码、Base64编码、base256编码base16编码与解码base64编码概述转换过程不足 3 字节处理方法例子一,不足3字节&#xff0c;只有一个字节例子二,不足3字节&#xff0c;只有两个字节 base64示例代码1代码分析 acl…

基于AT89C51流水花样灯proteus仿真设计

一、仿真原理图&#xff1a; 二、仿真效果图&#xff1a; 三、仿真工程&#xff1a; c51单片机流水灯花样灯proteus仿真设计资源-CSDN文库

【前端学习】—给定数组求最大值(七)

【前端学习】—给定数组求最大值(七) 一、给定数组求最大值场景 二、怎样对给定的数组求最大值 Math.max数组的reduce函数数组的sort函数//Math.maxconst arr=[1,2,3,4]; const res=Math.max(

Linux UWB Stack实现——MCPS通道访问

在前文MCPS相关介绍的基础之上&#xff0c;对UWB协议栈中实现访问控制相关数据结构进行介绍&#xff0c;并介绍了其载体struct mcps802154_local&#xff0c;保存了MCPS的私有数据。 1.关于MCPS802154_CA 关于IEEE 802.15.4 MAC公共部分子层&#xff08;MAC common part subla…

【k8s总结】

资源下载&#xff1a;http://www.ziyuanwang.online/912.html Kubernetes(K8s) 一、Openstack&VM 1、认识虚拟化 1.1、什么是虚拟化 在计算机中&#xff0c;虚拟化&#xff08;英语&#xff1a;Virtualization&#xff09;是一种资源管理技术&#xff0c;是将计算机的…

GB/T 41510-2022 起重机械安全评估规范 通用要求 摘要

在线预览|GB/T 41510-2022http://c.gb688.cn/bzgk/gb/showGb?typeonline&hcno696806EC48F4105CEF7479EB32C80C9E 知识点&#xff1a; 安全等级定义&#xff0c;设计寿命&#xff0c;剩余寿命&#xff0c;使用寿命。 标准附录有应力的具体解算演示。

剧本杀公众号系统开发在线组队开团多玩法

一款针对剧本杀行业开发的公众号系统&#xff0c;配置到公众号里即可轻松简单运营起来。 核心功能&#xff1a; 1、在线开本是特色&#xff0c;直接线上玩起。 2、支持多商户入驻哦、后台会同步进行控制。 3、前台剧本的控制。 4、多玩法模式&#xff0c;满足剧本杀爱好者…

AR智能眼镜主板设计方案_AR眼镜PCB板设计

AR智能眼镜是一种采用先进技术的创新产品&#xff0c;具备强大的功能和性能。它采用了MTK8788八核 12nm低功耗硬件平台&#xff0c;搭载IMG GE830063OMhz或以上的GPU&#xff0c;并运行Android 11.0或以上的操作系统。该眼镜支持光波导1080P显示和LVDS接口自由曲面显示&#xf…

SW2303 Type-C 口/Type-A 口快充协议芯片 支持多种快充协议

SW2303 是一款高集成度的 Type-C 口/Type-A 口快充协议芯片&#xff0c;支持 PD、QC、FCP、高低压 SCP、AFC、SFCP 以及 PE 等主流快充协议&#xff0c;支持光反馈和 FB 反馈两种工作模式SW2303 集成了 CV/CC 控制环路&#xff0c;Type-C 接口逻辑&#xff0c;快充协议控制器&a…

独家分析:安卓“Janus”漏洞的产生原理及利用过程

*本文中涉及到的相关漏洞已报送厂商并得到修复&#xff0c;本文仅限技术研究与讨论&#xff0c;严禁用于非法用途&#xff0c;否则产生的一切后果自行承担。 近日&#xff0c;Google在12月发布的安卓系统安全公告中披露了一个名为“Janus”安卓漏洞&#xff08;漏洞编号&#…