前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于Oracle的私有云架构探析(连载二)@【DTCC干货分享】

基于Oracle的私有云架构探析(连载二)@【DTCC干货分享】

作者头像
沃趣科技
发布2018-03-23 17:53:45
1.1K0
发布2018-03-23 17:53:45
举报
文章被收录于专栏:沃趣科技沃趣科技
• RAC One Node

根据整合的数据库的SLA要求,还需要决定整合数据库所选用的数据库类型,在数据库的类型上,11GR2版本之前,要不是单实例要不是RAC,单实例不具有HA的功能,只能做冷的HA,通过使用类似HACMP之类的软件进行切换,有不可用时间,而且由于引入了第三方的HA软件,让整个架构、运维变得复杂,如果使用RAC架构,那么对于数据库整合来说,显得有点资源浪费,RAC要求至少是双节点,对于整合的数据库来说,一般都是非核心库,往往压力不大,对于高可用的需求也没有那么高,因此使用RAC显得有点浪费,那么有没有一种折中的方案呢?既然Oracle的ClusterWare一个很重要的功能就是为其上的资源提供监控、故障处理、故障切换服务,为什么不能在ClusterWare之上跑单节点的RAC,然后在发生故障后对资源进行尝试重启,如果重启不成功,在另外的节点再进行实例的拉起。RAC One Node就是这样一种技术,顾名思义,RAC One Node是单节点的RAC,它跑在GI之上,通过GI基础组件实现HA,借助于GI集群件,RAC One Node作为其上的资源在发生故障后,可以尝试进行重启或切换,这一切都会自动完成,而不需要人工干预。RAC One Node除了能做故障切换外,还可以实现有计划性的在线漂移。漂移过程中,会阶段性的存在2个实例,等旧实例上的事务都完成后会被关闭,然后新实例对外提供服务。客官可能会问,在线迁移有啥用?做了数据库的整合后,一台机器上可能跑的就是多个数据库实例了,如果发现某些机器上的负载比较高,那么就可以使用RAC One Node的在线迁移功能,把负载较高的主机上的一些实例在线的迁移到其他负载低的机器上。仔细想想,Oracle能做到这一点还挺不容易的,因为里面涉及到了一些技术细节,只是你还没认识到。11GR2之前,增加实例是一个复杂的过程:

增加了一个RAC 实例,需要经过上面一系列的繁琐的操作。但是11GR2后,RAC One Node的在线迁移,本质上其实就是Oracle自动在另外一个节点帮你增加了一个实例,而创建REDO THREAD,UNDO这些事情它都已经帮你做好了,不用DBA再去干预做什么。

不过这里需要强调,RAC One Node是单节点的RAC,在发生故障后才去做切换的,也就是cold failover,那么实例在发生故障后其实是有不可用的时间的,所以对于RAC One Node的使用场景就是那些对于可用性要求不是那么高的应用场景,毕竟对于任何企业来说,不是所有的数据库可用性要求都是零RTO,RPO,因此找对合适的应用场景,RAC One Node就大有用武之地,它占用的系统资源更少,整合的密度可以更大,而且具有HA。下面我会详细讲解下RAC One Node的几个特性:在线漂移、故障切换、弹性伸缩。

在线漂移

数据库一旦做了整合,一个主机之上就可能会有多个实例,实例之间可能会互相影响性能,如果DBA发现某台主机上的负载较高,或者由于其他原因需要对RAC One Node进行节点迁移,就可以使用RAC One Node的在线漂移功能,DBA通过命令人为的把数据库实例迁移到其他机器上运行,在迁移过中,RAC One Node会等待旧的实例上的事务完成,同时在目标机器上启动一个新实例,在迁移这段时间内,会有两个实例以active-active双活的模式运行,当旧实例上的事务都完成后,这些连接会被转移到新的实例上来,一旦所有的连接转移工作都完成后,旧实例会被关闭,整个转移过程也完成了。

RAC One Node的在线漂移时间窗口默认为30分钟,在这段时间内,Oracle会等待旧实例上的事务完成,如果超过这个时间窗口后,还有事务未完成,那么会被强制取消,实例也会被强制关闭,可以通过srvctl命令增加-w参数来增加或减少这个默认的时间窗口。

漂移的命令是通过srvctl来完成的,具体用法如下:

其中的参数机器说明如下:

• -d:数据库的名称

• -n:目标节点

• -w:等待旧实例事务完成的时间窗口

• -a:放弃失败的在线漂移

下面给出一个在线漂移的例子,让读者更为直观的感受一下在线漂移的过程。本例中会把oltp8从节点RAC2迁移到目标节点RAC1.首先观察一下数据库的当前状态是否正常:

oltp8为RAC One Node只有一个实例oltp8_1,当前运行在节点RAC2上,在线漂移的状态为INACTIVE。接下来我们对RAC One Node进行在线漂移,这是通过srvctl的relocate语法来完成的

漂移过程中,另开一个会话观察漂移的状态:

输出的信息非常的详细,oltp8_1这个实例正运行在RAC2上,ACTIVE关键字说明在线漂移也正在进行中,漂移的源端为RAC2,目标端为RAC1,并且目标端的实例名发生了变化:oltp8_2。

漂移完成后再查看状态,在线漂移状态已经为INACTIVE,实例oltp8_2也已经运行在新的节点上了

这里补充一个小细节,上面我已经提到过,这种在线漂移实例名是会发生变化,其实内部的操作就是在另外的节点帮我们自动的增加了一个实例,手工增加过实例的朋友都知道增加实例一般需要增加redo thread,增加undo表空间,那我们来看看,Oracle自动帮我们增加的实例有没有帮我们来搞定这些事

上面的内容显示,有2个undo表空间,undotbs1 是之前oltp8_1实例用的,而undotbs2是新增加的。不过遗憾的是,这个undo表空间比较小,一般难以满足我们的要求。这里告诉大家一个小技巧,可以创建完RAC One Node后,手工增加undo表空间和redo thread,Oracle非常的智能,下次做实例漂移,它会自动使用上你手工创建的这些redo thread和undo表空间了,而且大小也都符合你的要求。

同样,redo thread也都帮我们创建好了,包括对应的日志文件。

故障切换

RAC One Node不但可以做有计划性的在线漂移,同时对于主机等故障发生后,通过GI的HA组件把失败主机上的实例迁移到其他节点,不过这种迁移有不可用时间。 下面我们通过杀死CRS进程的方式,模拟主机故障,来观察RAC One Node的故障切换。

oltp8正在运行的节点1上,在节点1上杀掉CRS进程

在RAC2节点上观察数据库的状态,实例已经为not running状态。

通过crsctl stat命令查看故障切换是否已经发生

从crsctl stat res -t的输出可以清楚看到,集群正在RAC2节点上尝试拉起实例。过2分钟再次查看,数据库已经完成故障切换,整个过程不到五分钟,非常的棒!

虽然RAC One Node的HA是Cold Failover的,但是对于一些边缘、测试、开发环境,对于可用性要求不是那么高的环境,它都是一种非常好的整合方案。试想,有几个客户会把自己最为核心的数据库来进行整合呢?

RAC One Node扩展性

RAC和RAC One Node之间可以通过srvctl命令轻松的做转换,我们以把RAC One Node扩展成多个节点的RAC。这里给出转换的示例:

查看当前RAC One Node的运行状态

运行在RAC2节点上,运行状态正常。

使用srvctl convert命令进行转换,-c参数代表了要把RAC One Node扩展成标准的RAC。

转换完成后,查看数据库的实例状态

非常好,Oracle帮我们自动增加了实例,而且增加的实例已经启动。需要注意,笔者的测试环境为12C,如果为11GR2,增加的实例需要DBA手工去启动。

就这样轻松的完成了RAC One Node到RAC的转化。

同样我们看如何来“缩”,把RAC 转化为RAC One Node,同样通过srvctl 命令来完成,-c参数代表了把RAC“收缩”为RAC One Node.

提示有2个实例在运行,看来需要关闭一个实例才能进行RAC到RAC One Node的转化

转换完成后,再次查看数据库实例的状态

oltp8已经只有一个实例在运行了。

从上面的实验过程中可以看出,RAC One Node具有非常好的可用性、伸缩性,而且这一切的操作都非常的简便。

到这里你已经对RAC One Node有了一定了解,由于是以单实例的状态运行,而且还具有非常高的可用性,那么用来做数据库的整合太合适了,整合的密度可以很大,适用于那些对于可用性要求没有那么的高的开发、测试、QA、边缘系统。

12C CDB

12C出现了容器数据库CDB,虚拟化整合方案共享了宿主机,多实例整合方案共享了宿主机和OS,而12C的容器数据库共享了宿主机、OS和实例,共享的层次越多,内耗越少,性能越高,整合的密度就可以越大,但隔离性上会弱一些,一旦实例层面出现问题,所有的PDB都会出问题。Oracle通过在12C增强了Resource Manager的功能来进一步提供PDB之间的资源隔离实现。由于PDB的创建可以基于模板和克隆,因此资源供应速度上得到了很大的提升。12CR1版本,一个容器数据库最多支持252个PDB,到了12CR2版本已经增强到4096个。笔者所在公司-沃趣科技也一直在研发12C的相关数据库平台和产品,就我们的使用测试情况来看,12CR1版本的BUG还比较多,有些BUG在MOS上还没有记录,因此建议不要着急上12C,等12CR2发布后再做决定。

• 资源快速供应

资源快速供应是DBaaS出现之后延伸出来的一个概念,意在用户通过自服务的方式去快速的获取资源。以前数据库简直就是世界的中心,想申请一个数据库资源从项目的立项到最终获得资源,要经过相对漫长的时间,所有人都要围着它转,而DBaaS做为一个大的数据库平台,有着“无限”大的可用性能、可用容量,因此只需要用户在云平台之上点点鼠标,就能完成资源的获取,Oracle 12C出现的容器数据库让资源的获取更加的快速和便捷,它本身通过数据库的模板来快速提供PDB。要实现资源的快速供应,你需要:

• 有一个强大的硬件平台,比如一体机产品

• 有一个云平台,开发、测试、QA可以便捷的在云平台之上完成资源的申请和获取

• 决定使用何种技术提供资源,PDB? SCHEMA?DB?

目前我们沃趣科技也是在研发DBaaS云平台产品DBPool,在其上可以方便的完成资源的申请、获取、使用、下线,资源的整个生命周期都可以在平台之上完成,可以极大提升获取资源的敏捷性,为企业的数据库提供一个标准化的操作平台。

• 服务质量管理QoS

数据库做了整合之后,面临着几个问题:

• 资源隔离如何做,如果不做资源隔离,就难以保证数据库对外的服务质量,实例之间、PDB之间会互相影响

• 可不可以对资源进行灵活的调配,以满足不同业务,不同时间段的对资源的需求情况

• CPU资源隔离技术Instance Caging

我们首先来看第一个问题,资源隔离如何做,如果资源是无限的,就不需要对他们进行管理,资源隔离是DBaaS里一个非常重要的概念,也是每一个DBaaS平台都需要去解决的核心问题。

以前使用Oracle的方式大多都是一台机器跑一个实例,但是数据库一旦进行整合,一台机器可能就不是跑一个实例了,而是多个实例,实例一多,一个现实的问题摆在面前:资源隔离如何做?

为了保证每个数据库实例的服务质量,你需要提前对每个实例分配资源,在它的整个活跃周期内都不能跑出给它分配的数据库资源。如果资源不加以不加限制,就可能出现这样的情况:一个优先级非常低的业务由于应用程序BUG进而导致侵占了主机上的绝大部分CPU资源,最终导致主机上其他重要度高的应用受到非常大的影响,业务被降级。如下图:

Instance Caging就是这样的技术,用于CPU资源的管控,它能够管理CPU在实例间的分布,确保每个实例可以使用的CPU资源不跑出它的一亩三分地。

Instance Caging相对于其他资源管理的技术,例如操作系统的Cgroup,它具有一些天然的优势:

• Instance Caging是11GR2自带的功能,不需要额外安装软件

• 它是免费的,不需要支付额外的licence费用

• 由于是自带的功能,因此它能与Oracle数据库库高度的集成,可以感知到数据库内部的负载

• 最为重要的一点,它的使用特别的简便

关于Instance Caging使用特别简便这一点,请看下一节12C版本可以利用数据库的参数processor_group_name结合LINUX Cgroup来一起使用,这部分内容本文不做详细介绍。

待续

基于Oracle的私有云架构探析(连载一)@【DTCC干货分享】

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 沃趣科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档