这是学习笔记的第 2014 篇文章
前几天码了一篇迁移到MySQL的架构演进的文章,迁移到MySQL的架构演进(一),收到的反馈还不少,看来大家碰到的都是共性的问题。
在这个基础上,我们对数据库层面的架构算是达到了一个稳定的状态,数据库实现了分布式,而且数据库间有MHA的高可用,听起来服务高可用应该差不多了,但是实际上还有较大的差距。
比如如下的分布式架构,实现了基于中间件的分库分表的方案。
但是这里有一个明显的问题,对于一个中间件来说,如果中间件所在的服务器出现故障或者中间件出现故障,这个时候该如何处理,我们早期的方式是手工的,即配置一个镜像节点,然后镜像节点作为备用,一旦出现了差异,应用端就需要修改IP切换到新的节点上。显然这种方式是手工高可用,如果是在节假日的时候发生,那么整个服务的不可用就会完全失控。
所以我们需要考虑中间件的高可用,我们可以抽象一个代理层,即代理层来负责负载均衡,能够将请求分发至两个中间件节点,但是这又会引出一个新的问题,代理层是提供一个统一的入口来访问,代理层的高可用该怎么办呢,这就引出了另外一个问题。
所以问题看起来会越来越复杂,我们需要解决的就是这个层面的事情,我们可以考虑使用LVS+keepalive来完成这个代理层的高可用和负载均衡的配置。
整个架构的设计方式如下图所示:
LVS+keepalive负责上层的高可用,可以承接多套集群环境,可以是一种通用的解决方案。