本文图片资源均来自互联网,没有干货,只是提供一种简单的思路。

基础原理

两台MySQL机器一个主,一个从实现数据实时同步比较简单,代码层面无需任何修改,添加一台机器简单配置配置即可,但是MySQL数据库实现读写分离,就有那么点麻烦了。

如上面这张图。
1 三台Slave机器通过日志记录的方式,实时同步Master数据库的数据,容易实现。
2 三台WEB机器写入数据时,全都写入到Master数据库里,也容易实现。在上述架构中,主数据库只能有一个,否则容易出现数据不同步问题。
3 最关键的问题在于3台WEB机器需要读数据时,我们的目标是3台WEB机器读数据时从3台Slave机器上读取,而且是负载均衡的形式,3台Slave机器分担读取压力。

有两种方法可以实现数据库读写分离,基于程序代码内部实现和基于中间代理层实现。

改动代码实现,一般可以用一些开发框架,对数据库操作进行路由,即读相关操作路由到Slave集群上去,而写相关操作路由Master数据库机器,显然这种操作主要是由开发来实现,开发和运维有那么点耦合,运维至少还要告知开发哪些IP地址是Slave机器,Slave机器增加或删除都需要通知开发做相关处理。

另外一种方式就是基于中间代理层实现,这就有点相当于WEB前端的负载均衡,但还不太一样,就是另起一台机器,在上面安装数据库代理软件,所有操作数据库的请求不管是读还是写,都先走到这台数据库代理机器上,然后再由数据代理机器往后端抛,写操作抛给Master,读操作负载给Slave集群。如下图:

可以看到Amodeba这款软件就充当数据库代理的作用,以此实现读写分离。充当数据库中间代理层可以是成品软件如Amodeba,Atlas,还可也是自己写的lua脚本。

读写分离优秀图

上图来自MySQL官方文旦手册,看到某组织用上图,还打上自己的logo,简直不要脸。

参考链接

http://blog.51cto.com/13557884/2069131
https://blog.csdn.net/anzhen0429/article/details/77014565
http://heylinux.com/archives/1004.html
https://blog.csdn.net/starlh35/article/details/78735510
https://blog.csdn.net/shukebai/article/details/66007638

最后一次更新 20181021

MySQL读写分离-简单思考的更多相关文章

  1. [原创]mysql 5.6安装配置,主从分离,读写分离简单教程

    文章中参考使用了多个博客的资料,汇总而成!其流程准确性被人亦本人实践! https://blog.csdn.net/qq_35206261/article/details/81321201 https ...

  2. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  3. amoeba实现MySQL读写分离

    amoeba实现MySQL读写分离 准备环境:主机A和主机B作主从配置,IP地址为192.168.131.129和192.168.131.130,主机C作为中间件,也就是作为代理服务器,IP地址为19 ...

  4. PHP代码实现MySQL读写分离

    关于MySQL的读写分离有几种方法:中间件,Mysql驱动层,代码控制 关于中间件和Mysql驱动层实现Mysql读写分离的方法,今天暂不做研究, 这里主要写一点简单的代码来实现由PHP代码控制MyS ...

  5. 转:Mysql读写分离实现的三种方式

    1 程序修改mysql操作类可以参考PHP实现的Mysql读写分离,阿权开始的本项目,以php程序解决此需求.优点:直接和数据库通信,简单快捷的读写分离和随机的方式实现的负载均衡,权限独立分配缺点:自 ...

  6. 使用Atlas实现MySQL读写分离+MySQL-(Master-Slave)配置

    参考博文: MySQL-(Master-Slave)配置  本人按照博友北在北方的配置已成功  我使用的是 mysql5.6.27版本. 使用Atlas实现MySQL读写分离 数据切分——Atlas读 ...

  7. php实现MySQL读写分离

    MySQL读写分离有好几种方式 MySQL中间件 MySQL驱动层 代码控制 关于 中间件 和 驱动层的方式这里不做深究  暂且简单介绍下 如何通过PHP代码来控制MySQL读写分离 我们都知道 &q ...

  8. [记录]MySQL读写分离(Atlas和MySQL-proxy)

    MySQL读写分离(Atlas和MySQL-proxy) 一.阿里云使用Atlas从外网访问MySQL(RDS) (同样的方式修改配置文件可以实现代理也可以实现读写分离,具体看使用场景) 1.在跳板机 ...

  9. mysql读写分离总结

    随着一个网站的业务不断扩展,数据不断增加,数据库的压力也会越来越大,对数据库或者SQL的基本优化可能达不到最终的效果,我们可以采用读写分离的策略来改变现状.读写分离现在被大量应用于很多大型网站,这个技 ...

随机推荐

  1. 《转》Python学习(18)-python函数(二)

    转自 http://www.cnblogs.com/BeginMan/p/3173328.html 一.装饰器(decorators) 装饰器的语法以@开头,接着是装饰器函数的名字.可选参数. 紧跟装 ...

  2. Delphi XE开发 Android 开机自动启动

    https://blog.csdn.net/tanqth/article/details/74357209 Android 下的广播 在Android下,要让我们开发的APP能在开机时自动启动,必须使 ...

  3. 【Spring源码深度解析学习系列】复杂标签属性解析(四)

    一.创建用于属性承载的BeanDefinition BeanDefiniton是一个接口,在Spring中存在三种实现:RootBeanDefinition.ChildBeanDefinition.G ...

  4. 【大数据系列】MapReduce示例一年之内的最高气温

    一.项目采用maven构建,如下为pom.xml中引入的jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  5. key是数字的对象集合

    整理如下: let data = {3: '影视', 4: '音乐', 5: '广场舞', 6: '游戏', 7: '综艺', 8: '动漫', 9: '翻唱', 10: '生活', 11: '美食' ...

  6. node爬虫(转)

    我们先来看看今天的目标: mmjpg.com的美腿频道下的图片 一.实现步骤 使用superagent库来获取页面分析页面结构,使用cheerio 获取有效信息保存图片到本地开撸不断优化 这儿我们用到 ...

  7. Android中openmax实现框架

    OMX中 OMXNodeInstance 负责创建并维护不同的实例,这些实例是根据上面需求创建的,以node作为唯一标识.这样播放器中每个OMXCodec在OMX服务端都对应有了自己的OMXNodeI ...

  8. The request associated with the AsyncContext has already completed processing

    Some time ago there was a problem with the servlet3.0, is in servlet in asynchronous processing data ...

  9. Minix中的字符判定ctype.c

    minix中关于如何判定一个字符的类型,如大写.小写.数字…… 如果采用传统的方法,如判断一个字母大写的方法: if(c>='A' && c<'Z') return tru ...

  10. oracle fm格式化

    select to_char(0.56,'FM999,999,990.00' ) from dual 其中 9代表如果存在数字则显示数字,不存在显示空格 其中 0代表如果存在数字则显示数字,不存在则显 ...