大话RAC学习笔记.docx
- 文档编号:29091121
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:16
- 大小:609.61KB
大话RAC学习笔记.docx
《大话RAC学习笔记.docx》由会员分享,可在线阅读,更多相关《大话RAC学习笔记.docx(16页珍藏版)》请在冰豆网上搜索。
大话RAC学习笔记
部署RAC环境需要4个软件:
操作系统集群件集群文件系统数据库
集群件代替操作系统管理硬件资源
集群文件系统ASM可以对节点的访问进行控制
集群组成元素
cluster就是通过心跳网络,比如基于TCP/IP的网络心跳,基于共享存储磁盘的心跳网络,将一组机器整合而成的一个集群。
一个集群通常会有多种心跳网络,这是因为如果只用一种心跳机制,可能会导致集群无法区分到底是心跳失效还是节点失效,会造成判断失误,造成错误的节点接管。
node节点很好理解,就是集群中的一个主机
resource可以从主机接管到备用机器上的逻辑实体,比如服务IP地址,文件系统,应用程序就叫做资源
MAA高可用性架构
计划外宕机时间:
系统故障---RAC
数据故障/灾难---dataguardrmangoldengateshareplex
人为故障---flashbackquery
计划内宕机时间:
系统改变
数据改变
应用改变
集群分类:
高性能计算集群
负载均衡集群
高可用性集群
RAC兼负载均衡集群和高可用性集群
双机热备,双机互备和dataguard区别:
1.dg环境中的两个或者多个主机并不需要共享存储设备,每个都有自己的存储数据2.dg环境中不需要心跳机制。
双机环境中,数据只有一份,保存在共享存储中,数据本身并没有冗余,而在DG中,数据是有多份的,每份数据都可以独立保存,并且DG对于网络环境要求也很宽松,甚至可以跨越地球的两端,因此,DG比双机更适用于数据保护。
集群环境特殊问题
1.并发控制
在ORACLERAC中,是利用DLM(分布式锁管理器)机制来进行多个实例间的并发控制
2.健忘症
配置文件有时候不能及时同步
3.脑裂
投票算法
4.IO隔离
保证故障节点不能再继续访问共享数据
RAC集群由存储层网络层集群件层应用层组成
1.存储层
数据文件,联机日志,控制文件等文件在集群中只有一份,各个节点平等使用这些数据文件,这些数据文件一般放在存储阵列上,每台服务器通过HBA卡和光纤线连接到存储上,
RAC虽然有多个实例,但是只有一个数据库。
2.网络层
公共网络私有网络存储网络
3.集群件层
位于ORACLE和操作系统之间
4.应用层
高可用性:
集群软件(CRS)对运行于其上的应用进行监视,并在发生异常时进行重启,切换等干预手段。
这些应用分为两组:
节点应用和数据库资源前者包括GSDONSVIPListener后者包括databaseinstanceservice
RAC和OPS区别:
二者之间最大的不同就是,RAC数据传递全部使用私有互联网络,而不是磁盘。
ORACLE认为通过网络的数据传递要比通过磁盘来的更快速,更高效。
第三章集群件
集群件层负责管理整个集群环境中的硬件资源,并为上层的DATABASE集群提供基础服务,RAC和集群件的关系类似于单机环境下应用程序和OS的关系。
集群件运行环境由两个磁盘文件和若干个后台进程及网络元素组成
两个磁盘文件即OCR和VotingDisk必须放在共享存储裸设备上,解决脑裂和健忘问题。
1.OCR解决健忘,将配置文件放在OCRDisk上,OCR位置会被记录在/etc/oracle/ocr.loc文件中,集群件启动时会读取这个文件,整个OCR信息是个树形结构,有3大分支,分别是SYSTEMDATABASECRS.对于SYSTEM分支下的Key,一般需要ROOT权限,对于DATABASE分支下的KEY,一般需要dba权限。
2.每个节点都有一个OCR进程来读写OCRCache内容,但只有一个节点的OCR进程能够读写OCRDISK中的内容,这个节点就叫做OCR主节点,这个节点的OCR进程负责更新本地和其他节点的OCRCache内容。
所有需要OCR内容的其它进程,都不会直接访问OCRCache,而是向OCR进程发送请求,借助OCR进程获得内容,如果需要修改OCR内容,也是由该节点的OCR进程向主节点的OCR进程提交请求,由主节点的OCR进程完成读写操作,并同步所有节点OCRCache中的内容。
3.VotingDisk主要用于记录节点中成员状态,在出现脑裂时,仲裁哪个分区获得集群的控制权。
可以通过crsctlquerycssvotedisk命令来查看VotingDisk位置.
4.集群件后台进程最重要的3个是CRSDCSSDEVMD,在安装集群件最后阶段,要求在每个节点执行root.sh脚本,这个脚本会在/etc/inittab文件最后添加3行,这3个进程启动命令,这样以后每次系统启动时,集群件也会自动启动。
CRSDEVMD出现异常时,系统会自动重启这两个进程,但是如果CSSD进程出现异常,则系统会立即重启。
5.CSSD进程提供CSS服务,即集群同步服务,CSS服务通过多种心跳机制,实时监控集群健康状态,提供脑裂保护等基础集群服务功能。
CSS服务有两种心跳机制,一种是通过私有网络的心跳,一种是通过VotingDisk的磁盘心跳。
心跳有延时,通过这两个命令查询延时参数设置crsctlgetcssdisktimeout/miscount
6.CRSD是为应用层CRS资源提供高可用性服务,因此集群件必须要监控这些资源,并在这些资源运行异常时进行干预,包括关闭,重启进程。
CRS资源包括两组nodeapps和database-relatedresource前者包括GSDONSVIPListener后者包括databaseinstance
7.service.GSDONSVIP这3种服务时在安装vipca时创建并登记到OCR中的。
8.EVMD这个进程负责发布CRS产生的各种事件,还是CRS和CSS两个服务之间通信的桥梁
9.RACGIMON这个进程负责检查数据库健康状态,包括数据库服务的启动停止故障转移
10.网络组建:
共有网卡私有网卡,私有链路专门用于节点间的通信,通信内容包括网络心跳和缓存融合,之所以要开辟一条单独的链路,是因为这些通信内容特点是大数据量,低延迟,如果和对外链路混住一起,一方面会占用对外服务带宽,另一方面集群的可靠
11.性得不到保证。
12.VIP原理,在单实例环境下,客户端的连接请求必须等到TCP层超时,才能获知数据库服务器或者Listener出现了问题,这在不同OS上,这个时间长短不一。
VIP是利用应用层的立即响应。
13.如何手动重新分配VIP
当一个节点关闭后,属于这个节点的VIP会自动迁移到其他节点上。
当这个节点重启后,这个VIP应该自动重新回归到这个节点上,如果因为BUG没有发生这种回归。
可以手动处理,譬如节点2重启后,VIP没有回归,则以root身份执行下面命令:
./crs_relocateora.server2.vip–cservcer2
14.ASM实例和数据库实例这两个应用不依赖于VIP,即网卡宕掉后,VIP会迁移到其他节点,Listener会关闭,但是ASM实例和数据库实例不会受影响,10.2.0.3版本后依赖关系是这样的。
集群件的日志体系
目录$CRS_HOME/log/node
alert.log这个日志类似于数据库的alert.log,一般应该作为检查的起点
crsd.logcssd.logevmd.log三个进程的日志
racg目录下放置的是所有nodeapp的日志,包括ONS和VIP
client目录放置的是工具执行日志,集群件提供了许多命令行工具,比如ocrcheck,ocrconfig,ocrdump,oifcfg,olscfg,这些工具运行时产生的日志就放在这个目录下。
第四章RAC原理
一:
保证并发和数据一致是数据库系统最核心的内容
脏读:
用户看到被修改但是还没有提交的数据
不可重复读:
用户A在查询语句时读到了正在被其他用户更改完成的记录
幻影读:
查询时当前没有这条数据,查询过程中新增加的数据被读到了
ORACLE默认是ReadCommitted级别,就是脏读看不到,不可重复读和幻影读可以看见,也就是查询时未提交的数据看不见,其他已经被修改和增加的记录可以看见。
Repeatable这个级别是为了避免丢失修改,就是用户A对数据修改覆盖掉用户B所做的修改。
ORACEL没有明确的Repeatable级别定义,要想实现,方法一:
使用select...forupdate,先把记录锁定,不允许其他用户修改,这种方式也叫做悲观锁,这种方式会影响并发性方法二:
select时不锁定记录,但是要查出记录所有字段的内容,然后在update时,把所有字段都作为where条件,这种方式也叫乐观锁
二:
oracle单实例的并发控制机制
LOCK框架包括3个组件:
资源,锁和排队机制算法
排队机制算法理解为“先入先出队列”,如果进程的锁定请求不能满足,该进程的LOCKStructure就被加到Waiter链表的末端。
当占用进程释放锁时,会检查Waiter和Converter队列,把锁分配给最先进入队列的请求者。
Converter队列会优先于Waiter队列被处理。
我们可以根据V$lock视图的LMODE和REQUESTMODE判断出谁是OwnerWaiterConverter
LMODE>0REQUEST=0Owner
LMODE=0REQUEST>0Waiter
LMODE>0REQUEST>0Converter
对于数据记录这种细粒度资源,Oracle使用的是行级锁机制
行级锁机制:
当一个事务开始时,必须先申请一个TX锁,这种锁保护的资源是回滚段,回滚数据块。
因此这个申请也就意味着,用户进程必须先申请到回滚段资源后才能开始一个事务,才能执行DML语句修改数据。
申请到回滚段资源以后,用户事务就可以修改数据了,遵循操作顺序a.首先获得这个表的TM锁,这个锁用于保护事务执行过程中其他用户不能修改表结构。
因此所谓的行级锁其实只是数据块头,数据记录头的一些字段,不会消耗额外资源。
不是Oracle中通常意义上的锁,而只是一个所谓的锁,有锁的功能,但是没有锁的开销。
ORACLE内存使用都是以GB为单位的,几十上百GB的配置都很平常。
在这么大的空间中
LATCH和LCOK作用都是为了防止并发,LATCH请求获得释放等操作是原子操作,一般几个硬件指令就可以完成,并且进程获得LATCH之后,使用时间也非常短,很快就会释放它。
而LOCK的操作不是原子操作,需要成百上千个硬件指令才能完成,用户获得LOCK后可能很长时间才会释放,因此如果进程申请LOCK没有获得,这个进程会释放CPU,也就是进行进程上下文切换,这个过程包括保存当前CPU寄存器状态,按照调度算法觉得把CPU分配给哪个进程,还要恢复新进成的上下文,也就是寄存器状态,整个过程很消耗资源。
而进程请求LATCH得不到时,进程不会释放CPU资源,而是不断尝试请求,只有尝试一定次数之后还不能获得时,才释放CPU,这就是LATCH的Spin机制,这时的表现就是CPU利用率非常高,但是吞吐量却很低,典型出工不出活,其次,LARCH使用的是抢占机制,而LOCK使用的是排队机制。
Oracle不允许用户进程直接操作SGA中的数据,而是创建一个影子进程,由这个进程代替用户进程操作数据库。
而实例本身还有DBWRLGWR等后台进程,所有这些进程共享SGA区,这些进程都可以修改SGA中的数据,oracle用lock和latch来保证这些进程之间的并发和数据一致性。
SQL语句执行过程
1.解析:
语法语义检查通过后,再检查这个语句之前是否已经解析过了,ORACLE对每个语句都会计算出哈希值,用这个值在共享池中查看是否有对应的执行计划。
如果有就是软解析,如果没有就是硬解析,就需要执行下面2,3过程。
2.优化:
根据对象统计信息,当前选择的优化器模式(CBO/RBO)来确定最佳访问路径。
3.产生执行计划
4.返回查询结果
RAC下的并发控制
分布式锁管理器负责协调解决节点间的竞争,而节点内的协调不是DLM负责。
Oracle通过集成分布式锁管理器(IntegratedDistributedLockManager,IDLM)来协调资源的使用,防止发生冲突,从而实现PCM并行Cache管理(数据块在不同实例内存中),全局锁用于实现实例间的数据一致。
librarycache中存放的是所有SQL语句,执行计划,包等对象,以及这些对象所引用的对象,当一个语句或包编译时,这个语句所引用的所有对象都会加一个librarycachelock;而执行时,所有这些引用对象都要被加一个librarycachepin,以保证在语句执行过程中,应用对象的结构不会被修改。
rowcache中存放的是数据字典,其目的是编译过程减少对磁盘的访问。
CacheFusion使用PCMLock来保护数据块,PCMLock有3种模式:
sharedexclusivenull
GRD(全局资源目录)看做是一个内部数据库,记录每个数据块在集群间的分布,主要是PCMLOCK信息。
第五章配置ASM实例
1.初始化参数
SGA:
ASM实例的SGA和RDBMS实例不同,只需要很小的内存空间,ORACLE提供的缺省值就已经足够了不需要修改。
shared_pool_size=48m
large_pool_size=12m
shared_pool_reserved_size=24m
sga_max_size=88m
INSTANCE_TYPE
DB_UNOQUE_NAME
ASM_POWER_LIMIT
2.启动CSS进程
无论是否在RAC环境下,ASM实例都需要用到CSS进程。
因此,如果是非RAC环境下使用ASM,就必须运行一个简化版的ORACLECLUSTERWARE,可以通过运行脚本命令$ORACLE_HOME/bin/localconfigadd来实现,这个命令会创建一个单机版的OCR(文件在$ORACLE_HOME/cdata/localhost/local.ocr),同时启动OCSSD守护进程,如果在启动ASM实例之前没有启动CSS,则启动ASM实例时会报错29701,提示执行这个脚本。
有时候会出现执行$ORACLE_HOME/bin/localconfigadd命令时HANG住情况,可以先取消这个命令,执行下面几个命令来解决。
$ORACLE_HOME/bin/localconfigdelete
$ORACLE_HOME/root.sh
$ORACLE_HOME/bin/localconfigadd
3.创建磁盘组
exportORACLE_SID=+ASM
sqlplus"/assysdba"
startupnomount
createspfilefrompfile;
creatediskgroupdg1externalredundancydisk'ORCL:
VOL1','ORCL:
VOL2';
4.在数据库中使用ASM的磁盘组
把表空间创建在ASM磁盘组上,只需要在文件名前加上要使用的Diskgroup名称
createtablespaceiotestdatafile'+DGRAID/iotest.dbf'size500m;
5.如何从远程访问ASM实例
ASM实例也可以从远程访问,不过其TNS配置有些特别,需要加上UR属性
Asm=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.5.12)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=+ASM)
(INSTANCE_NAME=+ASM)
(UR=A)
)
)
6.将数据库迁移到ASM
a.下载安装驱动包3个
oracleasmlib-2.0.4-1.el5.i386.rpm
oracleasm-support-2.1.7-1.el5.i386.rpm
oracleasm-2.6.18-164.el5-2.0.5-1.el5.i686.rpm
b.配置ASMLib驱动
/etc/init.d/oracleasmconfigure
/etc/init.d/oracleasmcreatediskVOL1/dev/sdc1
/etc/init.d/oracleasmcreatediskVOL2/dev/sdc2
/etc/init.d/oracleasmcreatediskVOL3/dev/sdc3
/etc/init.d/oracleasmcreatediskVOL4/dev/sdc4
c.配置ASM实例
启动CSS,需要以root执行
/oracle/product/10.2.0/db1/bin/localconfigadd
创建ASM实例的pfile文件
instance_type=asm
large_pool_size=12m
remote_login_passwordfile=exclusive
asm_diskstring='ORCL:
VOL*'
background_dump_dest=/oracle/admin/+ASM/bdump
core_dump_dest=/oracle/admin/+ASM/cdump
user_dump_dest=/oracle/admin/+ASM/udump
创建ASM实例的密码文件
orapwdfile=orapw+ASMentries=5password=abc
启动ASM实例
exportORACLE_SID=+ASM
sqlplus"/assysdba"
startupnomount
d.创建DiskGroup
creatediskgroupdg1externalredundancydisk'ORCL:
VOL1','ORCL:
VOL2','ORCL:
VOL3';
creatediskgroupdg2externalredundancydisk'ORCL:
VOL4';
creatediskgrouprecoveryexternalredundancydisk'ORCL:
VOL5','ORCL:
VOL6','ORCL:
VOL7','ORCL:
VOL8','ORCL:
VOL9';
e.对数据库做一个备份rman
rmantarget/
backupascopydatebaseformat‘+DG1’;
f.修改数据库参数
altersystemsetdb_recovery_file_dest_size=330gscope=both;
altersystemsetdb_recovery_file_dest='+RECOVERY'scope=both;
altersystemsetdb_create_file_dest='+DG1'scope=both;
altersystemsetdb_create_online_log_dest_1='+DG1'scope=both;
altersystemsetdb_create_online_log_dest_2='+DG2'scope=both;
g.将联机日志和standby日志迁移到ASM磁盘组
当前联机日志的配置
selectgroup#,memberfromv$logfile;
每个联机日志组里面添加两个成员,通过给每组添加两个新成员然后删除旧成员的办法来迁移联机日志
对于standby日志,采用重建的方法
Alterdatabasedropstandbylogfilegroup4;
Alterdatabaseaddstandbylogfilegroup4size50m;
检查联机日志,确认全部迁移到ASM中,并且每组两个成员,一个在DG1,一个在DG2
Selectgroup#,memberfromv$logfileorderby1;
h.把临时表空间迁移到ASM
Altertablespacetempaddtempfilesize2048m;
Altertablespaceorabm_tempaddtempfilesize200m;
确认新文件存在
Selectnamefrmv$tempfile;
删除旧的文件
i.将控制文件数据文件迁移到ASM,需要对数据库实例进行关闭,启动
启动到nomount状态
Startupnomount
在rman中进行完全恢复
Rmantarget/
恢复新的控制文件
切换数据库:
现在数据文件使用的是ASMDISKGROUP中的COPY,因为是备份,所以要进行恢复操作
Rman>recoverdatabase;
打开数据库
Rman>alterdatabaseopen;
确认所有的文件已经迁移到ASM中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大话 RAC 学习 笔记
![提示](https://static.bdocx.com/images/bang_tan.gif)