大话 ORACLE RAC
第一部分
集群理论篇
第一章:
RAC 初体验
PC Server + Linux + Oracle 10g RAC
OS配置,
存储配置,
网络配置,
最后才是ORACLE 自己的配置。
硬件环境:
整个RAC的硬件环境包括主机,共享存储,网络互联设备
1,节点(主机)
每个节点还要有一个HBA卡,通过光纤连接到存储设备,具体的连接方式可以直连或者通过光纤交换机
2,两个网卡
Private NIC Private IP
Public NIC Public IP
除了Public IP 和Private IP之外,每个节点还会有第三个IP地址,这个地址叫做VIP。
在所有的节点正常工作是,每个节点的VIP会被分配到Public NIC上;如果一个节点宕机,这个节点
的VIP会被转移到还在运行的节点上。也就是幸存节点的Public NIC这个网卡上,会有三个IP地址,
除了一个Public IP之外,会有两个VIP。
3,两个网络交换机
每个节点的Public NIC会被连接到H6这个交换机上,其他要访问数据库的计算机也连接到H6这台交换机上。
每个节点的Private NIC 连接到H5这个交换机上。注意,这个交换机只用于节点互联,也就是只连接每个
节点的Private NIC,不要再连接其他设备。
这里要强调的是:
在整个RAC的网络环境中,有两个网络存在,(实际上有三个网络,第三个网络就是存储网络)。
其中的Public NIC接入公共网络,为客户机提供查询服务,DBA的日常维护也是通过这个网络。
而节点的Private NIC接入私有网络,这个网络是一个完全隔离的网络,其上传递的数据只是RAC节点
间的心跳数据和Cache Fusion数据。
4,共享存储
在整个RAC环境中,最重要的就是共享存储。数据文件,联机日志,参数文件,控制文件都必须放在
共享存储上,并保证每个节点都能访问到这个存储设备。
EMC是最常用的存储产品。每个节点主机需要安装HBA卡,然后通过光纤和存储设备连接。
这个网络就是RAC环境中的第三个网络(存储网络),只是这个网络不是用网线,而是用光纤线连接;
并且运行的不是TCP/IP协议,而是SCSI协议。
软件环境:
操作系统,集群件,集群文件系统和数据库。
1,操作系统
版本相同,小版本,补丁包必须一样。
2,集群件
集群件是安装在操作系统之上的一个特殊软件,负责管理整个集群环境中的硬件资源,并为上
层的RAC集群提供基础服务。
集群件和OS之间的关系非常类似于单机环境下应用程序和OS的关系:
应用程序不能访问硬件,所有的硬件访问都是通过OS内核完成的。
在单机环境下OS内核能够代理本机应用程序对硬件的访问,但是在集群环境下有多台计算机
这些计算机对硬件的访问仅靠传统的OS是无法进行控制的,因此就有了集群件。
如果我们把整个集群想像成一台虚拟的计算机,那么集群件就是这台计算机上的操作系统,而
RAC是运行在其上的一个应用。
3,集群文件系统
我们已经提到,RAC的数据文件,联机文件,控制文件,参数文件都必须放在共享存储上,保证
所有节点都能访问。这时就需要对节点的访问进行控制,普通的文件系统并不支持集群功能,因
此必须采用特殊的存储策略,比如采用裸设备或者某种集群文件系统。
OCFS && ASM
4,数据库软件
本书环境介绍
===================================================================================
| 硬件
-----------------------------------------------------------------------------------
节点主机 1 |Public NIC Public IP:192.168.123.154
| VIP:192.168.123.248
|------------------------------------------------
|Private NIC Private IP:10.0.0.154
------------------------------------------------------------------------------------
节点主机 2 |Public NIC Public IP:192.168.123.155
| VIP:192.168.123.249
|-------------------------------------------------
|Private NIC Private IP:10.0.0.155
------------------------------------------------------------------------------------
存储 |EMC CX300
------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
| 软件
-------------------------------------------------------------------------------------
OS |64 bit,Red Hat Enterprise Linux AS 4 Update 4
-------------------------------------------------------------------------------------
集群件 |Oracle Clusterware
-------------------------------------------------------------------------------------
集群文件系统 |ASM
-------------------------------------------------------------------------------------
数据库 |Oracle Database 10.2.0.1
-------------------------------------------------------------------------------------
任务列表:
包括对操作系统的配置,对共享存储的配置,对网络的配置,任何一步出错都可能导致失败。
====================================================================================
RAC 部署过程的任务列表
------------------------------------------------------------------------------------
阶段 | 任务列表
------------------------------------------------------------------------------------
前期规划 |确认集群节点数量,每个节点的主机名;
|区分Public,Private NIC;确认每个主机的三个IP地址
|数据库存储的技术选型,(ASM/OCFS/RAW/Others);
|存储空间规划,包括软件的安装位置,数据文件的位置规划
-------------------------------------------------------------------------------------
配置节点主机 |配置主机名和三个IP地址;
|RPM包检查;
|磁盘分区;
|配置裸设备;
|系统需求(OS Kernel参数,空间需求);
|创建ORACLE用户,要求每个节点UID,GID相同;
|定义ORACLE用户的环境变量,包括$ORACLE_HOME,$CRS_HOME,资源数量限制;
|用户等价;
|节点时间同步;
|Hangcheck-timer模块配置。
-------------------------------------------------------------------------------------
安装部署 |安装Oracle Clusterware,安装后进行检查;
|安装Oracle Database;
|创建ASM磁盘;
|配置Listener;
|创建ASM;
|创建RAC数据库;
|安装后测试,Failover和Loadbalance
--------------------------------------------------------------------------------------
确认节点主机名:
规划阶段任务:定义网络
======================================================================================
| 节点 1 | 节点 2
--------------------------------------------------------------------------------------
主机名 |dbp |dbs
--------------------------------------------------------------------------------------
网卡:Public NIC |eth0 |eth0
--------------------------------------------------------------------------------------
网卡:Private NIC |eth1 |eth1
--------------------------------------------------------------------------------------
IP/网络名:Public IP |192.168.123.154/dbp |192.168.123.155/dbs
--------------------------------------------------------------------------------------
IP/网络名:Private IP |10.0.0.154/dbp-priv |10.0.0.155/dbs-priv
--------------------------------------------------------------------------------------
IP/网络名:VIP |192.168.123.130/dbp-vip |192.168.123.131/dbs-vip
--------------------------------------------------------------------------------------
存储选型:
ASM --> OCFS --> NFS --> RAW
Voting disk,OCR 在目前版本还只能创建在裸设备,OCFS上。而数据库的文件,包括数据文件,联机
日志,控制文件,参数文件可以使用任何一种存储方案。
RAC文件存储规划
======================================================================================
文件类别 |本地文件系统 |RAW |ASM
--------------------------------------------------------------------------------------
Oracle Clusterware
--------------------------------------------------------------------------------------
Clusterware Software |$CRS_HOME
--------------------------------------------------------------------------------------
OCR | |/dev/raw/raw1
--------------------------------------------------------------------------------------
Voting Disk | |/dev/raw/raw2
--------------------------------------------------------------------------------------
Oracle Database
--------------------------------------------------------------------------------------
Database Software |$ORACLE_HOME
--------------------------------------------------------------------------------------
SPFILE | |+DATA
--------------------------------------------------------------------------------------
Pfile,password file |$ORACLE_HOME/dbs
--------------------------------------------------------------------------------------
Controlfile | |+DATA
--------------------------------------------------------------------------------------
Datafile | |+DATA
--------------------------------------------------------------------------------------
Logfile | |+DATA
--------------------------------------------------------------------------------------
Archived Log |/wxxrdb1_arch
|/wxxrdb2_arch
--------------------------------------------------------------------------------------
Backup | +RECOVERY
--------------------------------------------------------------------------------------
实施阶段:
整个过程可以分为几个模块:主机配置,安装Clusterware,安装Oracle Database,配置Listener,
创建ASM,创建Database/
完成所有磁盘分区后,可以在另一台计算机上执行partprobe命令,扫描分区。最后确认两个节点
识别出的分区一致。
配置裸设备:
所谓裸设备就是通过字符方式访问的设备,也就是读写设备不需要缓冲区。在LINUX下,对磁盘只提供了块
方式访问,要想通过字符方式访问设备,必须配置裸设备服务,并且ORACLE用户对这些裸设备必须有访问
权限。
(1),裸设备服务的配置文件是/etc/sysconfig/rawdevices
添加如下两行,格式为:裸设备名 块设备名。
/dev/raw/raw1 /dev/sdb1
/dev/raw/raw2 /dev/sdb2
(2),要配置ORACLE用户对裸设备的权限,需要编辑UDEV的权限配置文件。
vi /etc/udev/permissions.d/50-udev.permissions
# raw devices
raw*:oracle:dba:0660
raw/*:oracle:dba:0660
(3),确认裸设备服务自动启动,两个节点都要执行。
#chkconfig --list rawdevices
rawdevices 0:off 1:off 2:on 3:on 4:on 5:on 6:off
(4),启动rawdevices服务,确认裸设备创建成功,权限正确
#service rawdevices restart
Assigning devices:
/dev/raw/raw1 --> /dev/sdb1
/dev/raw/raw1: bound to major 8,minor 17
/dev/raw/raw2 --> /dev/sdb2
/dev/raw/raw2: bound to major 8,minor 18
Done
确认裸设备权限正确:属主应该是oracle:dba.
# cd /dev/raw
# ll
total 0
crw-rw---- 1 oracle dba 162,1 Mar 31 14:52 raw1
crw-rw---- 1 oracle dba 162,2 Mar 31 14:52 raw2
9,创建ASM磁盘(在任何一个节点操作即可,以ROOT用户)
# /etc/init.d/oracleasm createdisk VOL1 /dev/sdc1
Marking disk "/dev/sdc1" as an ASM disk: [OK]
# /etc/init.d/oracleasm createdisk VOL2 /dev/sdd1
Marking disk "/dev/sdd2" as an ASM disk: [OK]
在别的节点上以ROOT用户身份执行
# /etc/init.d/oracleasm scandisks
Scaning system for ASM disks: [OK]
# /etc/init.d/oracleasm listdisks
VOL1
VOL2
安装Oracle Clusterware :
# $CRS_HOME/bin/crsctl check crs
CSS appreas healthy
CRS appreas healthy
EVM appreas healthy
在最后一个节点执行root.sh的输出的最后两行:
{
Running vipca(silent) for configuring nodeapps
The given interface(s),"eth0" is not public.Public interfaces should by
used to configure virtual IPs.
}
含义是root.sh 试图以silent方式运行VIPCA,但是失败。VIPCA这个脚本的功能是在每个节点上
创建VIP,ONS,GSD三个服务。这个脚本这所以会失败,这是因为eth0配置的IP是192.168.123.*,
这是一个私网地址,而VIPCA默认不会在私网地址上配置VIP,所以还需要手动执行这个脚本。
最后可以通过这样的几个命令来确认Clusterware 安装成功:
# cd $CRS_HOME/bin
# ./olsnodes
dbs
dbp
# ./crsctl check crs
CSS appreas healthy
CRS appreas healthy
EVM appreas healthy
# ./crs_stat -t -V
Name Type R/RA F/FT Target State Host
-----------------------------------------------------------------
ora.dbp.gsd application 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.ons application 0/3 0/0 ONLINE ONLINE dbp
ora.dbp.vip application 0/0 0/0 ONLINE ONLINE dbp
ora.dbs.gsd application 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.ons application 0/3 0/0 ONLINE ONLINE dbs
ora.dbs.vip application 0/0 0/0 ONLINE ONLINE dbs
安装ORACLE Database
先配置Listener,然后再配置ASM,最后创建数据库,这样可以减少出错的几率。
配置Listener:
1,确认Listen配置成功
配置成功后,两台计算机上的Listener都会作为Application Resource注册到CRS中,这样
CRS就可以监控Listener的运行状态。
$ crs_stat -t -V
Name Type R/RA F/FT Target State Host
-----------------------------------------------------------------
ora....BP.lsnr application 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.gsd application 0/5 0/0 ONLINE ONLINE dbp
ora.dbp.ons application 0/3 0/0 ONLINE ONLINE dbp
ora.dbp.vip application 0/0 0/0 ONLINE ONLINE dbp
ora....BS.lsnr application 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.gsd application 0/5 0/0 ONLINE ONLINE dbs
ora.dbs.ons application 0/3 0/0 ONLINE ONLINE dbs
ora.dbs.vip application 0/0 0/0 ONLINE ONLINE dbs
2,检查listener.ora文件
注意:每个节点都只会监听自己的Public IP和VIP.但是在某个节点宕机时,RAC的Failover机制
会把这个节点的VIP转移到其他节点。
配置ASM:
用DBCA创建ASM。
********????为RAC数据库创建的ASM本身也是一个集群数据库。?????
客户端的测试:
1,客户机的hosts文件
/etc/hosts
c:\windows\system32\drivers\etc\hosts
添加如下的内容:
192.168.123.154 dbp
192.168.123.155 dbs
192.168.123.130 dbp-vip
192.168.123.131 dbs-vip
2,客户端tnsname.ora
wxxrdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP )(HOST = dbs-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP )(HOST = dbp-vip)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = wxxrdb)
(FAILOVER_MODE =
(TYPE = session)
(METHOD = basic)
(RETRIES = 180)
(DELAY = 5)
)
)
)
测试Loadbalance
test.sh
#!/bin/sh
#Usage: test wxxrdb 4000
count = 0
while [$count -lt $2 ]
do
count = 'expr $count + 1'
sqlplus -s username/password@$1 @test.sql
sleep 1
done
test.sql
col "Instance_name format a20
select instance_name from v$instance
/