1 问题
我们通过使用MyCat,对MySQL数据库实现了读写分离,但是由于MyCat是单节点服务,当访问端所有压力到达mycat后,可能会引发单点故障。
2 MyCat集群架构
通过增加MyCat节点,实现后端MySQL的负载均衡。
然后在MyCat之上,再增加HAProxy的部署,通过HAProxy实现MyCat集群的负载均衡。
2.1 HAProxy
一个开源的、高性能的基于TCP(第四层协议)和HTTP(第七导协议)应用的负载均衡软件。使用HAProxy可以快速、可靠地实现基于TCP与HTTP应用的负载均衡解决方案。
当客户端请求到达HAProxy时,HAProxy可检测到下游的MyCat是否存活,仅将请求分发到目前存活的MyCat节点。可确保MyCat在有节点宕机时,服务依然可用。
但这里仍然存在HAProxy单点故障的问题,当HAProxy服务发生故障时,即使下游的MyCat正常,请求也无法进行响应。
3 MyCat高可用集群
- 由HAProxy实现了MyCat多节点的集群高可用和负载均衡,而HAProxy自身的高可用则可以通过Keepalived来实现。因此,HAProxy主机上需要同时安装HAProxy和Keepalived。Keepalived负责为该服务器抢占vip(虚拟IP),抢占到vip后,对该主机的访问可以通过原来的IP访问,也可以直接通过vip访问。
- HAProxy负责将对vip的请求分发到MyCat集群节点,起到负载均衡的作用。同时HAProxy也能检测到MyCat是否存活,HAProxy只会将请求转发到存活的MyCat节点。
- 如果Keepalived+HAProxy高可用集群中的一台服务器宕机,集群中另外一台服务器上的Keepalived会立刻抢占vip并接管服务,此时抢占了vip的HAProxy节点可以继续提供服务。
- 如果一台MyCat服务器宕机,HAProxy转发请求时不会转发到宕机的MyCat上,所以MyCat依然可用。
3.1 Keepalived
一种基于VRRP协议来实现的高可用方案,可以利用其来避免单点故障。通常有两台甚至多台服务器运行Keepalived,一台为主服务器,其他则为备份服务器,但是对外表现为是一个虚拟的IP(即vip),主服务器会发送特定的消息给备份服务器,当备份服务器接收不到这个消息时,即认为主服务器宕机。此时由备份服务器接管虚拟IP,继续提供服务,从而保证整个集群的可用性。