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

灵活运用MYSQL的各种高可用技术来达到下面各种级别的高可用要求
要达到99.9%:使用MYSQL复制技术
要达到99.99%:使用MYSQL NDB 集群和虚拟化技术
要达到99.999%:使用shared-nothing架构的GEO-REPLICATION和NDB集群技术
Gluster Geo-replication是什麼?
Gluster Geo-replication(简称geo-replication)是一种异地灾备技术,
它主要应用于把集群中的一个存储,近乎即时地(near real-time)透过公网(wan)备份到远端的机房

各种高可用级别允许的宕机时间

DRBD:网络磁盘的RAID1

方案一: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中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...
- 转://Oracle 高可用技术与云基础架构
众所周知Oracle云基础架构已经在越来越多的行业里应用.大家了解云基础架构是如何演进的嘛?可能有人会说Oracle高可用技术是组成云架构的基础,那它们的关系是怎么样的?大家又了解Oracle高可用技 ...
- (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨
原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳 ...
- mysql主备切换[高可用]
到这一步的时候, 是主备部署已经处理好, 请关注:mysql主备部署[高可用] 这次使用的是keepalived-1.2.22.tar.gz版, 官网地址:keeplived官网 笼统知识请自行查询百 ...
- MySQL基于域名做高可用切换(Consul初试)
一,Consul功能介绍 服务发现 - Consul的客户端可用提供一个服务,比如 api 或者mysql ,另外一些客户端可用使用Consul去发现一个指定服务的提供者.通过DNS或者HTTP应用程 ...
- 技术分享 | MySQL中MGR中SECONDARY节点磁盘满,导致mysqld进程被OOM Killed
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 在MGR测试中,人为制造磁盘满问题后,节点被oom killed 问题描述 在对 ...
- MySQL集群架构:MHA+MySQL-PROXY+LVS实现MySQL集群架构高可用/高性能-技术流ken
MHA简介 MHA可以自动化实现主服务器故障转移,这样就可以快速将从服务器晋级为主服务器(通常在10-30s),而不影响复制的一致性,不需要花钱买更多的新服务器,不会有性能损耗,容易安装,不必更改现有 ...
- 【独家】终生受用的Redis高可用技术解决方案大全
最近很多朋友向我咨询关于高可用的方案的优缺点以及如何选择合适的方案线上使用,刚好最近在给宜人贷,光大银行做企业内训的时候也详细讲过,这里我再整理发出来,供大家参考,如有不妥之处,欢迎批评指正,也欢迎推 ...
- 25 | MySQL是怎么保证高可用的?
在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能 ...
随机推荐
- 3dsMax脚本插件开发之路
经过这两个月的努力,RDF2.1的升级开发已经基本完成,只待过些天正式发布.所以现在总算有时间思考,来整理一下自己的思路,以及今后的方向. 回顾当初,1.0是纯Maxscript编写的,一机一码的方式 ...
- tz2txt的安装与使用
tz2txt是一个开源的小工具,用于把帖子的楼主发言保存为txt文件. 目前支持天涯社区.新浪论坛(大部分版块).百度贴吧. 本文介绍tz2txt的安装与使用. 本文目录: 一.下载.安装 二.使用t ...
- [笔记]Modelsim系列01:编译Altera库的方法
意义:一劳永逸,不用每次对那些包含Quartus II生成文件的工程进行功能仿真时,都需要重新编译一堆东西.节约时间成本. 版本:ModelSim SE 6.5d 打开Modelsim软件,默认会打开 ...
- 获取Spring容器中的Bean
摘要 SpringMVC框架开发中可能会在Filter或Servlet中用到spring容器中注册的java bean 对象,获得容器中的java bean对象有如下方法 Spring中的Applic ...
- phpunit.xml
<phpunit bootstrap="vendor/autoload.php"> <testsuites> <testsuite name=&quo ...
- Linux内核分析第二周学习总结:操作系统是如何工作的?
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.函数调用堆栈 ...
- 《Linux内核设计与实现》读书笔记 第二章 从内核出发
一.获取内核源码 1. Git git实际上是一种开源的分布式版本控制工具. Linux作为一个开源的内核,其源代码也可以用git下载和管理 - 获取最新提交到版本树的一个副本 - $ git clo ...
- Asp.net Session 保存到MySql中
一 网站项目引入"mysql.web.dll" 二 web.config配置中添加mysql数据库连接字符串 <connectionStrings> <remov ...
- 在Linux中的文本模式下手动安装 Parallels Tools
1.启动虚拟机. 2.当看到提示 X Server 无法启动的消息时,使用 Ctrl+Option+F1(Ctrl+Alt+F1)切换到另一个虚拟控制台并输入登录信息. 3 从“虚拟机”菜单中选择“安 ...
- delete-by-query插件