需要MySQL高可用吗?
问题似乎很明显,但是有时却忽略了。实际上这是一个投入和产出的问题,投入越大,你获得数据安全性就越高,所以这个问题可以归结为”你的服务器宕机成本是多少?“,如果你的宕机成本小于$10/hour,那基本上你不需要高可用方案了,So,不用浪费时间看下文了。
如何确定哪种高可用方案对你最好?
当前,MySQL高可用有下面几种,从简单到非常复杂,我们排列一下
- MySQL replication with manual failover
- Master-Master with MMM manager
- Heartbeat/SAN
- Heartbeat/DRBD
- NDB Cluster
就目前为止,可能不是上面的某一个方案就能完全适合你,大部分情况下是多种方案联合起来。要选择上面哪种方案,其实还是取决于你的对宕机时间的容忍,越复杂的方案,宕机时间越短,但是成本也就越高,需要仔细计算你的预算。
1.你需要哪个级别的HA?
所有的技术都不能保证100%的系统有效,同样,不同的技术提供的系统有效级别也不同。因此第一个重要的考虑因素便是有效级别,下面有一个对各种解决方案提供的有效级别评估表
有效级别 | 宕机时间( per year) | |
---|---|---|
Simple replication | 98 to 99% | 3天15小时 ~ 7天 |
Master-Master with MMM manager | 99% | 3天15小时 |
Heartbeat/SAN (depends on SAN) | 99.5% to 99.9% | 43.8小时 ~ 8.8小时 |
Heartbeat/DRBD | 99.9% | 8.8小时 |
NDB Cluster | 99.999% | 5分钟 |
根据上表,如果你的要求是99.99%,那么你可能只能选择NDB Cluster了,但是你只是要求99%,那选择范围就宽了很多。实际上,评估使用哪个有效级别还是很难的,需要仔细思辩。
2.能承受数据丢失吗?
显然,相对有效级别而言,可能你更关心数据的安全,你很可能使用innoDB存储引擎,因为MyISAM缺乏事务交易,而且不同步数据到磁盘。同样的,MySQL replication 采取异步处理,尽管它在master和slave之间传输数据非常快,但是仍然有丢失数据的机会。如果你能承受数据丢失,那么,你可以考虑“MySQL replication” 和“Master-Master with MMM manager”,否则,你就只能考虑别的方案了。
数据100%安全 | |
MySQL replication | 否 |
Master-Master with MMM manager | 否 |
Heartbeat/SAN (depends on SAN) | 是 |
Heartbeat/DRBD | 是 |
NDB Cluster | 是 |
3.你的应用程序仅用到了MyISAM特性吗?
包括全文索引,GIS索引在内的特性仅被MyISAM支持。“MySQL replication”和”Master-Master with MMM manager”解决方案对MyISAM支持的非常好。取决于你的应用程序,MyISAM全文索引可以被另外的搜索引擎替代,比如Sphinx替代,这样可以打破只能使用MyISAM存储引擎的限制。对于GIS索引,目前还没有替代的方案。
HA 解决方案 |
|
需要MyISAM全文索引或GIS索引 | “MySQL replication” 和 “Master-Master with MMM manager” |
不使用任何MyISAM特性 | 所有 |
可以用Sphinx替换MyISAM的全文索引 | 所有 |
4.什么是写负载
上述的HA解决方案在写负载方面并不相同。因为复制(replication)实现的原因,slave上仅有一个线程能处理写操作。如果复制主机(master)是多核CPU,而且有使用多线程的写操作,那么slave就可能无法和master保持一致。如果使用Linux下的共享存储模拟DRBD,大致能较低30%的写负载(严重依赖硬件条件),在写能力方面,你可以参考下面的表格
写能力 | |
MySQL replication | 正常 |
Master-Master with MMM manager | 正常 |
Heartbeat/SAN (depends on SAN) | 优秀 |
Heartbeat/DRBD | 好 |
NDB Cluster | 优秀 |
5.为什么样的增长度做计划
因为NDB Cluster是一个集成的共享环境(将数据库分隔到多台服务器上),如果你需要这个功能,你可以认真考虑这个方案,否则,除去写能力外,其他方案大致相等。
6.职员或者技术支持公司水平如何
有效级别和解决方案的复杂度有着直接的正比关系。为了达到期望的有效级别,内部或者外部维护HA配置的职员,就必须具备同等的能力和经验,参考下表:
专业级别 | |
MySQL replication | 一般 MySQL DBA 水平,加上一些系统管理能力 |
Master-Master with MMM manager | 较好的MySQL DBA 水平,加上较好的系统管理能力 |
Heartbeat/SAN (depends on SAN) | 较高的MySQL DBA 水平,较强的系统管理能力 |
Heartbeat/DRBD | 较高的MySQL DBA 水平,较强的系统管理能力 |
NDB Cluster | 对NDB知识非常了解,很高的MySQL以及系统管理技能 |
7.你有多少米米
最有一个需要考虑的问题便是预算了,复杂意味着昂贵。我们考虑项目的两个阶段。第一个是基本测试,也就是方案论证,包括硬件测试,数据导入,基本测试和文档化。另外一个阶段就是迁移到生产线,包括多方面测试,消防预演,完整的文档,监控,报警,备份,迁移,迁移后监控等。当然,这是迁移HA解决方案到产品线最安全的做法。下表是基于行业一般水平制的两个阶段需要的时间,考虑到一些非预计问题,所有时间都留有余地
概念认证 | 迁移到生产线 | |
MySQL replication | 4小时 | 12小时 |
Master-Master with MMM manager | 8小时 | 24小时 |
Heartbeat/SAN (depends on SAN) | 32小时 | 120小时 |
Heartbeat/DRBD | 40小时 | 120小时 |
NDB Cluster | 40小时 | 120+ 小时 |