在RAC里面,最重要的也是最核心的也就是内存的机制。主要是内存的数据块要在多个实例之间通过网络互相传递。互相传递也不是问题,复杂就复杂在数据块一致性的问题。比如说有6个节点的RAC,可能每个用户都链接到不同的实例上面,最后某个实例上面都会有某个数据块在操作,也就是相同的数据块可能在6个实例上面都有拷贝,尽管RAC可以做负载均衡,但是为了保证数据的准确性,Oracle需要一套复杂的机制来对数据块在6个实例上面的修改是可控的。同时通过一系列锁的机制来保证数据一致性。
为了保证数据块的一致性就是保证实例在请求数据块的时候都要去获取一个资源,这个资源就是访问数据块的资源,也就是一个锁。按照自己的访问方式来请求不同的锁。如果是查询操作那么请求的就是共享锁,如果是要修改一个数据块那么就要申请排他锁。
RAC的日常管理--守护进程
RAC的守护进程
– /etc/init.d/init.*
RAC的日常管理命令
– $ORACLE_CRS/bin
• 节点层
• 网络层
• 集群层 就是用来管理RAC本身底层的一些信息的,比如说OCR,表决磁盘等。
• 应用层 就是注册到RAC里面的各种资源,数据库,监听器,虚拟IP。
RAC的守护进程
– /etc/init.d/init.*
[root@rac3 init.d]# ls init.*
init.crs init.crsd init.cssd init.evmd
[root@rac3 init.d]# ./init.crs
Usage: ./init.crs {stop|start|enable|disable}
[root@RAC1 init.d]# ps -ef | grep css
root 2319 1 0 21:09 ? 00:00:01 /u01/app/11.2.0/grid/bin/cssdmonitor
root 2335 1 0 21:09 ? 00:00:01 /u01/app/11.2.0/grid/bin/cssdagent
grid 2346 1 0 21:09 ? 00:00:07 /u01/app/11.2.0/grid/bin/ocssd.bin
root 4557 2499 0 21:22 pts/0 00:00:00 grep css
[root@RAC1 init.d]# ps -ef | grep crs
root 2915 1 1 21:11 ? 00:00:08 /u01/app/11.2.0/grid/bin/crsd.bin reboot
root 4559 2499 0 21:22 pts/0 00:00:00 grep crs
[root@RAC1 init.d]# ps -ef | grep evmd
grid 2586 1 0 21:10 ? 00:00:03 /u01/app/11.2.0/grid/bin/evmd.bin
root 4632 2499 0 21:23 pts/0 00:00:00 grep evmd
init.crs 是后面 init.crsd init.cssd init.evmd启动的脚本。启动CRS就需要启动这三个核心的进程。
CRS是完成整个数据库资源管理的一个进程,CSS是维护各个节点之间关系的,通过表决磁盘来判断节点各个的状态,如果节点状态不对就将其从集群里面踢出。EVMD是一些事件相关的一些进程,主要是通过这三个将CRS这个平台构建起来了。
这三个进程在默认情况下是自启动的,随着系统启动而启动。即CRS是自启动的。
每次在操作系统启动之后查看会发现CRS服务都是启动的,因为上面这些守护进程都是自启动。
[grid@RAC1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
RAC的日常管理--节点层
olsnodes
– 这个命令用来显示集群点列表
• n print node number with the node name
• p print private interconnect name with the node name
• i print virtual IP name with the node name
• <node> print information for the specified node
• l print information for the local node
[oracle@rac3 ~]$ olsnodes -n -p -i
rac3 1 rac3-priv rac3-vip
rac4 2 rac4-priv rac4-vip
这里可以看CRS由两个节点组成,一个是RAC3,一个是RAC4。
网络层管理
oifcfg --查询,定义和修改Oracle 集群需要的网卡属性,这些属性包括网卡的网段地址,子网掩
码,接口类型等。
[oracle@rac3 ~]$ oifcfg getif
eth0 192.168.1.103 global public
eth0 192.168.1.203 global cluster_interconnect
[oracle@rac3 ~]$ oifcfg getif -if eth0
eth0 192.168.1.103 global public
eth0 192.168.1.203 global cluster_interconnect
这个和Linux命令其实只多了一个o,这个命令是RAC下面节点配置的信息。
集群层管理
crsctl
ocrcheck
ocrdump
ocrconfig
集群层管理-CRSCTL
crsctl
– Crsctl 命令可以用来检查每个crs 进程状态,管理Votedisk,跟踪CRS进程功能
– CRS的启动和关闭
[grid@RAC1 ~]$ crsctl check crs
CRS-4638: Oracle High Availability Services is online
CRS-4537: Cluster Ready Services is online
CRS-4529: Cluster Synchronization Services is online
CRS-4533: Event Manager is online
-CRS启动和关闭
crsctl disable crs
crsctl enable crs
crsctl start crs
crsctl stop crs
CRSCTL是一个工具和SRVCTL一样,以CTL结尾的都是管理工具。想看看CRS是否工作正常,可以使用crsctl check crs。使用crsctl这个工具还可以单独来检查每一个进程是否工作正常。
[grid@RAC1 ~]$ crsctl check crsd
CRS-272: This command remains for backward compatibility only
Cluster Ready Services is online
[grid@RAC1 ~]$ crsctl check cssd
CRS-272: This command remains for backward compatibility only
Cluster Synchronization Services is online
[grid@RAC1 ~]$ crsctl check evmd
CRS-272: This command remains for backward compatibility only
Event Manager is online
CRS启动和关闭需要root的权限来执行。
集群层管理-CRSCTL
CRS的版本信息
[grid@RAC1 ~]$ crsctl query crs softwareversion
Oracle Clusterware version on node [rac1] is [11.2.0.4.0]
crs相关的参数查询和设置
[root@rac3 bin]# ./crsctl set css misscount 120
Configuration parameter misscount is now set to 120.
[root@rac3 bin]# ../crsctl get css misscount
120
上面这些都是在使用CRSCTL工具对集群软件CRS的管理,这个软件和数据库软件是分开的。
集群层管理-CRSCTL
表决磁盘的管理
查询表决磁盘的信息
[grid@RAC1 ~]$ crsctl query css votedisk
## STATE File Universal Id File Name Disk group
-- ----- ----------------- --------- ---------
1. ONLINE 2bd6163556df4fd0bf2832a96af359e0 (/dev/raw/raw1) [DATA]
Located 1 voting disk(s).
添加和删除表决磁盘 对于磁盘的增加和删除都不要顺便,除非理由特别充分
./crsctl add css votedisk /dev/raw/raw1 -force
crsctl delete css votedisk /dev/raw/raw1 -force
集群层管理-CRSCTL
dump相关的信息
./crsctl lsmodules css
./crsctl lsmodules crs
./crsctl lsmodules evm
Crsctl还可以看到这几个核心进程的功能模块
[root@RAC1 ~]# /u01/app/11.2.0/grid/bin/crsctl lsmodules css
List CSSD Debug Module: CLSF
List CSSD Debug Module: CSSD
List CSSD Debug Module: GIPCCM
List CSSD Debug Module: GIPCGM
List CSSD Debug Module: GIPCNM
List CSSD Debug Module: GPNP
List CSSD Debug Module: OLR
List CSSD Debug Module: SKGFD
上面这些都是通过CRSCTL这个工具来管理集群软件的。
集群层管理-OCRDUMP
OCR磁盘里面记录着RAC里面所有资源的信息。
ocrdump
– 该命令能以ASCII的方式打印出OCR的内容,但是这个命令不能用作OCR的备份恢复,也就是说
产生的文件只能用作阅读,而不能用于恢复。
./ocrdump -stdout |more
ocrdump [-stdout] [filename] [-keyname name] [-xml]
集群层管理-OCRCHECK
ocrcheck
– 命令用于检查OCR内容的一致性,这个命令不需要参数。
[grid@RAC1 ~]$ ocrcheck
Status of Oracle Cluster Registry is as follows :
Version : 3
Total space (kbytes) : 262120
Used space (kbytes) : 3240
Available space (kbytes) : 258880
ID : 791007523
Device/File Name : +DATA
Device/File integrity check succeeded
Device/File not configured
Device/File not configured
Device/File not configured
Device/File not configured
Cluster registry integrity check succeeded
Logical corruption check bypassed due to non-privileged user
集群层管理-OCKCONFIG
ocrconfig
– 该命令用于维护OCR 磁盘
备份和恢复ocr信息
创建新的OCR磁盘镜像
[root@rac3 bin]# ./ocrconfig -export test.dmp
[root@rac3 bin]# ll -t|more
-rw-r--r-- 1 root root 85205 Jun 1 19:48 test.dmp
[root@rac3 bin]# ./ocrconfig -import test.dmp
创建新的OCR磁盘镜像,这样起到冗余的目的
[root@raw1 bin]# ./ocrconfig -replace ocrmirror /dev/raw/raw4
在RAC里面有一个OCR平台,可以在里面建立很多数据库,大家共用这个OCR。当一旦有新的资源加入,OCR里面的信息就会改变,在改变之前可以做一次export,导出之后一旦有问题可以通过这个恢复。
[root@RAC1 ~]# /u01/app/11.2.0/grid/bin/ocrconfig -export test.dmp
[root@RAC1 ~]# ls
anaconda-ks.cfg Documents install.log Music Public test.dmp
Desktop Downloads install.log.syslog Pictures Templates Videos
这样就将OCR的信息备份出来了,如果要导入就使用 ./ocrconfig -import test.dmp