MySQL读写分离-简单思考

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

基础原理

两台MySQL机器一个主,一个从实现数据实时同步比较简单,代码层面无需任何修改,添加一台机器简单配置配置便可,可是MySQL数据库实现读写分离,就有那么点麻烦了。
image1.png | center | 930x652
如上面这张图。
1 三台Slave机器经过日志记录的方式,实时同步Master数据库的数据,容易实现。
2 三台WEB机器写入数据时,全都写入到Master数据库里,也容易实现。在上述架构中,主数据库只能有一个,不然容易出现数据不一样步问题。
3 最关键的问题在于3台WEB机器须要读数据时,咱们的目标是3台WEB机器读数据时从3台Slave机器上读取,并且是负载均衡的形式,3台Slave机器分担读取压力。前端

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

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

另一种方式就是基于中间代理层实现,这就有点至关于WEB前端的负载均衡,但还不太同样,就是另起一台机器,在上面安装数据库代理软件,全部操做数据库的请求无论是读仍是写,都先走到这台数据库代理机器上,而后再由数据代理机器日后端抛,写操做抛给Master,读操做负载给Slave集群。以下图:
image2.png | center | 513x250
能够看到Amodeba这款软件就充当数据库代理的做用,以此实现读写分离。充当数据库中间代理层能够是成品软件如Amodeba,Atlas,还可也是本身写的lua脚本。后端

读写分离优秀图

image.png | left | 826x433

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

image4.png | center | 575x254

参考连接

http://blog.51cto.com/13557884/2069131
https://blog.csdn.net/anzhen0429/article/details/77014565
http://heylinux.com/archives/1004.html
http://www.javashuo.com/article/p-fgmqnqoe-bc.html
http://www.javashuo.com/article/p-mnbcaiis-m.html负载均衡

最后一次更新 20181021框架

相关文章
相关标签/搜索