|
回帖奖励 +50
mysql cluster适合高并发基于主键的查询,它是share-nothing的架构数据会自动的按主键hash分布在数据节点上,可以支持在线的节点扩展,通常mysql的ha方案都无法做到很好的写扩展,就是说同时只有一台master能够写,其他的slave都只做读,无论是 M-S MHA DRBD都无法扩展写的能力。而mysql cluster不同,它有三种类型的节点角色,数据节点:默认数据存储在内存中,也可以存储在磁盘中,根据所配副本NoOfReplicas的份数,组织节点与节点组的关系,例如副本为2,4个数据节点,那么两个节点就为一组,同组内的节点之间互为副本,数据是一致的,不同组之间数据不同,数据就平均的分配到每个节点组上,所以当每个节点组crash 掉一个节点,依然可以访问数据,这是数据节点的高可用性。 管理节点:负责调度数据节点与API节点的通讯,配置,监控和仲裁,通常会配两个管理节点保持高可用性。 API节点:有两种含义,一是mysqld进程,通过sql的方式访问ndb存储引擎,前面配合lvs能很好的做到负载均衡和高可用,二是ndb api,之间操作数据,不需要sql解析,后者的性能要高很多,7.2版 官方宣传的每分钟10亿查询就是通过这种方式。 mysql cluster对网络要求非常高,至少是万兆网络,当做一些复杂查询时数据节点之间需要搬数据,网络性能是一个瓶颈。
吐糟了很多,关于和innodb性能的对比,应该说达到一定数据量级和并发,mysql cluster还是有优势的,它的扩展性和高可用性。
目前mysql cluster也存在很多问题,在测试的过程中经常会遇到些未知的报错,诊断机制目前也不完善,对比6.x系列,7.x已经改善很多了,oracle还在持续改进中,7.2改进了join查询性能,7.3还会加入外键支持,希望未来能加入更好的错误诊断机制,现在国内使用mysql cluster的用户应该还不多吧,我也在摸索中,希望有同行一起交流,吐糟完毕。 |
|