mysql集群策略
在现在的科技环境下,我们的项目中往往会处理越来越多的数据量,随着数据量的递增,单一的数据库已经无法满足我们的业务要求,因此为了解决这一系列的数据库瓶颈,我们有了集群的搭建方案。
一、读写分离架构
读写分离架构是我们最常见的架构,它的主要思路是:有一个集群的数据库,其中一个为主库,负责所有的写操作,但不提供读;其他的都是从库,负责读取数据的操作,但不提供写。
在读写分离的架构中,需要注意的是:
1.读库和写库的数据要一致;
2.写数据的操作必须要在主库中进行;
3.读数据的操作必须要在从库中进行。
读写分离的架构图:
从架构图中我们可以看到:
1.数据库节点有单个变成了多个;
2.主数据库需要同步数据到从数据库;
3.集群中至少需要两个数据库才能使用。
但是这种架构存在着非常天然的劣势:
第一点:web应用程序需要连接多个mysql节点;其次每次请求都必须到各自的数据库,如写请求到写数据库,读请求到读数据库,面对这种情况,我们可以采用spring AOP来解决:
第二点:主从之间的数据同步是异步进行的,那么就会意味着数据一致性较弱,这样可能会出现数据在某个时刻没有进行同步完成,导致主从库的数据不一致。
二、中间件架构
中间件架构是基于主从架构设计的,它主要是对传统的主从架构进行一次改进。
在上面我们介绍的主从架构中,知道了主从架构会有多个节点难以处理的问题,外部程序访问可能涉及到切库的问题。为了解决这个问题,我们引入了中间件:mycat,来处理这种多节点的情况。
中间件的架构图:
在中间件架构中,我们可以看到:
1.外部的web应用程序无需连接多个数据库节点,只需要连接到中间件中即可。
2.外部的web应用程序无需区分读写操作,所有的读写操作区分都交给了中间件来处理。
接下来让我们试想下,如果一个中间件连接了上万个数据库节点,这个架构还能支撑的起吗?
答案是肯定的,在面对很多个数据库节点时,单个中间件无法负载,因此我们可以把这个架构图做个改进,将中间件进行集群处理:
我们仔细看这个架构图,能够满足单个负载的情况,但是如果中间件多了,又会和读写架构的问题一样,外部程序会面临多个数据节点的问题。
三、负载均衡架构
负载均衡架构是为了解决我们中间件架构集群下的问题而产生的。
负载均衡架构图:
从负载均衡架构图我们可以看到:
1.外部程序只需要对接负载均衡组件(proxy),就能访问数据库。
2.负载均衡组件(proxy)不处理和区别读写操作,直接讲请求转发给组件。
四、PXC集群架构
在上面我们讲到,读写架构的问题有多个数据节点和数据同步弱一致性的问题,PXC集群就是解决数据弱一致性的问题。
PXC集群架构图:
在PXC集群中我们可以看到:
1. 外部程序任然只对接负载均衡组件(proxy)即可。
2. 中间件mycat在架构图中的作用是:对于每个数据库请求,不再是区分读写操作,而是对数据库分片的操作。
3. PXC的集群中,每个mysql数据库都能够进行读写操作。
4. PXC集群由于是数据强一致性同步,数据同步采用的是同步操作的方式,因此效率会比读写架构慢的多。