介绍一款读写分离工具

一、读写分离介绍

1、What读写分离?

  基本的原理是让主数据库处理事务增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。

2、why为何要读写分离?

  因为数据库的“写”(写10000条数据到mysql可能要3分钟)操作是比较耗时的。但是数据库的“读”(从mysql10000条数据可能只要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也不可用

(三)相关命令

1
2
3
4
5
6
7
8
9
10
11
12
13
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主从复制介绍)

 

posted @   卫GUO  阅读(138)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示