搭建高性能数据库集群之二:MySQL读写分离(基于mycat2-1.22)

news2024/11/25 2:32:56

一、概述

读写分离是常见的一种数据库架构,一般是由 1 主多从构成,特殊场景下也会存在多主多从的架构。

无论哪一种架构,对于应用程序来说都是多个数据源,增加了代码的复杂性。如果配合 mycat,则可以实现屏蔽数据库复杂性,面向应用程序提供统一入口的功能。

二、配置

mycat2 的配置逻辑架构大致如下:

在这里插入图片描述
分别对应mycat的配置文件如下图:
在这里插入图片描述
本文采用 mycat2 特有的注释进行相关配置读写分离。

前提:

1、已配置主从的两个 mysql 实例
2、mycat2 实例

步骤:

1、使用 Navicat 连接 mycat2
在这里插入图片描述

2、增加mysql读写库数据源
复制以下脚本在navicat查询器中执行:

/*+ mycat:createDataSource{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"master_write01",
	"password":"root",
	"type":"JDBC",
	"url":"jdbc:mysql://192.168.0.201:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
} */;
/*+ mycat:createDataSource{
	"dbType":"mysql",
	"idleTimeout":60000,
	"initSqls":[],
	"initSqlsGetConnection":true,
	"instanceType":"READ_WRITE",
	"maxCon":1000,
	"maxConnectTimeout":3000,
	"maxRetryCount":5,
	"minCon":1,
	"name":"slave_read01",
	"password":"root",
	"type":"JDBC",
	"url":"jdbc:mysql://192.168.0.202:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
	"user":"root",
	"weight":0
} */;

可在查询器中通过执行以下语句查询已创建的数据源

/*+ mycat:showDataSources {} */ 

也可以通过配置文件夹查看到新创建的数据源配置文件
在这里插入图片描述
后续配置变更可以直接修改此配置文件

vi read01.datasource.json
vi write01.datasource.json

在这里插入图片描述

3、创建读写集群
复制以下语句到查询器中执行:

/*! mycat:createCluster{
	"clusterType":"MASTER_SLAVE",
	"heartbeat":{
		"heartbeatTimeout":1000,
		"maxRetry":3,
		"minSwitchTimeInterval":300,
		"slaveThreshold":0
	},
	"masters":[
		"master_write01" // 可以配置多个主节点,在主挂的时候会选一个检测存活的数据源作为主节点
	],
	"maxCon":2000,
	"name":"c0",			// 集群的名字
	"readBalanceType":"BALANCE_ALL",	// 读数据的负责均衡策略:BALANCE_ALL -- 获取集群中所有数据源,BALANCE_ALL_READ -- 获取集群中允许读的数据源, BALANCE_READ_WRITE -- 获取集群中允许读写的数据源,但允许读的数据源优先, BALANCE_NONE -- 获取集群中允许写数据源,即主节点中选择
	"replicas":[
		"slave_read01" // 可以配置多个从节点
	],
	"switchType":"SWITCH"
} */;

可在查询器中通过执行以下语句查询已创建的查看集群

/*+ mycat:showClusters {} */ 

也可以通过配置文件夹查看到新创建的mycat集群配置文件
在这里插入图片描述
后续参数变更可以直接修改此文件

vi co.cluster.json

在这里插入图片描述

4、创建逻辑库

/*+ mycat:createSchema{
	"customTables":{},
	"globalTables":{},
	"normalTables":{},
	"schemaName":"pmonitor-cloud",		// 与物理库中的数据库名保持一致
	"shardingTables":{},
	"targetName":"c0"		// 	注意 targetName 指的是集群的名字
} */;

可在查询器中通过执行以下语句查询已创建的逻辑库

/*+ mycat:showSchemas {} */ 

也可以通过配置文件夹查看到新创建的mycat集群配置文件
在这里插入图片描述

5、连接测试
以上执行成功后,重新连接 mycat 即可看到逻辑库,打击打开可以看到库内所有表(不用单独再创建每一张物理表的逻辑表,自动映射)。

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

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

相关文章

【C++】深入剖析vector

好久不见~让大家久等啦~ 本期让我们来揭开vector的面纱,看看它底层是怎么实现的~ 目录 一、STL定义vector的源码分析: 二、vector的模拟实现 2.1 vector框架的搭建(一些简单功能函数的实现) 2.2 迭代器失效问题 2.2.1 实现i…

【Spring】SpringCloud Ribbon中的7种负载均衡策略!

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 负载均衡通器常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务…

个人总结:测试用例万能公式+常见例子(公式的运用)

前言 测试工程师面试的时候,有时候会当场考测试用例,毕竟这是测试工程师的基本功。 对于我来说,让我写测试用例会比让我直接说测试用例更好点。 直接嘴里说出来,容易逻辑混乱,给人一种想到啥说啥的感觉。 其实个人感…

MySQL学习基础篇(九)---子查询

MySQL学习基础篇(九)—子查询 子查询指一个查询语句嵌套在另一个查询语句内部的查询,这个特性从MySQL 4.1开始引入。SQL 中子查询的使用大大增强了 SELECT查询的能力,因为很多时候查询需要从结果集中获取数据,或者需要从同一个表中先计算得出…

MySQL安装与部署

第一种方法:在线安装 配置一个安装yum源 Adding the MySQL Yum Repository 可以手动配置yum源,baseurl指向国内镜像源地址,比如清华、中科大。 Installing MySQL Starting the MySQL Server: 查询临时登录密码 修改数据库密码…

CTFHub XSS DOM反射 WriteUp

前言:本文需要注册一个xss平台,以接收xss反弹回来的数据,请自己在互联网上寻找合适的xss平台 1. 构造闭合语句 根据题目提示,判断网站存在DOM xss漏洞 查看页面源代码,发现关键位置,其中CTFHub is very n…

【揭秘Vue核心】深入解析Object.defineProperty和Proxy的区别,让你秒懂!

问题:Object.difineProperty 和 proxy 有什么区别? Object.defineProperty 和 Proxy 是用于实现响应式数据的两种不同方式。 Object.defineProperty Object.defineProperty 通过直接修改对象的属性描述符来实现数据的劫持。Vue 2.x 中就是通过 Objec…

vscode 之 工作区的应用(解决vue2插件vetur、vue3插件volar禁用启用问题)

目录 前言创建工作区添加文件夹到工作区为当前打开的工作区指定特定环境工作区删除文件夹如何切换工作区 前言 工作区???为什么要工作区??? 首先工作区简单理解就是vscode工作时的区域、范围; 延…

如何正确的安装MySQL

1. 使用rpm包在线安装 1.1 确认自己电脑版本(linux) [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)ps:本次安装采用的系统为Centos 7.9 所使用的mysql为5.7 1.2 下载rpm包 下载地址 https://dev.mysql.com/downloads/mysql/ ps: 自己…

初识树莓派:强大功能与创造力的结合

目录 树莓派4B简介: 树莓派系统镜像下载: 树莓派4B简介: 树莓派4B是一款功能强大且受欢迎的单板计算机,由树莓派基金会开发。作为树莓派系列的最新版本,4B提供了许多令人兴奋的特性和改进,使其成为教育、创…

SSM简单项目遇到的几个问题(最后一个问题,虽然能运行,但是我找不出问题出在哪里)

这几个问题,干扰了我很长时间。 主要因为书本的例子,是通过controller层返回到jsp层。但是,最后一个SSM项目,它用的是controller返回信息给Service层,再由Service层返回Jsp层。 实训:编写一个模糊查询姓名…

【Java基础教程】(三)程序概念篇 · 上:探索Java编程基础,注释、标识符、关键字、数据类型~

Java基础教程之程序概念 上 本节学习目标1️⃣ Java中的注释2️⃣ 标识符3️⃣ 关键字4️⃣ 数据类型4.1 整型🔍 什么是变量?什么是常量?🔍关于数据类型转换的规则? 4.2 浮点数🔍关于Java的计算的缺陷 4.3…

chatGPT写综述

文献是任何学术研究的基础,但搜集和整合众多的信息,写成一篇健全的文献综述却是一项艰巨的任务。随着人工智能技术的发展,大型预训练语言模型(LM),如OpenAI的ChatGPT变得越来越流行。本文将探讨如何使用Cha…

K8S的概念和基本应用

学习视频:Kubernetes基本概念和应用_哔哩哔哩_bilibili 零 . 架构概览 master节点:管理调度集群资源,一般为多节点构成,可以是物理机,也可以是虚拟机。worker节点:资源的提供者,一般为多节点构…

沟通的层次模型

沟通的层次模型 根据沟通的倾向性将沟通划分为五个层次,分别是情绪、感受、想法、态度和事实。 模型介绍 沟通的层次 第5层:沟通情绪-带着强烈情绪表达,尤其经常使用这些字眼:“总是”、“每次都”第4层:沟通感受-不…

【APP开发】uni-data-select真机下拉框不显示问题

官网示例:uni-data-select 因为外层container有样式: width: 100%; height: 100%; overflow: hidden; display: flex; flex-direction: column; 去掉最外层 class"container"之后就可以了,但具体原因不清楚 我是对比了Hello uni-…

python中多态的作用是什么?

在强类型语言(例如Java或C#)中,多态是指允许使用一个父类类型的变量或常量来引用一个子类类型的对象,根据被引用子类对象特征的不同,得到不同的运行结果。即使用父类的类型来调用子类的方法。 在Python中,多态指在不考虑对象类型…

js压缩base64图片

今天试了用js把base64编码格式的图片进行压缩,记录一下: base64图片转换地址 base64图片转换网址 代码如下 js: $(document).ready(function(){compressImg(targetObj.src, 0.5, useImg, targetObj) });let targetObj {// base64字符串 …

机器学习26:《数据准备和特征工程-IV》数据转换

特征工程 是确定哪些特征可能对训练模型有用,然后通过转换日志文件等数据来源中的原始数据来创建这些特征的过程。在本文中,笔者将重点讨论何时以及如何转换数字和分类数据,以及不同方法的权衡。 目录 1.数据转换的原因 1.1 数据兼容性的强…

并发容器(一)CopyOnWriteArrayList

我们知道,ArrayList,LikedList,HashMap都是线程不安全的容器 同步容器:Vector,HashTable,SynchronizedList是线程安全的,因为里面加了synchronized同步,所以这样的容器也叫同步容器…