MySQL HA方案和企业版功能介绍
最近,笔者有幸参与了xx局的mysql数据库HA搭建,并和mysql原厂的代理商进行了产品和技术方面的交流。
我就把这次项目中学到的东西简单的和大家分享一下。
1、 MySQL常用HA方案
第一种:MySQL双机主从复制方案 (异步)
MySQL的双机主从复制方案,是异步进行的。也就是说master数据库并不关心binlog是否传输到slave数据库,master是一直向前进行数据更新的。这样就会出现slave数据库的数据落后于master数据库的情况。
在网络吞吐量比较大时,如果master数据库意外宕机,就会出现master的部分binlog没来及传输给slave数据库,从而造成slave数据库和master数据不一致的情况。如果你的业务允许丢失微量的数据,那么这个方案完全可以满足。如果不容忍这种情况的发生,那么你就需要考虑其他方案了,如选用一些商业软件(譬如爱可生的双机HA软件),或者利用MySQL原生的cluster(免费),再或者需要MySQL DBA手工把差异的数据追平。
业界商用的双机主从复制方案有MHA、keepalived、Pacemaker、Actiontec HA(商用软件),对比如下:
注意:上面说到MHA能补偿日志,但是只能补偿一次数据差异。
如果在备库上人为更新数据,然后又在主库上更新了相同的数据,假设更新的表数据有主键约束,那么主库在向从库同步数据时,在从库造成主键冲突。结果从库发生了错误,以后从库就再也不和主库同步了,直到等人工干预解决为止。
第二种:MySQL cluster (同步)
MySQL cluster是数据同步复制的完美解决方案,每次事务都是双commit,所以说集群中的各个节点数据是完全一致的,不会出现上面第一种方案脑裂的情况。如果集群中的一个节点坏了,等修复好后,数据会自动同步。
另外,MySQL cluster属于内存数据库,所以性能也会更高。
凡事有利必有弊,MySQL cluster也一样。虽然说MySQL cluster可以保证各个节点数据的一致性和性能的优越性。但是集群的数据存储量不能超过集群中所有节点内存之和除以2.5。比如我MySQL cluster有5个节点,这五个节点的内存加起来是64G,那么数据存储量不能超过30G(64G/2.5~30G)。
此外,大家也看出了MySQL cluster节点多,比较昂贵,不差钱的公司可以考虑。
当然,据说mysql-server(注意不是说mysql cluster)从5.5后,开始支持半同步了,如果主库等1秒发现从库还没有同步数据时,那么主库就不等从库了,主库接着业务数据的更新。所以说这个同步算做是伪同步吧。
第三种方案:MySQL+DBRD 双机主备(只针对linux)
DRBD技术属于块级别复制,其复制速度比通过复制binlog方式(第一种方案)速度快很多,所以DRBD可以最低减少master数据库和slave数据库之间的差异(当然主库和备库之间还是有数据微量延时的,只是比传输binlog的低)。
另外,DRBD也有缺点,因为它是块级别的复制,所以不能人为的手工干预(binlog方式我们能手工干预)。
第四种方案:MySQL+shared Disk 双机主备(利旧)
利旧,就是指利用旧的东西,已达到设备的最大利用率。
大家注意,这个方案和ORACLE的RAC不一样。这个方案的主备两个节点平时只能一个节点(active)对外提供服务;另外一个节点(passive)的mysql服务是关闭状态的,只有发生故障切换时才启动。
因为此方案的的数据在共享存储上,所以数据只有一份,没有冗余。
如果你的公司有很多不用的旧的机器,那么你可以采用这种方案,否则就不要用。
第五种:爱可生HA高可用方案(商业软件)
该方案是把binlog日志放在共享存储上(共享存储10G大小就够了),这样当master数据库宕机后,slave数据库读取共享存储上的binlog来追平和master数据库的差异,从而保证slave的数据和master宕机时的数据强一致性,做到了零数据丢失。
该方案是需要向爱可生公司购买该HA软件的。费用大概是4万的样子,具体可向该司销售咨询。
第六种方案
atlas mysql
请自行百度
2、企业版和社区版MySQL的功能对比
企业版和社区版的MySQL核心功能都一样。但企业版有更多其他功能,是社区版没有的。
企业版比社区版多的功能有:防火墙、物理备份工具、监控(MEM)、主从复制监控、可以用oracle surport账号向MySQL专家提问、企业版比社区版多线程池(所以企业版性能更高)等。如果你购买的是MySQL企业版(不是社区版),那么上述的功能就都有了。
我们知道,MySQL的备份方式有mysqldump、lvm快照、MySQL Replication、和企业级的物理备份工具。其中mysqldump备份和恢复的速度是上述中最差的。
经过测试,备份73G的数据,用mysqldump 需要4h 17min,但用MySQL企业版的物理备份工具只需要5.25min,其速度差别尽然是50倍。
如果还原恢复73G的数据,用mysqldump需要17h 45 min,但用MySQL企业版的物理备份恢复工具,只需要14min。两者的速度真是不可同日而语啊。
企业版的MySQL两台机器大概是6万多。
企业版的MySQL cluster大概是14万左右。
上述两种软件都有开源免费的,可以去MySQL官方下载社区版的。但是企业版的MySQL是在官网下载不到的,需要向原厂付费后,才能获得电子版或者光盘的介质。
3、MySQL读写分离方案
我们说的MySQL负载均衡,其实就是指MySQL的读写分离。
实现MySQL读写分离的软件有MySQL官方的mysql-proxy、阿里巴巴的amoeba(开源)和爱可生商业版的。
据说,截止到现在,mysql-proxy只是一个实验室的产品,所以他还并不完善,有很多bug,一般不建议在生产中使用。但相信在2-3年后,mysql-proxy必会成熟的。
对于阿里系的amoeba,经常会出现cpu报100%的问题,还有amoeba不支持事务,不支持存储过程等,所以也不完善。
另外,爱可生商业版的读写分离软件一个大概8万的样子,具体得需要咨询该司的销售了。
淘宝有个TDDL读写分配方案,复杂度相对较高。当前公布的文档较少,只开源动态数据源,分表分库部分还未开源,还需要依赖diamond,不推荐使用。
最后,本文是笔者根据此项目整理的文档,如有错误请指正。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28916011/viewspace-1719675/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/28916011/viewspace-1719675/