1 读写分离
1.1 什么是读写分离?
将数据库的查询和其他需要使数据库数据发生变化的操作进行分开的操作。
基本的原理:
让主数据库处理事务性的插入、修改、删除操作;
让从数据库处理查询操作。
1.2 为什么要做读写分离?
在数据库中数据极速增长的情况下,数据库的瓶颈不在于存储,而是计算,即查询。数据量越大,查询的效率越低,对于越复杂的查询语句,其消耗服务器的资源越强,有时甚至不输于死循环。
2 读写分离的方案
MyCat的读写分离是建立在MySQL主从复制的基础之上实现的,所以必须先搭建MySQL的主从复制环境,实现主从复制。
数据库的读写分离对于大型系统或者访问量很高的互联网来说,是必不可少的一个重要功能。
3 MySQL主从复制的常用拓扑结构
3.1 一主一从
最基础的复制结构,用来分担之前单台数据库服务器的压力,可以进行读写分离。
3.2 一主多从
当一台从库承受不了查询请求的压力时,可以添加多台从机,进行负载均衡,进一步分散数据库的压力。
3.3 双主复制
对于一主一从、一主多从来说,Master 节点只有一个,存在单点故障的隐患,如果 Master 节点出现问题时,将导致整个集群不可用。
采用了双主复制后,两个节点互相将对方作为自己的 Master,同时自己又作为对方的 Slave 来进行复制,可以确保一个节点故障时,整个集群还能正常对外服务。
3.4 级联复制
级联结构是通过减少直接从属于 Master 节点的 Slave 节点数量,在 Slave 节点下继续挂载 Slave 节点,从而减轻 Master 节点的压力,分散复制请求,提高整个集群整体的复制效率。
3.5 双主级联
为了解决一主多从时,单点故障带来的隐患,将双主复制和一主多从进行了整合。
从这里也能看出来,MySQL 的复制结构有很多种方式,复制的最大问题是数据延时,选择何种复制结构,需要根据项目使用的具体情况,从目标结构的延时给系统带来的影响进行评估,从而得出一种适合项目的最佳拓扑结构。