oracle11gR2RAC原理解读.docx
- 文档编号:7403358
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:23
- 大小:524.32KB
oracle11gR2RAC原理解读.docx
《oracle11gR2RAC原理解读.docx》由会员分享,可在线阅读,更多相关《oracle11gR2RAC原理解读.docx(23页珍藏版)》请在冰豆网上搜索。
oracle11gR2RAC原理解读
oracle11gRAC的一些根本概念〔一〕
总的来说,oracle11gr2 RAC提供了以下功能:
1.高可用:
shared-everything模式保证了单节点的故障不会停止效劳,集群中的其他节点将快速接管
2.可扩展性:
多节点分担负载,可以提供远超单机数据库能提供的处理能力。
且增删节点可以在线完成,不需要停机
3.易用性:
多个数据库可以参加到一个集群中
4.低本钱:
RAC可以部署在标准硬件上,硬件上节省的本钱抵消了购置license的本钱
Oracle11g r2还提供了一个叫RACOneNode的新功能。
Oracle发现一些RAC的部署纯粹只是为了高可用,而虚拟化越来越多的被用户所使用,并成为了一个新的趋势。
OracleOneNode建立在以下根底之上:
OracleClusterware、OracleASM、Oracledatabase。
我们再来看一眼RAC的结构图
相比较单机数据库,RAC需要一个共享存储;一个私有网络来进行集群内部通讯;一个公有网络来连接应用和客户端;配置虚拟IP来提高节点故障时的连接速度,当一个节点出现故障,它的虚拟ip立即指向其他节点的ip上(假设不配置vip,当一个节点发生故障时,新的连接将会发生等待,直到与该节点ip的通讯出现timeout)。
Failover的连接配置
有两种连接方式可以实现数据库连接的failover
1.TAF(TransparentApplicationFailover)
让我们看一下官方文档。
TAF让OracleNet将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。
TAF可以配置为使用client端的(TransparentNetworkSubstrate)TNS连接字符串来连接,或者使用server端的效劳。
如果两种方式同时使用,那么使用server端的效劳配置。
TAF可以工作在两种模式下:
sessionfailover和selectfailover。
前者在failover时会重建失败的连接,后者那么能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,那么新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。
如果failover时,session执行了DML操作且未提交,那么failover后,假设不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402:
transactionmustrollback
TAF在dataguard中使用,可以自动进行failover
一个典型的使用了TAF的TNS连接串如下:
NEWSDB=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))
(LOAD_BALANCE=yes)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=dyora)
(FAILOVER_MODE=
(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=180)
(DELAY=5)
)
)
)
failover_mode参数介绍
failover_mode参数
说明
BACKUP
备用连接的网络效劳名。
假设使用了preconnect的连接方法,那么需要指定这个参数
DELAY
连接重试的时间间隔(秒)。
如果指定了RETRIES参数,假设不指定该参数,默认为1秒。
假设注册了callback,该参数将被忽略
METHOD
设置failover方法。
basic:
failover时才尝试连接备用实例的监听;preconnect:
每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换
RETRIES
failover后,尝试连接的次数。
如果指定了DELAY参数,那么RETRIES默认为5次。
假设注册了callback,那么该参数将被忽略
TYPE
OCI默认提供了3种类型:
session:
假设用户连接丧失,将在备用节点上重新创立;select:
除了重建连接外,将继续从翻开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none:
默认值,也可显示指定来禁用failover功能
2.FCF(FastConnectFailover)
oracle11g提供了FCF方式连接数据库,它支持JDBCThin和JDBCOCI驱动;与连接缓存(implicitconnectioncache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置
需要的条件:
启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用效劳名而非效劳标识符来连接数据库;JDBC运行的节点上配置并启用了OracleNotificationService(ONS);JDBC例程运行的java虚拟机必须包含并指向ORACLE_HOME
例子:
配置ONS
ods.setONSConfiguration(:
4200");
启用FCF
//declaredatasource
ods.setUrl(
"jdbc:
oracle:
oci:
@(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias)
(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name)))");
ods.setUser("scott");
ods.setConnectionCachingEnabled(true);
ods.setFastConnectionFailoverEnabled(true):
ctx.bind("myDS",ods);
ds=(OracleDataSource)ctx.lookup("MyDS");
try{
ds.getConnection();//transparentlycreatesandaccessescache
catch(SQLExceptionSE{
}
}
看糊涂了?
上面的java代码包含一个异常处理。
工作过程如下:
1.一个实例宕掉了,在缓存中留下一些过期连接
2.RAC产生一个事件,并将其发送给包含JDBC的java虚拟机
3.JVM中的后台线程找出所有受到该RAC事件影响的所有连接,通过sql异常(ORA-17008)通知它们关闭连接,并回滚事务
4.连接接收到sql异常并重新执行失败的操作
FCF与TAF相比有如下不同:
1.FCF支持应用级别的连接重试,由应用来决定failover时如何处理,是重新执行,还是抛出异常;TAF只能在OCI/NET的层面进行重新连接
2.FCF与连接缓存很好地结合起来,让连接缓存管理器来管理缓存,失败的连接在缓存中会自动失效。
而TAF在网络层面做预连接,当一个连接失效,连接缓存不能检测到
3.FCF基于OracleRAC事件,可以快速为活泼/闲置的连接检测到故障
4.FCF通过实例的UP事件实现负载均衡,分配到在线的RAC实例中
oracle建议不要在一个应用中同时使用TAF和FCF
oracle11gRAC的一些根本概念〔二〕
集群的相关概念
配置Active/active集群
在这种模式下,所有的节点都能提供效劳(不会有用户请求在standby上被闲置的情况)。
大局部案例中,集群成员的硬件配置都是相同的,防止可能的性能问题,也更容易实现负载均衡。
Active/active集群需要更复杂的管理软件来管理所有资源,比方磁盘和内存需要在所有节点间进行同步。
更常见的,一个私有网络被用做心跳连接。
集群管理软件必须能够检测到节点问题,比方节点故障或者集群通讯问题
脑裂(split-brain)是集群中的一个糟糕的情况:
集群中的所有集群正在工作的时候,内部通讯被断开。
这种情况下,集群被分成了几个局部,每个局部的集群软件都会尝试去接管其他节点的资源,因为在它看来,别的节点发生了故障。
可能会出现以下问题:
如果应用能够正常连接集群的这些局部,因为此时这些集群局部不同步,可能会有不同的数据会被写入到磁盘中。
脑裂对集群的危害显而易见,集群软件的供应商必须提供方案来解决这个问题
oracle的集群软件(11g中的GridInfrastructure),使用一个仲裁设备(quorumdevice),称作votingdisk,来决定集群中的成员。
集群中的所有节点共享一个votingdisk,当一个节点不能向内部网络和votingdisk发送心跳时,它就会被逐出集群。
假设一个节点不能和其他节点通讯,但依然能连接到votingdisk,集群在这种情况下将进行投票,并发出指令将该节点剔除。
这个投票使用的是STONITH方式,软件将发出一个请求,使被踢出的节点自动重启。
当需要重启的节点hung住的时候,重启指令变得不可用,这种情况比较棘手。
幸运的是,假设硬件允许,GridInfrastructure可以支持IPMI(智能平台管理接口),可以向一个节点发出结束指令。
当一个节点故障或被踢出集群,剩余的节点能够接管用户效劳请求。
配置Active/passive集群
一个active/passive集群工作方式与active/active不同。
一个active/passive集群中的成员硬件配置依然应该一致或根本一致,但同一时间两个节点中只有一个节点能处理用户请求。
集群管理软件会不断地监控集群中资源的健康状况,当一个资源失败,集群管理软件会尝试将该资源重启数次,假设还是无效,备用节点将进行接管。
根据安装时的选项,集群的资源可以分配在共享存储或文件系统上,后者在资源failover的时候也会进行一次failover。
使用共享文件系统比使用非共享的文件系统更有优势,后者在重新挂载到standby节点上以前可能需要进行fsck(8)检测。
Veritas集群套件、Sun(Oracle)集群和IBM的HACMP就可用作安装active/passive集群的集群管理工具。
鲜为人知的是,使用OracleGridInfrastructure来安装一个active/passive集群非常简单,利用GridInfrastructure的应用程序接口和作为集群逻辑卷管理器的OracleASM,可以轻松地不间断监控一个单实例oracle数据库。
当一个节点发生故障,数据库会自动迁移到备用节点。
根据初始化参数fast_start_mttr_target和恢复集的大小,这个故障切换可能非常迅速。
不过,作为failover过程的一局部,用户的数据库连接将被断开。
Active/passive模式可以通过将active_instance_count参数设置为1来翻开,但仅当节点数为2时才有效。
配置Shared-All架构
一个所有节点同时访问共享存储和数据的集群被称为shared-all或者shared-everything结构。
OracleRAC就是基于shared-everything架构:
一个数据库位于共享存储中,通过集群各个节点上运行的实例来访问。
在Oracle术语中,一个实例由内存结构和一些进程组成。
对应的,数据库存储在磁盘中的数据文件里。
在RAC中,实例的故障并不意味着该实例管理的数据的丧失。
在一个节点发生故障后,集群中的另一个实例将会进行实例恢复,所有剩余节点都将继续效劳。
使用高可用技术,例如FCF或TAF,可以将实例失效对用户造成的影响降到最低。
故障节点最后将重新参加集群并分担工作量。
配置Shared-Nothing架构
在一个shared-nothing数据库集群中,每个节点有它私有的独立存储,其他节点不能访问。
数据库被集群中的节点分割成几个局部,返回的查询结构集是各个节点结果集的结合。
丧失一个节点会导致对应的数据无法访问。
因此,一个shared-noting集群经常被实施成一些单独的active/passive或者active/active集群来增强可用性。
MySQL的集群就是基于shared-nothing架构。
RAC的主要概念
集群节点
集群由单独的节点组成,在OracleRAC中,允许的节点数和集群版本有关,公开文档中说明集群软件支持100个节点,而支持63个实例。
即使当个节点发生故障后,基于RAC上的应用能继续运行,还是应该花点精力来确认数据库效劳器中的单个组件不会出现单点故障(SPOF)。
采购新的硬件时应该采用可热插拔的组件,比方内置磁盘和风扇,另外,效劳器的电力供应、主机总线适配器、网卡和硬盘都应该做了冗余。
可能的话,最好做一个逻辑绑定,比方硬盘硬件RAID或软件RAID、网卡绑定、存储网络的多路径。
在数据中心也应该注意:
要使用不间断的电源供应、足够的散热措施、效劳器的专业上架。
最好还能有个远程的lights-out管理控制台,当一个节点不知道由什么原因挂起,可能迫切需要进行故障排除或者重启。
内部互联
集群内部互联是OracleRAC的特征之一。
它不仅使得集群在不同实例间传递数据块时突破blockpinging算法的限制,它还可用作心跳和常规通讯。
连接失败将导致集群的重组来防止脑裂发生,GridInfrastructure将使一个或多个节点重启。
可以为RAC和GridInfrastructure配置一个单独的连接,这种情况下你需要配置RAC来使用正确的连接。
这个连接始终应该是私有的,不应该受到其他网络的干扰。
RAC用户可以使用两种技术来实现内部互联:
以太网和Infiniband。
使用基于以太网的内部互联
使用10G以太网作为集群内部互联可能是目前使用最多的,集群的后台进程使用TCP/IP进行通信。
CacheFusion〔用来保持缓存的一致性〕使用另一种通信方式:
UDP(UserData该ramProtocol)。
UPD和TCP同属于传输层,后者面向连接,使用显式的通讯握手来保证网络数据包按顺序到达,并转发失败的数据包。
UDP那么不包含状态,它是一个发完就忘(fire-and-forget)协议。
UDP只是简单发送一个数据包到目的地。
UDP比起TCP而言主要的好处是它比较轻便。
注意:
两节点集群间应该防止使用交叉线来直连,集群的内部通讯必须经过交换,交叉电缆的使用应该被明确禁止!
使用jumboframes可以使集群内部通信的效率和性能得到提升。
EthernetFrames可以使用不同的大小,一般被限制在1500byte字节(MTU值)。
框架大小决定了单个以太网框架能够传送多少数据,一个框架承受越大的数据负荷,效劳器和交换机需要做的工作就越少,提供了更高的通讯效率。
许多交换机允许在一个框架中容纳比标准MTU值更大的字节数〔1500-9000〕,也叫jumboframe。
注意jumboframes是不能路由的,因此它不能被使用在公共网络上。
当决定使用jumboframes时,一定要确定集群中的所有节点使用同样的MTU。
刚刚说过数据库效劳器的相关组件应该有一个容易,网卡也是其中之一。
多个网络端口可以在linux中使用bonding技术绑成一个逻辑单位,和很多其他操作系统不同,linux中网卡的绑定不需要购置其他软件就能实现。
使用基于Infiniband的内部互联
Infiniband常被用来实现远程内存直接访问(RDMAremotedirectmemoryaccessarchitecture)。
这是一个高速互联,常与高性能计算(HPC)环境联系在一起。
RDMA可以在集群的节点间使用并行、直接、内存到内存的传输,它需要专门的RDMA适配器、交换机和软件。
它还能防止基于以太网的实现中的CPU处理和环境转换的开支。
在linux中有两种途径来实现Infiniband互联。
第一种叫做IPoverInfiniband(IPoIB),它采用IB架构作为链路控制层,使用封装的方法实现IP和IB报文的转换,从而使在以太网运行的程序可以直接运行在Infiniband上。
另一个方法就是使用基于Infiniband的 ReliableDatagramSockets,开始支持这个方法。
RDS可以通过OpenFabricEnterpriseDistribution(OFED)在linux和windows上实现。
RDS的重要特征是低延迟、低开销和高带宽。
Oracle数据库效劳器和Exadata存储效劳器使用了Infiniband,为集群内的通讯提供高达40Gb/s的带宽,这是以太网所不可能做到的。
Infiniband为高性能展现了巨大的优势,但它的本钱同样非常高昂。
Clusterware/GridInfrastructure
GridInfrastructure与操作系统紧密结合,并提供以下效劳:
节点间连接;维护集群成员;消息传送;集群逻辑卷管理;隔离(fencing)
************************************************************************************************************************************************************************************************
I/O隔离:
当集群系统出现"脑裂"问题的时候,我们可以通过"投票算法"来解决谁获得集群控制权的问题。
但是这样是不够的,我们还必须保证被赶出去的结点不能操作共享数据。
这就是IOFencing要解决的问题。
IOFencing实现有硬件和软件2种方式:
软件方式:
对于支持SCSIReserve/Release命令的存储设备,可以用SG命令来实现。
正常的节点使用SCSIReserve命令"锁住"存储设备,故障节点发现存储设备被锁住后,就知道自己被赶出了集群,也就是说自己出现了异常情况,就要自己进行重启,以恢复到正常状态。
这个机制也叫作Sicide(自杀).Sun和Veritas使用的就是这种机制。
硬件方式:
STONITH(ShootTheOtherNodeintheHead),这种方式直接操作电源开关,当一个节点发生故障时,另一个节点如果能侦测到,就会通过串口发出命令,控制故障节点的电源开关,通过暂时断电,而又上电的方式使故障节点被重启动,这种方式需要硬件支持。
************************************************************************************************************************************************************************************************
各个版本的Oracle集群软件的命名如下:
进程结构
安装结束后,会产生一些后台进程来确保集群正常工作并能够与外部通讯。
其中的一些有序linux平台的要求需要以root用户权限来启动。
比方,网络配置的改动就需要更高的权限。
其他后台进程将以grid软件所在系统用户的权限来运行。
下面的表格介绍主要的一些后台进程
后台进程
说明
Oracle高可用效劳(OHAS)
OHAS是效劳器启动后翻开的第一个GridInfrastructure组件。
它被配置为以init
(1)翻开,并负责生成agent进程。
OracleAgent
GridInfrastructure使用两个oracle代理进程。
第一个,概括起来说,负责翻开一些需要访问OCR和VOTING文件的资源。
它由OHAS创立。
第二个代理进程由CRSD创立,负责翻开所有不需要root权限来访问的资源。
这个进程以GridInfrastructure所属用户的权限运行,并且负责在RAC11.1中racg所做的工作。
OracleRootAgent
和Oracle代理进程类似,有两个Root代理进程被创立。
最初的代理进程由OHAS引发,它为linux系统中需要更高权限的资源提供初始化。
创立的主要后台进程是CSSD和CRSD。
反过来,CRSD将触发另一个root代理。
这个代理将翻开需要root权限、主要和网络相关的资源
集群就绪效劳进程
(CRSD)
集群软件的后台主要进程,使用oracle集群注册信息来管理集群中的资源
集群同步效劳进程
(CSSD)
管理集群的配置和节点成员
Oracle进程监控
(OPROCD)
oprocd在11.1版本中负责I/O隔离。
它是在10.2.0.4补丁集中为linux系统引入的。
在这个补丁集以前,内核hangcheck-timer模块来做类似的任务。
有趣的是,oprocd以前常被用在非linux平台中。
GridInfrastructure用cssdagent进程来替换了oprocd进程。
事件管理器(EVM)
EVM负责发布GridInfrastructure创立的事件
集群时间同步效劳(CTSS)
CTSS效劳是一个可选项,通过网络时间协定效劳器为集群提供时间同步,这个时间同步对RAC很重要。
它可以运行在两种模式下:
观望或者活动。
当NTP被激活的时候,它运行在观察模式,假设没有启动NTP,它将根据主节点同步所有节点的时间。
Oracle警告效劳(ONS)
负责通过快速应用框架发布事件的主要后台进程。
在中,GridInfrastructure的启动顺序有了明显变化。
代替直接通过inittab(5)翻开CRS、CSS、EVM,OHAS进程现在主要负责创立agent进程,监控其他节点的健康状况,和翻开集群资源。
在非Oracle管理进程中,NTP是一个特殊的角色,在每个集群中,它需要提供时钟同步,GridInfrastructure也不例外。
以下是中GridInfrastructure的一些主要后台进程:
配置网络组件
GridInfrastructure需要一些IP地址来正常工作:
每个主机配备一个公共网络地址;每个主机有一个私有网络地址;每个主机一个虚拟IP地址(未被指派);1-3个未指派的IP地址用于SingleClientAccessName特性;假设使用了Grid即插即用,还需要一个未使用的虚拟IP分配给Grid命名效劳。
节点虚拟IP是Oracle集群的最有用的功能之一。
它们需要和公共IP配置在一个网段内,并作为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- oracle11gR2RAC 原理 解读