Oracle和MySQL的高可用方案对比及用法详解
- 更新时间:2020-07-26 09:30:56
- 编辑:鱼倩美
参考资料
- 《Linux环境下Qt4图形界面与MySQL编程》代码资料 配套资源 / 27.92 MB / 邱铁 周玉 张民垒 推荐度:
- 精通Oracle PL/SQL PDF 电子书 / 55.1 MB / 麦克唐纳,蔡伟毅 推荐度:
- MySQL开发与实践 PDF 电子书 / 45.3 MB / 付森//石亮 推荐度:
- Oracle云计算平台实战:IaaS与PaaS应用详解 PDF 电子书 / 277 MB / 石雨 推荐度:
- MySQL是怎样运行的:从根儿上理解 MySQL PDF 电子书 / 119 MB / 小孩子4919 推荐度:
正文内容
Oracle和MySQL的高可用方案对比分析
关于Oracle和MySQL的高可用方案,其实一直想要总结了,就会分为几个系列来简单说说。通过这样的对比,会对两种数据库架构设计上的细节差异有一个基本的认识。Oracle有一套很成熟的解决方案。用我在OOW上的ppt来看,是MAA的方案,今年是这个方案的16周年了。
而MySQL因为开源的特点,社区里推出了更多的解决方案,个人的见解,InnoDB Cluster会是MySQL以后的高可用方案标配。
而目前来看,MGR固然不错,MySQL Cluster方案也有,PXC,Galera等方案,个人还是更倾向于MHA.
所以本文会分为几个部分来解读,先拿RAC和MHA来做一个基本的对比。
Oracle的解决方案在阿里快速发展时期支撑起了核心业务的需求。大概是这样的架构体系,看起来很庞大。里面的RAC算是一个贵族,用昂贵的商业存储,网络带宽要求极高,前端大量的小机业务还有不菲的licence费用。非常典型的IOE的经典架构。
如果要考虑异地容灾,那么资源配置要double,预算翻番。
MySQL的架构方案相对来说更加平民化,普通的pc就可以,但是数量级要高,做业务拆分,水平拆分就能够横向扩展出非常多的节点,很多大互联网公司的MySQL集群规模都是几百几百的规模,上千都不稀奇。如此之多的服务资源,发生故障的概率还是有的,保证业务服务的可持续性访问,是技术方案的关键。如果按照MHA的架构,基本上就是MHA Manager节点来负责整个集群的状态,好比一个居委会大妈,对住户的大大小小的事情都了如指掌包打听。
当然上面的说法过于笼统,我们从一些细节入手。比如先来说说网络的事情。
Oracle对于网络的要求还是很严格的,一般都是要2块物理网卡,每台服务器需要至少3个IP, Public IP,private IP,VIP,除了共享存储,至少需要2个计算节点。
private IP是节点间互信的,Public IP和VIP在一个网段,简单来说,VIP是对外的,是public IP所在网络的漂移IP,在10g里面都是通过VIP来做负载均衡的,11g开始有了scan-IP,原来的VIP还是保留,所以Oracle里面的网络配置要求还是很高的。抛开共享存储,搭建的核心就是网络配置了,网络通则通。
scan-IP还可以继续扩展,最多支持3个scan-ip,如下图所示
当然网络层面不只是这些,这方面的亮点Oracle就很专业了。我们有必要了解下TAF,在我的书中《Oracle DBA工作笔记》中,我这样写道:
TAF(Transparent Application Failover)是Oracle中对应用透明的故障转移,在RAC环境中使用尤其广泛。在RAC中Load Balance这块确实做了很大的改进,从10g版本开始的多个VIP地址的Load Balance,到11g版本中的SCAN,做了很大的简化。
而在Failover的实现中,还是有一定的使用限定,比如11g中默认的SCAN-IP的实现其实默认没有Failover的选项,如果两个节点中的其中一个节点挂了,那么原有的连接中继续查询就会提示session已经断开,需要重新连接。客户端TAF主要会讨论Failover Method和Failover Type的一些简单内容。
(1)Failover Method
Failover Method的主要思路就是换取故障转移时间,或者换取资源来实现。
可以这样来理解,假设我们存在两个节点,如果某个session连接到了节点2,然而节点2突然挂了,为了更快处理Failover这种情况,Failover Method有preconnect和basic两种。
— preconnect这种预连接方式还是会占用较多的资源使用,在各个节点上会预先占用一部分额外的资源,在切换时会相对更加平滑,速度更快。
— basic这种方式,则在发生Failover时,再去切换对应的资源,中间会有一些卡顿,但是对于资源的消耗相对来说要小很多。
简单来说,basic方式会在故障发生时才去判断,而preconnect则是未雨绸缪;从实际的应用来说,basic这种方式更加通用,也是默认的故障转移方式。
(2)Failover Type
Failover Type实现更加丰富而且灵活,非常强大。这个时候控制粒度可以针对用户SQL的执行情况进行控制,有select和session两种;通过一个小例子说明一下。
比如,我们有个很大的查询在节点2上进行,结果节点2突然挂了,对于正在执行的查询,比如说有10 000条数据,结果刚好故障发生的时候查出了8 000条,那么剩下的2 000该怎么处理。
第一种方式就是使用select;即会完成故障切换,继续把剩下的2 000条记录返回,当然中间会有一些上下文环境的切换,对于用户是透明的。
第二种方式是session;即直接断开连接,要求重新查询。
在10g版本中借助于VIP的配置达到Load Balance+Failover的配置如下:
racdb= (DESCRIPTION = (ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.101)(PORT= 1521)) (ADDRESS= (PROTOCOL= TCP)(HOST=192.168.3.201)(PORT= 1521)) (LOAD_BALANCE = yes) (FAILOVER = ON) (CONNECT_DATA = (SERVER= DEDICATED) (SERVICE_NAME = racdb) (FAILOVER_MODE = (TYPE= SELECT) (METHOD= BASIC) (RETRIES = 30) (DELAY = 5)))) 如果11g的SCAN-IP也想进一步扩展Failover,同样也需要设置failover_mode和对应的类型。 RACDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = RACDB) ) )
从这个角度来看Oracle的方案真是精细。再来看看MySQL的方案。
分布式的方案,让MySQL看起来像一把瑞士牛刀,对于网络层面的要求,几乎可以说MySQL没有什么要求,申请一主一从,那么就只需要4个IP即可(主,从,VIP,MHA_Manager(考虑一个manager节点)),一主两从是5个。
这一点上MySQL原生并不支持所谓的负载均衡,可以通过前端的业务来分流,比如使用中间件proxy,或者持续的拆分,达到一定的粒度后,通过架构设计的方式来满足需求。因为基于逻辑的复制,很容易扩展,一主多从都是很常见的,代价也不高,延迟不能说没有,只是很低,能够适应绝大部分的互联网业务需求。
而说到触发MHA切换的条件,从网络层面来看,如下的红点都是潜在的隐患,有的是网络的中断,有的是网络的延迟,发生故障的时候,保数据还是保性能稳定,都可以基于自己的需求来定制。从这一点上来说,丢失数据的概率是有的。绝对不是强一致性的无损复制。
整体来看两种方案,RAC是集中共享,除了存储层面的共享外,网络层面的组播其实也会提高节点间通信的成本,所以RAC对于网络的需求很大,如果存在延迟是很危险的,发生了脑裂就很尴尬了。MySQL MHA的方案是分布式的。支持大批量的环境,节点间通信的成本相对来说要低很多。但是从数据架构的角度来说,因为是复制的数据分布方式,所以对于存储尽管不是共享存储,但是对于存储的成本还是高于RAC(不是说存储的价格,是存储的数据量大小).
相关教程
-
Python3连接SQLServer、Oracle、MySql实例代码
这篇文章较详细的给大家介绍了Python3连接SQLServer、Oracle、MySql的方法,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
发布时间:2019-08-13
-
mysql迁移至Oracle数据库的实操方法
这篇文章主要为大家详细介绍了mysql数据库迁移至Oracle数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2019-11-03
-
深入理解mysql数据库和oracle数据库之间互相导入备份
今天小编就为大家分享一篇关于mysql数据库和oracle数据库之间互相导入备份,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
发布时间:2020-03-21
-
Oracle数据库系统原理
Oracle数据库系统原理(第2版) 包括数据库基本理论以及Oracle数据库系统知识两部分。主要包括关系模型基本理论、ER图及范式理论、安装Oracle 12c软件、SQL语言、Oracle的逻辑存储空间、索引原理
大小:112 MBOracle电子书
-
Oracle程序开发范例宝典
特惠。这书所选实例是诸多程序猿长期开发提炼出的,所选內容均来自具体新项目的开发,遮盖了程序编写中所涉及到的各个方面的技术。这种实例所涉及到的难题全是十分好用的,可以给阅读者以启迪,减少程序流程开发全过程。 好用。这书全部实例內容都以处理开发者在程序编写中碰到的具体难题和开发中应当把握的技术为管理中心,密不可分紧紧围绕实践活动选料,每一个实例都能够单独处理某一方面难题。有的能够处理工作上的难点,有的能
大小:140.5 MBOracle电子书
-
Oracle数据库开发与应用
《Oracle数据库开发与应用》分为5部分共25章,涵盖了数据库入门、数据查询、数据修改和维护、数据库编程、数据库管理。《Oracle数据库开发与应用》使用的开发环境是Oracle 11g+PL/SQL Developer
大小:36.6 MBOracle电子书
-
名师讲坛:Oracle SQL入门与实战经典
小说式Oracle从入门到精通,附教学讲义,适合10g/11g/12c,通过例子来解释复杂的计算机和数据库概念,是一本Oracle SQL的实用入门教材
大小:114 MB数据库电子书
-
Oracle数据库日常维护手册
Oracle 数据库日常维护手册主要介绍oracle数据库方便的一些日常维护需要检查与注意地方,需要的朋友可以参考一下。 目 录 1.检查数据库基本状况 1.1.检查Oracle实例状态 1.2.检查Oracle服务进程 1.3.检查Oracle监听状态 2.检查系统和oracle日志文件 2.1.检查操作系统日志文件 2.2.检查oracle日志文件 2.3.检查Oracle核心转储目录 2.4.检查Root用户和Oracle用户的email 3.检查Oracle对象状态 3.1.检查Oracle控制文
大小:491 KBOracle