分享MYSQL中的各种高可用技术(源自姜承尧大牛) - 桦仔

标签: 分享 mysql 技术 | 发表时间:2014-07-12 00:59 | 作者:桦仔
出处:

分享MYSQL中的各种高可用技术(源自姜承尧大牛)

图片和资料来源于MYSQL大牛姜承尧老师( MYSQL技术内幕作者

姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发

mysql高可用各个技术的比较

数据库的可靠指的是数据可靠 

数据库可用指的是数据库服务可用

可靠的是数据:例如工商银行,数据不能丢失

可用的是服务:服务器不能宕机

 


方案一:MYSQL主从复制(单活)

投票选举机制,较复杂

MySQL本身没有提供replication failover的解决方案,自动切换需要依赖 MHA脚本

可以有多台从库,从库可以做报表和备份

 


方案二:双主(单活),failover比单主简单

同样,自动切换需要 MMM脚本

缺点是某个主挂掉了,他下面的slave同样挂掉


方案三:双主配SAN存储(单活)

 

这个架构跟方案二是一样的,只不过两个master之间不需要同步数据,因为他们用的是共享磁盘

这个方案是 有钱人方案,无论哪个主挂掉都不会引起其他的slave挂掉,但是SAN存储死贵。。

像通信行业中国联通这些公司有用到

某个主挂掉了,下面的slave不会挂掉

注意:failover之后不会预热,数据没有预先加载到内存中,切换之后一段时间内存储会有一定的性能影响

 


方案四:DRBD  双主配 DRBD (单活)

结构跟方案三一样,唯一不同的是没有使用SAN网络存储 ,而是使用 local disk

由于是实时复制磁盘数据,性能会有影响

人们把DRBD称为 “屌丝的SAN”

POOR MAN'S SAN:穷人的SAN

 

 

 


方案五:NDB CLUSTER

 

国内用NDB集群的公司很少,貌似有些银行有用

NDB集群不需要依赖第三方组件,全部都使用官方组件,能保证数据的一致性

某个数据节点挂掉,其他数据节点依然可以提供服务

管理节点需要做冗余以防挂掉

缺点是:管理和配置都很复杂,而且某些SQL语句例如join语句需要避免

 


方案六:第三方的Tungsten软件

使用java编写,不是MYSQL内置的

同样是MYSQL数据库复制,不过他不是用MYSQL内置的组件来做的

不但支持MYSQL数据库复制也支持异构数据库的复制,而且对异构数据库复制支持较好,例如MYSQL复制到ORACLE


方案七:网易的INNOSQL

类似于SQLSERVER的 镜像高安全模式

High Safety 模式 (也就是同步模式)没有 witness服务器

数据库在Principle的事务, 需要马上得到mirror的确认,才能完成。这种情况下,Mirror和Principle的数据是同步的。

但是因为所有的事务需要mirror的确认,所以性能可能会有所影响。

区别:innosql的slave可以读,镜像的slave(从库)不可读

保证数据不会丢失,数据的高可靠性

 

mysql5.7开始支持这种模式

 

 


总结

每种方案都有不同的特点,配置和应用场景也各有不同

有些偏向于成本低的,有些偏向于成本高的,有些偏向于数据的可靠性,有些则偏向于数据库的可用性

反正各个方案都各有优缺点,DBA要结合自己公司的业务情况进行选择合适自己业务情况的高可用方案

 

更多参考资料:

读写分离:Amoeba

Ubuntu10下MySQL搭建Amoeba系列(文章索引)

集群技术: 数据库集群技术漫谈

 

如有不对的地方,欢迎大家拍砖o(∩_∩)o 


本文链接: 分享MYSQL中的各种高可用技术(源自姜承尧大牛),转载请注明。

相关 [分享 mysql 技术] 推荐:

MySQL分区技术

- - 数据库 - ITeye博客
mysql分区技术是mysql5.1以后出现的新技术,能替代分库分表技术,它的优势在于只在物理层面来降低数据库压力. 常用的MySQL分区类型:. 1.RANGE分区:基于属于一个给定的连续区间的列值,把多行分配给分区(基于列). 2.LIST分区:类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合的某个值来进行选择(基于列值是固定值的).

分享MYSQL中的各种高可用技术(源自姜承尧大牛) - 桦仔

- - 博客园_首页
分享MYSQL中的各种高可用技术(源自姜承尧大牛). 图片和资料来源于MYSQL大牛姜承尧老师( MYSQL技术内幕作者). 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发. mysql高可用各个技术的比较. 数据库的可靠指的是数据可靠 . 数据库可用指的是数据库服务可用. 可靠的是数据:例如工商银行,数据不能丢失.

MySql中的常见技术

- - 数据库 - ITeye博客
MySQL 存储引擎该如何选择. 一、InnoDB支持事务,MyISAM不支持,这一点是非常之重要. 事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而MyISAM就不可以了. 二、MyISAM适合查询以及插入为主的应用,InnoDB适合频繁修改以及设计到安全性就高的应用. 三、InnoDB支持外键,MyISAM不支持.

Mysql数据库索引查询优化的分享

- - 膘叔
这是昨天SAE分享的一篇文章,开始的时候,我看了一遍,发现好象没有什么特别的内容,但再仔细看的时候,发现居然可以这样做.       我们要访问的表是一个非常大的表,四千万条记录,id是主键,program_id上建了索引.       执行一条SQL:.       这条SQL非常慢. 我们原以为处理记录太多的原因,所以加了id限制,一次只读五十万条记录.

淘宝内部分享:怎么跳出MySQL的10个大坑

- - 极客521 | 极客521
编者按:淘宝自从2010开始规模使用MySQL,替换了之前商品、交易、用户等原基于IOE方案的核心数据库,目前已部署数千台规模. 同时和Oracle, Percona, Mariadb等上游厂商有良好合作,共向上游提交20多个Patch. 目前淘宝核心系统研发部数据库组,根据淘宝的业务需求,改进数据库和提升性能,提供高性能、可扩展的、稳定可靠的数据库(存储)解决方案.

淘宝内部分享:MySQL & MariaDB性能优化

- - 极客521 | 极客521
MySQL是目前使用最多的开源数据库,但是MySQL数据库的默认设置性能非常的差,必须进行不断的优化,而优化是一个复杂的任务,本文描述淘宝数据库团队针对MySQL数据库Metadata Lock子系统的优化,hash_scan 算法的实现解析的性能优化,TokuDB·版本优化,以及MariaDB·的性能优化.

php+mysql+memcache实战型技术测试(答案公布)

- 逆风迎上 - caoz的和谐blog
出两个变态的题目,题目很变态,但是都是实战中遇到的真实案例,. 1:我写一个程序,既要使用mysql也要使用memcache,. 第一行是 mysql_connect,第二行是memcache_connect. 换过来写,第一行是memcache_connect,第二行是mysql_connect.

mysql技术内幕-innodb存储引擎读书笔记(上)

- - MySQLOPS 数据库与运维自动化技术分享
第一章、mysql体系结构和存储引擎. 1.1、数据库和实例的区别. 数据库:物理操作系统或其他形式文件类型的集合. 在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成. mysql数据库是但进程多线程的程序. 1.2、mysql的体系结构.

mysql技术内幕-innodb存储引擎读书笔记(中)

- - MySQLOPS 数据库与运维自动化技术分享
4.1、innodb存储引擎表类型. innodb表类似oracle的IOT表(索引聚集表-indexorganized table),在innodb表中每张表都会有一个主键,如果在创建表时没有显示的定义主键则innodb如按照如下方式选择或者创建主键. 首先表中是否有唯一非空索引(unique not null),如果有则该列即为主键.

mysql技术内幕-innodb存储引擎读书笔记(下)

- - MySQLOPS 数据库与运维自动化技术分享
锁是区别文件系统和数据库系统的一个关键特性. 锁是用来管理对共享文件的并发访问. innodb会在行级别上对数据库上锁. 不过innodb存储引擎会在数据库内部其他多个地方使用锁,从而允许对不同资源提供并发访问. 例如操作缓冲池中的LRU列表,删除,添加,移动LRU列表中的元素,为了保证一致性,必须有锁的介入.