数据库-Mysql-读写分离(Atalas,Mysql-Router,Mysql-Proxy)

news2024/11/26 20:47:58

Atalas

这个是很老的了,了解即可。
在这里插入图片描述

wget https://github.com/Qihoo360/Atlas/releases/download/2.2.1/Atlas-2.2.1.el6.x86_64.rpm
rpm -ivh Atlas-2.2.1.el6.x86_64.rpm
#安装后的目录
cd /usr/local/mysql-proxy

配置

/usr/local/mysql-proxy/bin/encrypt root
vim /usr/local/mysql-proxy/conf/test.cnf
#配置Atlas用户
# 管理接口的用户名
admin-username = root 
# 管理接口的密码
admin-password = root 

#Atlas后端连接的MySQL主库的IP和端口,可设置多项,用逗号分隔
proxy-backend-addresses = 172.17.187.78:3306
#Atlas后端连接的MySQL从库的IP和端口,@后面的数字代表权重,用来作负载均衡,若省略则默认为1,可设置多项,用逗号分隔
proxy-read-only-backend-addresses = 172.17.187.78:3306@1,172.17.187.79:3306@2
#用户名与其对应的加密过的MySQL密码,密码使用PREFIX/bin目录下的加密程序encrypt加密,下行的user1和user2为示例,将其替换为你的MySQL的用户名和加密密码
pwds = root:qyMGHucYPhGZnKb0g+dxdA==
#Atlas监听的工作接口IP和端口
proxy-address = 0.0.0.0:1234
#Atlas监听的管理接口IP和端口
admin-address = 0.0.0.0:2345
#启动
/usr/local/mysql-proxy/bin/mysql-proxyd test start
#登录
mysql -h127.0.0.1 -P2345 -uroot -p=root
#查看主机名 一主两从的化可以读节点 会相互切换
select @@hostname

Mcat

vim server.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>
	<property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
	<property name="useHandshakeV10">1</property>
	<property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->

		<property name="sequnceHandlerType">2</property>
	<property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
		<property name="processorBufferPoolType">0</property>
		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</property>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!--
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
		<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
		<property name="handleDistributedTransactions">0</property>
		
			<!--
			off heap for merge/order/group/limit      1开启   0关闭
		-->
		<property name="useOffHeapForMerge">1</property>

		<!--
			单位为m
		-->
        <property name="memoryPageSize">64k</property>

		<!--
			单位为k
		-->
		<property name="spillsFileBufferSize">1k</property>

		<property name="useStreamOutput">0</property>

		<!--
			单位为m
		-->
		<property name="systemReserveMemorySize">384m</property>


		<!--是否采用zookeeper协调切换  -->
		<property name="useZKSwitch">false</property>

		<!-- XA Recovery Log日志路径 -->
		<!--<property name="XARecoveryLogBaseDir">./</property>-->

		<!-- XA Recovery Log日志名称 -->
		<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
		<property name="serverPort">8066</property>

	</system>
	<!-- 重点关注这里配置的schemas 就是数据库 也在这里配置了数据库的密码-->
	<user name="root" defaultAccount="true">
		<property name="password">654321</property>
		<property name="schemas">hello</property>
	</user>
	<user name="user">
		<property name="password">654321</property>
		<property name="schemas">hello</property>
		<property name="readOnly">true</property>
	</user>

</mycat:server>
vim schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--对应前面的模式-->
	<schema name="hello" checkSQLschema="true" sqlMaxLimit="100">
	<!--要操作的表-->
		<table name="user" dataNode="dn1" />
	</schema>
	<dataNode name="dn1" dataHost="host1" database="hello" />
	<!--配置节点 这里要注意顺序一定要是 dataHost heartbeat writeHost  否则会报错-->
	<dataHost name="host1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- 配置了一主两从 -->
		<writeHost host="hostW" url="127.0.0.1:3306" user="root" password="654321">
			<readHost host="hostR1" url="127.0.0.1:13306" user="root" password="654321" />
			<readHost host="hostR2" url="127.0.0.1:23306" user="root" password="654321" />
	        </writeHost>
	</dataHost>
</mycat:schema>
#这里特别特别要注意,由于我前面使用的是docker 去搭建mysql集群,但是我的mycat安装在宿主机上
#所以这里我连接mycat的时候需要使用docker0网卡的ip
mysql -uroot -p654321 -h172.17.0.1  -P8066
#接着我们执行下面这条指令 看master的ID
SELECT @@server_id;

在这里插入图片描述
可以看到完全对上了:
在这里插入图片描述
至此使用mycat 搭建读写分离就完成了,这里要注意是基于已经搭建好的一主两从,如果之前没有搭建虽然实现了读写分离,但是主库的数据不会同步。一主两从的搭建可以参考我这篇博客

MySQL-Proxy

在这里插入图片描述
不推荐使用,使用MySQL Router代替

wget https://cdn.mysql.com/archives/mysql-proxy/mysql-proxy-0.8.5-linux-el6-x86-64bit.tar.gz
#创建配置文件
[mysql-proxy]
user=root # 运行mysql-proxy用户
admin-username=root # 主从mysql共有的用户
admin-password=654321# admin密码
proxy-address=ip:4040 # mysql-proxy运行ip和端口,不加端口,默认4040
proxy-backend-addresses=ip:3306 # 指定后端主master写入数据
proxy-read-only-backend-addresses=ip:3306 # 指定后端从slave读取数据
proxy-lua-script=./share/doc/mysql-proxy/rw-splitting.lua # lua位置,参见上面的版本信息
log-file=./logs/mysql-proxy.log # 日志文件存储路径
log-level=debug
keepalive=true # 保持连接启动进程会有2个, 一号进程用来监视二号进程
daemon=true # mysql-proxy以守护进程方式运行
chmod 660 mysql-proxy.conf
#新建一个lua脚本
vim share/doc/mysql-proxy/rw-splitting.lua
if not proxy.global.config.rwsplit then
proxy.global.config.rwsplit = {
	min_idle_connections = 1, # 默认超过4个连接数时,才开始读写分离,改为1 测试需要
	max_idle_connections = 1, # 默认8,改为1测试需要
	is_debug = false
}
end

启动命令

nohup bin/mysql-proxy --defaults-file=mysql-proxy.conf > mysql-proxy.out 2 > &1&

mysql -uroot -proot -hip -P4040

MySQL Router

MySQL Router最早是作为MySQL-Proxy的替代方案出现的。

 wget http://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-Router/mysql-router-8.0.20-el7-x86_64.tar.gz

配置

[logger]
#配置日志级别
level = INFO
#配置读
[routing:secondary]
#这里需要注意我生产环境中不能这么配置需要配置网段
bind_address = 0.0.0.0
bind_port = 7001
destinations = 127.0.0.1:23306,127.0.0.1:13306
routing_strategy = round-robin
#配置写
[routing:primary]
bind_address = 0.0.0.0
bind_port = 7002
destinations = 127.0.0.1:3306
routing_strategy = first-available

关于routing_strategy

  • round-robin:每个新连接都以循环方式连接到下一个可用的服务器,以实现负载平衡。
  • round-robin-with-fallback:用于InnoDB Cluster。每个新的连接都以循环方式连接到下一个可用的secondary服务器。如果secondary服务器不可用,则以循环方式使用primary服务器。
  • first-available:新连接从目标列表路由到第一个可用服务器。如果失败,则使用下一个可用的服务器,如此循环,直到所有服务器都不可用为止。
  • next-available:与first-available类似,新连接从目标列表路由到第一个可用服务器。与firstavailable不同的是,如果一个服务器被标记为不可访问,那么它将被丢弃,并且永远不会再次用作目标。重启Router后,所有被丢弃服务器将再次可选。
./bin/mysqlrouter -c ./conf/mysqlrouter.conf &

mysqlrouter 的原理为:访问7002的时候就转发到写mysql服务,7001转发到读服务

#这里同样我使用的是docker 172.17.0.1是docker0的ip
mysql -uroot -p654321 -h172.17.0.1 -P7002
#执行这个命令
select @@server_id

在这里插入图片描述

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

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

相关文章

【Bugs】java: 错误: 不支持发行版本 xx

文章目录 报错场景&#xff1a;报错原因&#xff1a;解决方法&#xff1a; 报错场景&#xff1a; IDEA运行Java项目报错&#xff0c;点击运行之后&#xff0c;IDEA在编译代码的时候就出现报错&#xff1a; 报错类型一&#xff1a;java: 错误: 不支持发行版本 21报错类型二&am…

H12-821_131

131.如图所示&#xff0c;R1、R2、R3和R4运行OSPF&#xff0c;缺省情况下该网络中选举________个DR。&#xff08;请填写阿拉伯数字&#xff09; 答案&#xff1a;3 注释&#xff1a; DR是链路上的概念&#xff0c;使用路由器接口的IP地址表示。链路的网络类型是广播网络类型或…

钉钉h5应用 globalthis is not defined vite client

钉钉h5应用 globalthis is not defined vite client problem 背景 钉钉h5应用使用 vue3 vite 构建的前端工程 问题 h5页面在pc端浏览器和pc端钉钉打开正常h5页面在移动端钉钉打开异常 页面空白 通过调试工具找到报错信息 globalthis is not defined vite client reason …

flutter插件市场,字节大牛耗时八个月又一力作

目录 触摸事件分发机制view渲染机制常用view布局ViewGroup自定义View实战 高级UI晋升 1.android的事件分发机制 2.Android面试题——View篇 3.自定义View面试题&#xff01; 4.布局ViewGroup 5.Android自定义View实战 最后 其实Android开发的知识点就那么多&#xff0c;面试…

低代码:数智化助力新农业发展

随着科技的飞速发展和数字化转型的深入推进&#xff0c;低代码开发平台正逐渐成为软件开发的热门话题。尤其在农业领域&#xff0c;低代码技术为传统农业注入了新的活力&#xff0c;助力新农业实现高效、智能的发展。 低代码开发平台的概念与特点 随着科技的飞速发展&#xff0…

Sublime Text 格式化Json文件 之 Pretty Json

需要使用到 Pretty Json插件。 一、安装方法 sublime 下&#xff0c;按快捷键 Comand control p&#xff0c; 输入install Package,然后回车 等几秒钟&#xff0c;加载启动进程完毕后弹出的页面中输入pretty json, 然后回车 等待几秒钟&#xff0c;可以查看Sublime 最下面的…

《UE5_C++多人TPS完整教程》学习笔记27 ——《P28 项目资产(Assets for The Project)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P28 项目资产&#xff08;Assets for The Project&#xff09;》 的学习笔记&#xff0c;该系列教学视频为 Udemy 课程 《Unreal Engine 5 C Multiplayer Shooter》 的中文字幕翻译版&#xff0c;UP主&#xff08;也是译…

如何查询docker镜像的最新版本

查询Docker镜像的最新版本通常有两种方式&#xff1a; 通过Docker CLI在本地查询&#xff1a; 如果你已经拉取过某个镜像并且想要查看本地是否已经有该镜像的最新版本&#xff0c;可以使用docker images命令列出所有本地镜像及其标签&#xff08;即版本&#xff09;。但请注意&…

各中间件性能、优缺点对比

参考资料&#xff1a; Kafka、ActiveMQ、RabbitMQ、RocketMQ 有什么优缺点&#xff1f;

十三、类的继承、访问级别

类的继承与访问控制 类的继承 使用sealed修饰的类&#xff0c;是私有类&#xff0c;不能作为基类使用C#中一个类&#xff0c;只能有一个父类&#xff0c;但是可以实现多个接口子类的访问级别不能超过父类的访问级别 using System; using System.Collections.Generic; using S…

Mysql实战(1)之环境安装

1&#xff0c;进入&#xff1a;MySQL :: MySQL Downloads 2&#xff0c; 3&#xff0c; 4&#xff0c;

【Linux】磁盘情况、挂载,df -h无法看到的卷

文章目录 解决挂载、解决挂载完重启就消失1、查看linux下的硬盘挂载的空间、使用空间2、查看没有挂载的硬盘是否检测在系统中3、挂载 &#xff08;挂载完&#xff0c;要在/etc/fstab 下面配置挂载信息 要不然重启挂载就消失了&#xff09; 解决挂载、解决挂载完重启就消失 linu…

全局渐变滚动条样式

效果如下&#xff1a; APP.vue<style> /* 整个滚动条 */ ::-webkit-scrollbar {width: 5px;height: 10px; } /* 滚动条上的滚动滑块 */ ::-webkit-scrollbar-thumb {background-color: #49b1f5;/* 关键代码 */background-image: -webkit-linear-gradient(45deg,rgba(255,…

鸿蒙4.0-DevEco Studio界面工程

DevEco Studio界面工程 DevEco Studio 下载与第一个工程新建的第一个工程界面回到Project工程结构来看 DevEco Studio 下载与第一个工程 DevEco Studio 下载地址&#xff1a; https://developer.harmonyos.com/cn/develop/deveco-studio#download 学习课堂以及文档地址&#x…

1.1 深度学习和神经网络

首先要说的是&#xff1a;深度学习的内容&#xff0c;真的不难。你要坚持下去。 神经网络 这就是一个神经网络。里面的白色圆圈就是神经元。神经元是其中最小的单位。 神经网络 单层神经网络&#xff1a; 感知机 &#xff08;双层神经网络&#xff09; 全连接层&#xff1a; …

三色标记过程

可达性分析 GC过程中需要对对象图遍历做可达性分析。使用了三色标记法进行分析。 什么三色&#xff1f; 白色&#xff1a;尚未访问过。 黑色&#xff1a;本对象已访问过&#xff0c;而且本对象 引用到 的其他对象 也全部访问过了。 灰色&#xff1a;本对象已访问过&#xff0…

简单的排序算法

目录 1.直接插入排序 2.希尔排序 3.选择排序 4.冒泡排序 5.计数排序 6.排序总结 1.直接插入排序 &#xff08;1&#xff09;思想 所谓插入排序&#xff0c;就是将待排序数据插入到已经有序的数据中&#xff0c;为了使插入后数据依然有序&#xff0c;就要选中一个合理的…

易腐产品的多车厢电动车路径问题(2023)

Multi-Compartment Electric Vehicle Routing Problem for Perishable Products ABSTRACT 该研究首先提出了一个异质车队、多车室的易腐产品电动汽车路由问题&#xff08;MCEVRP-PP&#xff09;。我们捕捉到MCEVRP-PP的许多实际需求和限制&#xff0c;如多个温度区、硬时间窗…

Yolov8有效涨点,添加多种注意力机制,修改损失函数提高目标检测准确率

目录 简介 CBAM注意力机制原理及代码实现 原理 代码实现 GAM注意力机制 原理 代码实现 修改损失函数 YAML文件 完整代码 &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; http://t.csdnimg.c…

Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用!

今天&#xff0c;我们宣布一个激动人心的里程碑&#xff1a;Anthropic 的 Claude 3 Sonnet 模型现已在亚马逊云科技的 Amazon Bedrock 正式可用。 下一代 Claude (Claude 3) 的三个模型 Claude 3 Opus、Claude 3 Sonnet 和 Claude 3 Haiku 将陆续登陆 Amazon Bedrock。Amazon …