MyCAT集群——MyCAT2如何配置读写分离

先搭载MySQL一主两从

192.168.20.110MyCAT
192.168.20.111Master
192.168.20.112slave1
192.168.20.113slave2

配置就不写了,比较基础,写一下步骤

1.进入mysql配置文件或者其子配置文件,添加server_id,开启gtidgtid_mode=ON,enforce-gtid-consistency=ON

2.主库创建用于链接的用户并授权

3.在从库向主库发送请求

MyCAT2的主从配置

登录MyCAT 2在MyCAT2里面操作

[root@Master ~]# mysql -uroot -p123456 -P8066 -h192.168.20.110

在Mycat里创建数据库mydb1

mysql> create database mydb1;
Query OK, 0 rows affected (0.35 sec)

修改mydb1.schema.json

[root@MyCAT bin]# vim /usr/local/mycat/conf/schemas/mydb1.schema.json 
{"customTables":{},"globalTables":{},"normalProcedures":{},"normalTables":{},"schemaName":"mydb1","targetName":"prototype","shardingTables":{},"views":{}
}

使用注解方式添加数据源

mysql> /*+ mycat:createDataSource{-> "name":"rwSepw",-> "url":"jdbc:mysql://192.168.20.111:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true",-> "user":"mycat",-> "password":"123456"-> } */-> ;
Query OK, 0 rows affected (0.03 sec)mysql> /*+ mycat:createDataSource{-> "name":"rwSepr1",-> "url":"jdbc:mysql://192.168.20.112:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true",-> "user":"mycat",-> "password":"123456"-> } */;
Query OK, 0 rows affected (0.06 sec)mysql> /*+ mycat:createDataSource{-> "name":"rwSepr2",-> "url":"jdbc:mysql://192.168.20.113:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true",-> "user":"mycat",-> "password":"123456"-> } */;
Query OK, 0 rows affected (0.02 sec)

查询配置数据源结果

 /*+ mycat:showDataSources{} */;

 更新集群信息,添加dr0从节点.实现读写分离

mysql> /*!mycat:createCluster{"name":"prototype","masters":["rwSepw"],"replicas":["rwSepr1","rwSepr2"]} */;
Query OK, 0 rows affected (0.04 sec)

查看配置集群信息

/*+ mycat:showClusters{} */;

 查看集群配置文件

[root@MyCAT bin]#  cat /usr/local/mycat/conf/clusters/prototype.cluster.json
{"clusterType":"MASTER_SLAVE","heartbeat":{"heartbeatTimeout":1000,"maxRetryCount":3,"minSwitchTimeInterval":300,"showLog":false,"slaveThreshold":0.0},"masters":["rwSepw"],"maxCon":2000,"name":"prototype","readBalanceType":"BALANCE_ALL","replicas":["rwSepr1","rwSepr2"],"switchType":"SWITCH"
}[root@MyCAT bin]# 

 readBalanceType
查询负载均衡策略
可选值:
BALANCE_ALL(默认值)
获取集群中所有数据源
BALANCE_ALL_READ
获取集群中允许读的数据源
BALANCE_READ_WRITE
获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE
获取集群中允许写数据源,即主节点中选择
switchType
NOT_SWITCH:不进行主从切换
SWITCH:进行主从切换

验证读写分离

重新启动Mycat

}[root@MyCAT bin]# ./mycat restart
Stopping mycat2...
Stopped mycat2.
Starting mycat2...
[root@MyCAT bin]# ./mycat status
mycat2 is running (3321).
[root@MyCAT bin]# tail ../logs/wrapper.log 
INFO   | jvm 1    | 2024/03/04 21:47:26 | 	at io.mycat.datasource.jdbc.datasource.DefaultConnection.executeQuery(DefaultConnection.java:84)
INFO   | jvm 1    | 2024/03/04 21:47:26 | 	... 17 common frames omitted
INFO   | jvm 1    | 2024/03/04 21:47:28 | 2024-03-04 21:47:27,959[INFO]io.mycat.vertx.VertxMycatServer.lambda$start$1:166Mycat Vertx server f705da33-7493-4239-9dfc-eedc64f8aa41 started up.

验证读写分离

mysql> CREATE DATABASE db4 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ERROR 2013 (HY000): Lost connection to MySQL server during query
No connection. Trying to reconnect...
Connection id:    0
Current database: *** NONE ***Query OK, 0 rows affected (0.48 sec)mysql> use db4;
Database changed
mysql> create table sys_user(->     id bigint primary key,->     username varchar(200) not null,->     address  varchar(500)-> );
Query OK, 0 rows affected (0.23 sec)mysql> /*+ mycat:repairPhysicalTable{} */;
Query OK, 0 rows affected (0.00 sec)mysql> insert INTO sys_user(id,username,address) values(1,"xiaofang","wuhan");
Query OK, 1 row affected (0.09 sec)mysql> select * from sys_user;
+----+----------+---------+
| id | username | address |
+----+----------+---------+
|  1 | xiaofang | wuhan   |
+----+----------+---------+
1 row in set (0.02 sec)

 在从库查看表是有的

 MyCAT里查询测试

修改上面3个MySQL数据库中db1库中sys_user表里面的数据,让它不一样,再在MyCAT里面执行查询 结果如下

Master:

mysql> update db4.sys_user set address="wuhan_master";
Query OK, 1 row affected (0.02 sec)

slave1:

mysql> update db4.sys_user-> set address="wuhan_slave1";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

slave2:

mysql> update db4.sys_user set address="wuhan_slave2";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1  Changed: 1  Warnings: 0

 测试结束

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

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

相关文章

个人社区 项目测试

目 录 一.背景及介绍二.功能详情三.手动测试1.编写测试用例2.测试 一.背景及介绍 该项目采用了前后端分离技术,把我们的数据保存到数据库中,操作对象是用户和个人文章编辑保存,前端的页面实现了登录,列表,编辑&#x…

学习JAVA的第十三天(基础)

目录 API之Arrays 将数组变成字符串 二分查找法查找元素 拷贝数组 填充数组 排序数组 Lambda表达式 集合的进阶 单列集合 体系结构 Collection API之Arrays 操作数组的工具类 将数组变成字符串 //将数组变成字符串char[] arr {a,b,c,d,e};System.out.println(Arra…

leetcode--接雨水(双指针法,动态规划,单调栈)

目录 方法一:双指针法 方法二:动态规划 方法三:单调栈 42. 接雨水 - 力扣(LeetCode) 黑色的是柱子,蓝色的是雨水,我们先来观察一下雨水的分布情况: 雨水落在凹槽之间,在一个凹槽的…

第十三届蓝桥杯嵌入式省赛程序设计详细题解

第十三届蓝桥杯嵌入式省赛题目相对于第十二届较为简单,没有那么多串口的数据处理以及判断! 第十三届省赛主要是制作一个可由串口设置密码的密码锁。本实验中,我们将用到LED模块、按键模块、串口模块、定时器的PWM模块以及官方会提供源码的LC…

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器(单机和副本集)启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点(mongodb 服务器) 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…

UE5 UE4 不同关卡使用Sequence动画

参考自:关于Datasmith导入流程 | 虚幻引擎文档 (unrealengine.com) 关卡中的Sequence动画序列,包含特定关卡中的Actor的引用。 将同一个Sequcen动画资源放入其他关卡,Sequence无法在新关卡中找到相同的Actor,导致报错。 Sequen…

android Service 与 activity 通信 并不断传数据

注:这只是个Demo 以下载为案例,实现开启下载,暂停下载,下载进度不断发送给activity class DownloadService : Service() {override fun onBind(intent: Intent?): IBinder? {return MyBinder()}inner class MyBinder : Binder…

Java知识点总结(二)

ID生成策略 主键自增id 主键自动增长,不用手工设值、数字型,占用空间小、检索非常有利、有顺序,不会重复,但在迁移旧数据是会出现id冲突 UUID 基于时间,计数器和地址生成32位的id redis生成id 原子性自增,并…

Flask入门一(介绍、Flask安装、Flask运行方式及使用、虚拟环境、调试模式、配置文件、路由系统)

文章目录 一、Flask介绍二、Flask创建和运行1.安装2.快速使用3.Flask小知识4.flask的运行方式 三、Werkzeug介绍四、Jinja2介绍五、Click CLI 介绍六、Flask安装介绍watchdog使用python--dotenv使用(操作环境变量) 七、虚拟环境介绍Mac/linux创建虚拟环境…

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言,与Java是完全兼容,除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机(JVM)上,也可以被编译成Java字节码文件。 以下是Groovy的一些…

2024.02.29作业

1. TCP模型 server #include "test.h"#define SER_IP "192.168.191.128" #define SER_PORT 9999int main(int argc, char const *argv[]) {int sfd -1;sfd socket(AF_INET, SOCK_STREAM, 0);if (-1 sfd){perror("socket error");return -1;…

Java生成 word报告

Java生成 word报告 一、方案比较二、Apache POI 生成三、FreeMarker 生成 在网上找了好多天将数据库信息导出到 word 中的解决方案,现在将这几天的总结分享一下。总的来说,Java 导出 word 大致有 5 种。 一、方案比较 1. Jacob Jacob 是 Java-COM Bri…

ECMAScript6

课程链接 目录 相关介绍什么是ECMA什么是ECMAScript为什么学习ES6 letconst变量解构赋值模板字符串对象简化写法箭头函数函数参数的默认值rest参数扩展运算符Symbol迭代器生成器函数与调用Promise介绍与基本用法Promise封装读取文件Promise.prototype...then方法Promise.catch…

光影交织:汽车穿越隧道的视觉盛宴

在繁忙的城市中,隧道成为了连接两端的重要通道。而对于汽车来说,穿越隧道不仅是一次简单的空间转移,更是一场融合了视觉、技术与安全的独特体验。 当汽车缓缓驶入隧道,外界的光线逐渐减弱,隧道内部的光线开始发挥作用。…

向量数据库Chroma教程

引言 随着大模型的崛起,数据的海洋愈发浩渺无垠。受限于token的数量,无数的开发者们如同勇敢的航海家,开始在茫茫数据之海中探寻新的路径。他们选择了将浩如烟海的知识、新闻、文献、语料等,通过嵌入算法(embedding)的神秘力量,转化为向量数据,存储在神秘的Chroma向量…

JavaScript基础知识(三)

JavaScript基础知识(三) 一、事件1. 事件绑定2.事件流2.1 事件捕获与事件冒泡 3.事件对象扩展3.1 阻止事件冒泡3.2 事件默认行为 4.事件委托5.事件类型5.1 鼠标事件5.2 键盘事件5.3 触屏事件 二、计时器方法1. setInterval 与 clearInterval2. setTimeou…

【Unity】使用ScriptableObject存储数据

1.为什么要用ScriptableObject? 在游戏开发中,有大量的配置数据需要存储,这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt,excel等等 但是你们有没有想过,假设你使用的是json&#x…

LeetCode148.排序链表

题目 给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 输入:head [4,2,1,3] 输出:[1,2,3,4] 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 输入:head [] 输出:[] 思路…

通过GitHub探索Python爬虫技术

1.检索爬取内容案例。 2.找到最近更新的。(最新一般都可以直接运行) 3.选择适合自己的项目,目前测试下面画红圈的是可行的。 4.方便大家查看就把代码粘贴出来了。 #图中画圈一代码 import requests import os import rewhile True:music_id input("请输入歌曲…

openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程

文章目录 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程236.1 Query执行流程236.1.1 调优手段之统计信息236.1.2 调优手段之GUC参数236.1.3 调优手段之底层存储236.1.4 调优手段之SQL重写 openGauss学习笔记-236 openGauss性能调优-SQL调优-Query执行流程 S…