一、读写分离介绍
1、What读写分离?
基本的原理是让主数据库处理事务增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。
2、why为何要读写分离?
因为数据库的“写”(写10000条数据到mysql可能要3分钟)操作是比较耗时的。但是数据库的“读”(从mysql读10000条数据可能只要5秒钟)。
所以读写分离,解决的是,数据库的写入,影响了查询的效率。
3、res实际场景
在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力是必要的。
二、实现读写分离方式
(一)基于代码层面实现
1、需要配置个数据源
2、在代码中引入注解及AOP实现,通过请求来识别调用主还是从数据库
优点:简单省事,加代码即可
缺点:代码耦合不利于后期扩展和维护、一旦修改需要重新编译打包、最严重点数据库宕机了,应用就会抛异常
(二)引用中间件
1、Mycat是什么?
- 一个彻底开源的,面向企业应用开发的大数据库集群,支持事务、ACID、可以替代MySQL的加强版数据库
- 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群
- 一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server,结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品
- 一个新颖的数据库中间件产品
2、Mycat特性
- 独立部署,不影响业务代码,由它来管理主从数据库
- 基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群
- 支持分表
- 支持分布式事务
- 遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理
三、mycat搭建部署
(一)安装
解压 tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz 配置环境 vi /etc/profile
(二)配置
1、配置服务器信息
说明:schems对应的二个逻辑数据库名,与schema.xml的name对应
2、配置数据库信息
说明:dataNode对应name,并且dataNode中的database是真实的数据库名
高可用:读写分离; 写走hostM1,读走hostS1; hostM1宕机了, hostS1也不可用
(三)相关命令
cd /usr/local/mycat/bin/ ./mycat start 启动 ./mycat stop 停止 ./mycat console 前台运行 ./mycat restart 重启服务 ./mycat pause 暂停 ./mycat status 查看启动状态
(四)测试结果
1、询会走slave节点,其他走master节点,对master节点数据库的增、删、改操作最终会同步到slave节点
2、强制走master:/*!mycat:db_type=master*/ select * from tbl_user;强制走slave:/*!mycat:db_type=slave*/ select * from tbl_user
3、手动停掉master上的mysql服务,看看mycat能不能自动的切换到下一个writeHost
(五)遇到问题
1、批量更新不是很友好?
引入baomidou包
2、怎么把已经存在的物理表加载到mycat中?
使用schema配置中的targetName,指向目标数据源或者集群,同时保证schema的名字与目标的库相同,即可自动加载该库已经存在的物理表
3、数据有时候有有时候又没有?
检查集群主从关系是否被打破,可参考上篇文章(MySql主从复制介绍)
标签:读写,分离,mycat,master,集群,一款,数据库 From: https://www.cnblogs.com/weiguo-it/p/17130345.html