众所周知,MySql是一种在目前被广泛使用着开源的免费的数据库,在中小型数据应用中,一般单台MySql服务器就能满足要求了,但对于大型WEB或其他应用下,巨量的数据存储访问,单台MySql服务器就不能很好地胜任了,而要使多台MySql服务器协同工作,不但要考虑MySql服务器集群结构,要考虑MySql服务器的HA热备问题,还要考虑各服务器之间负载均衡问题。为了解决这方面难题,MySql官方推出了MySql Cluster的构架,下面就让我们从基本情况、成本、优缺点和应用场合等方面对5种MySql服务器集群的可行性方案进行详细的分析和比较:
1、MySQL Clustering(ndb-cluster stogare)
MySQL公司以存储引擎方式提供的高可靠性方案,是事务安全的,实时复制数据,可用于需要高可靠性及负载均衡的场合。该方案至少需要三个节点服务器才能达到较好的效果。
成本:
(1) 节点服务器对RAM的需求很大,与数据库大小呈线性比例;
(2) 最好使用千兆以太网络;
(3) 还需要使用Dolphin公司提供的昂贵的SCI卡。
优点:
(1) 可用于负载均衡场合;
(2) 可用于高可靠性场合;
(3) 高伸缩性;
(4) 真正的数据库冗余;
(5) 容易维护。
缺点:
(1) 随着数据库的变大,对RAM的需求变得更大,因此成本很高;
速度:
(1) 几乎比典型的单独服务器(无千兆以太网,无SCI卡,存储引擎相关的限制少)慢10倍。
应用场合:
(1) 冗余,高可靠性,负载均衡
2、MySQL / GFS-GNBD/ HA (Active/Passive)
GFS是事务安全的文件系统。同一时刻你可以让一个MySQL使用共享数据。
成本:
(1) 最多n台高性能服务器的成本,其中一个激活的,其他作为备份服务器。
优点:
(1) 高可靠性
(2) 某种程度的冗余
(3) 按照高可靠性进行伸缩
缺点:
(1) 没有负载均衡
(2) 没有保证的冗余
(3) 无法对写操作进行伸缩
速度:
(1) 单独服务器的2倍。对读操作支持得较好。
应用场合:
(1) 需要高可靠性的、读操作密集型的应用
3、MySQL / DRBD / HA (Active/Passive)
DRBD可以提供这样的共享硬盘。DRBD可以被设置成事务安全的。同一时刻你可以让一个MySQL使用共享数据。
成本:
(1) 最多n台高性能服务器的成本,其中一个激活的,而其他则作为备份服务器。
优点:
(1) 高可靠性;
(2) 一定程度的冗余;
(3) 以高可靠性名义来看是可伸缩的。
缺点:
(1) 没有负载均衡
(2) 没有保证的冗余
(3) 在写负载方面没有伸缩性
速度:
(1) 在读写方面相当于单独服务器
应用场合:
(1) 需要高可靠性、读操作密集型的应用
4、MySQL Write Master / Multiple MySQL Read Slaves (Active/Active)
考虑不同的读、写DB数据库连接的情况。可以使用一台主服务器用于写操作,而采用n台从服务器用于读操作。
成本:
(1) 最多1台高性能写服务器,n台读服务器的成本
优点:
(1) 读操作的高可靠性;
(2) 读操作的负载均衡;
(3) 在读操作负载均衡方面是可伸缩的。
缺点:
(1) 无写操作的高可靠性;
(2) 无写操作的负载均衡;
(3) 在写操作方面无伸缩性;
速度:
(1) 同单独服务器;在读操作方面支持得较好
应用场合:
(1) 读操作密集型的、需要高可靠性和负载均衡的应用。
5、Standalone MySQL Servers(Functionally separated) (Active)
多台功能分离的单独服务器,没有高可靠性、负载均衡能力,明显缺点太多,不予考虑。
总结:
MySQL官方网站推荐的HA方案是结合DRBD(本文中的方案3)和Replication(本文中的方案4)。假如再加上Linux Heartbeat还可实现Auto-failover功能,在此种情况下,我们会发现,down机时间会大大减少。
我们还看到,虽然上述方案解决了集群问题,但对于Mysql服务器之间的负载均衡还是存在问题的,下面我们就选用官方推荐的方案4,配合梭子鱼安全负载均衡机,来实现真正高效可靠的大型应用架构。
梭子鱼负载均衡解决方案:
·采用两台梭子鱼安全负载均衡机LB440的双机HA冗余结构,实现对后端多台MYSQL服务器的实时负载均衡。
·采用梭子鱼LB440特有的负载均衡算法保证大量的数据库请求链接负载实时高效均衡。
·梭子鱼LB440对每台MYSQL服务器的服务端口进行健康检查,当某台MYSQL服务器发生故障,则停止该台设备的工作,并从整个负载均衡队列中自动移除。
·基于应用的结构,便于以后业务系统无缝拓展。性价比最优的解决方案,保护用户的投资。