Oracle11gR2 RAC实时应用集群(1)在Redhat Enterprise Linux5 x86_64下的集群(ASM篇)
(Oracle11gR2 + Grid + RHEL5 + ASM)
RAC(Real Application Clusters,实时应用集群),是多台主机组成的集群计算环境,是Oracle数据库支持网格计算环境的核心技术。
普通Oracle数据库,只能在一台主机上运行,数据库的实例和数据库文件都在一台主机上,是单实例单数据库。
RAC实时应用集群,可以在多台主机上运行,每台节点主机上运行一个数据库实例,通过共享存储磁盘访问相同的数据库文件,是多实例单数据库,单一节点故障
不影响数据库的使用,负载能力也会随节点主机的增加而加强。
RAC集群的关键点:
1.共享存储
2.节点间需要内部通讯,以协调集群正常运行,所以每个节点需要提供外部网络与内部网络.
3.CRS集群软件: 需要集群软件(Grid)协调各节点.
4.集群注册文件(OCR): 需要注册集群,保存在共享磁盘上.
5.仲裁磁盘(Voting Disk): 需要协调各节点决定控制权,做为表决器,保存在共享磁盘上.
6.虚拟IP(Virturl IP): 提供客户端连接,IP由集群软件接管,当集群就绪时,虚拟IP可以连接,11gR2改为用SCAN IP连接.
7.SCAN IP: 11gR2有增加的新特性,用于客户端连接,不需要再在客户端tnsname.ora中添加各节点状态,SCAN IP可以调节负载平衡.
共享存储访问方式(存储系统):
1.集群文件系统(CFS:Cluster File System)
2.自动存储管理(ASM:Automatic Storage Management)
3.网络文件系统(NFS)
单机文件系统FAT32,NTFS,ext3不能作为共享存储,Oracle11g不再支持裸设备做共享存储
选择以下储存方案来建立集群系统:
项目 存储系统 存储位置
ClusterWare软件(Grid) 本地文件系统 本地磁盘
voting disk(Grid) ASM 共享磁盘
OCR(Grid) ASM 共享磁盘
数据库软件 本地文件系统 本地磁盘
数据库 ASM 共享磁盘
下面说说Oracle RAC在Redhat Enterprise Linux5 x86_64下的安装过程。
一.配置多主机节点环境
主要为学习测试之用,可以使用虚拟机模拟来实现多台主机,比较好的选择是VMware Workstation8.0.4.
1.使用VMware Virtual Network Editor添加网络适配器(VMnet1,VMnet2),生成两个网段,VMnet1的网段用于节点外部通讯(PublicNet),VMnet2网段用于节点间通讯(PrivateNet).
2.使用VMware创建两台主机,在每台主机上安装Redhat Enterprise Linux5 x86_64系统,每台需要虚拟两张网卡,IP分配如下:
节点主机 主机公网IP 虚拟IP 私网IP(内部网络)
rac01 192.168.89.166 192.168.89.66 192.168.234.166
rac02 192.168.89.167 192.168.89.67 192.168.234.167
公网与私网IP设置在网卡上,虚拟IP不用设置.
另外还需要一个SCAN IP,作为客户端连接集群用,客户端不必在tnsname.ora配置多个节点.
SCAN名称: rac-scan, SCAN IP: 192.168.89.91
3.设置DNS解析,修改2台虚拟机rac01,rac02上的/etc/hosts文件,添加以下内容:
192.168.89.166 rac01
192.168.89.167 rac02
192.168.89.66 rac01v
192.168.89.67 rac02v
192.168.234.166 rac01p
192.168.234.167 rac02p
192.168.89.91 rac-scan
4.在各节点上检查和安装需要用到的软件包
根据Oracle官方文档,需要以下软件包:
binutils-2.17.50.0.6
compat-libstdc++-33-3.2.3
compat-libstdc++-33-3.2.3 (32 bit)
elfutils-libelf-0.125
elfutils-libelf-devel-0.125
gcc-4.1.2
gcc-c++-4.1.2
glibc-2.5-24
glibc-2.5-24 (32 bit)
glibc-common-2.5
glibc-devel-2.5
glibc-devel-2.5 (32 bit)
glibc-headers-2.5
ksh-20060214
libaio-0.3.106
libaio-0.3.106 (32 bit)
libaio-devel-0.3.106
libaio-devel-0.3.106 (32 bit)
libgcc-4.1.2
libgcc-4.1.2 (32 bit)
libstdc++-4.1.2
libstdc++-4.1.2 (32 bit)
libstdc++-devel 4.1.2
make-3.81
numactl-devel-0.9.8.x86_64
sysstat-7.0.2
以root用户登录系统,执行以下语句检查软件包是否安装
# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++
# rpm -q glibc glibc-common glibc-devel glibc-headers ksh libaio libaio-devel
# rpm -q libgcc libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel
找到Redhat Enterprise Linux5 x86_64安装光盘的Server目录,安装没有安装的软件包
# rpm -ivh compat-db-4.2.52-5.1.x86_64.rpm
5.各节点内核参数修改.
修改文件/etc/sysctl.conf,添加以下内容:
# /etc/sysctl.conf
# for oracle
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
执行以下语句生效:
# /sbin/sysctl -p
修改文件/etc/security/limits.conf,添加以下内容:
# /etc/security/limits.conf
# for oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
6.在各节点上添加组和用户
# groupadd -g 1000 oinstall
# groupadd -g 1031 dba
# useradd -u 1101 -g oinstall -G dba oracle
# passwd oracle
# useradd -u 1100 -g oinstall -G dba grid
# passwd grid
7.在各节点上创建文件夹
# mkdir -p /u01/app/grid
# mkdir -p /u01/app/11.2.0/grid
# mkdir -p /u01/app/oracle
# chown -R root:dba /u01
# chown -R oracle:oinstall /u01/app/oracle
# chown -R grid:oinstall /u01/app/grid
# chmod -R 775 /u01/
8.创建共享磁盘
关闭主机后建共享磁盘,Disk Mode 选择Independent Persistent,不用缓存,以便多机访问共享.
磁盘总线选择SCSI 1:1或1:x,与本地磁盘(SCSI 0:0)分开
另外需要修改各虚拟机目录中的vmx文件,解除锁并取消缓存,以便多机访问,添加
disk.locking="false"
diskLib.dataCacheMaxSize = "0"
disk.EnableUUID = "TRUE"
创建后另一台主机也挂载同一个磁盘.
注意如果用虚拟机创建的磁盘,需要选择立即分配磁盘空间,否则另一台机不能读取共享磁盘的分区表.
10.磁盘分区
启动主机后使用fdisk命令给共享磁盘分区。
指定为扩展分区,分成三个逻辑分区
# fdisk -l //查看分区
# fdisk /dev/sdb //分区sdb硬盘,逻辑盘sdb5,sdb6,sdb7
第一个分区将配置ASM实例,存放集群注册(ocr)文件和表决磁盘(votedisk)文件.
第二个分区将配置为ASM磁盘,存放数据库文件.
第三个分区将配置为ASM磁盘,存放快速恢复区文件.
分区后重新启动
12.配置ASM磁盘
在Linux中,加载设备时,因加载顺序问题,共享磁盘在各节点的设备名可能会不一致.
为解决这个问题,保证各节点的设备名一致,有两种方法:
<<1>>使用asmlib创建asm磁盘,将会在各分区上做asm磁盘标识,以保证设备名称的唯一性
首先安装ASM内核软件包
在oracle官方网站下载asm的软件包安装到各节点主机上.
oracleasm-support-2.1.7-1.el5.x86_64.rpm
oracleasmlib-2.0.4-1.el5.x86_64.rpm
oracleasm-2.6.18-308.el5-2.0.5-1.el5.x86_64.rpm
可以从以下链接下载:
http://www.oracle.com/technetwork/server-storage/linux/asmlib/index-101839.html
然后创建ASM磁盘
在一个节点执行以下命令
# /etc/init.d/oracleasm enable
# /etc/init.d/oracleasm configure
# /etc/init.d/oracleasm createdisk DISK1 /dev/sdb5
# /etc/init.d/oracleasm createdisk DISK2 /dev/sdb6
# /etc/init.d/oracleasm createdisk DISK3 /dev/sdb7
将在以下路径/dev/oracleasm/disks/下产生ASM磁盘DISK1,DISK2,DISK3.
在其它节点执行以下命令,扫描ASM磁盘.
# /etc/init.d/oracleasm enable
# /etc/init.d/oracleasm configure
# /etc/init.d/oracleasm scandisks
# /etc/init.d/oracleasm listdisks
然后需要在每个节点上设置磁盘的访问权限,否则后面配置磁盘时无法发现磁盘.
# chown grid:dba /dev/oracleasm/disks/DISK1
# chown grid:dba /dev/oracleasm/disks/DISK2
# chown grid:dba /dev/oracleasm/disks/DISK3
由于系统重新启动后,磁盘的owner会被修改为root,为保证重启后保持磁盘owner不变,可以在/etc/udev/rule下添加一个rules文件
添加/etc/udev/rules.d/99-asmdisk-owner.rules文件,添加以下内容
NAME=="DISK1", OWNER="grid" GROUP="dba", MODE="0660"
当然,asmlib并不只是用于创建asm磁盘,还具有asm存储管理功能,并为应用程序提供接口.
<<2>>使用udev管理,将从磁盘获得scsi_id,然后根据scsi_id加载成易读的设备名,保证设备名的唯一性.
如果使用虚拟机,首先需在虚拟主机的配置文件vmx文件中设置下列参数,以起用
disk.EnableUUID = "TRUE"
如果虚拟主机有通过设定更改任何参数,这个参数会自动更改为FALSE,需要重设.
启动主机后确认udev是否已安装
# rpm -qa | grep udev
udev-095-14.27.el5_7.1
执行以下命令获得scsi id信息
# /sbin/scsi_id -g -u -s /block/sdb # rhel5使用, rhel6使用:# /sbin/scsi_id -g -u -d /dev/sdb
36000c29fd07c14fdb1ca780130a5ad8e
配置udev配置文件,添加rules文件(在目录/etc/udev/rules.d/下)并授权.
# cd /etc/udev/rules.d/
# vi 99-x-asmdisk.rules
添加以下参数,注意一个行为一条规则,并且逗号(,)与下一个关键词之间有空格.
KERNEL=="sd?5", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk1",
OWNER="grid", GROUP="dba", MODE="0660"
KERNEL=="sd?6", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk2",
OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sd?7", BUS=="scsi", PROGRAM=="/sbin/scsi_id -g -u -s /block/$parent", RESULT=="36000c29fd07c14fdb1ca780130a5ad8e", NAME="asmdisk3",
OWNER="oracle", GROUP="dba", MODE="0660"
KERNEL=="sd?5", BUS=="scsi", NAME=="asmdisk1", OWNER="grid", GROUP="dba", MODE="0660"
重新启动udev或重启节点.
# start_udev
验证是否配置正常
# ls -al /dev/asmdisk*
后续创建磁盘组时可以将搜索字符串ASM_DISKSTRING参数指向‘/dev/asmdisk*'就可以了
二.安装RAC.
1.安装RAC集群软件Grid.
<<1>>将软件包linux.x64_11gR2_grid.zip解压到节点rac01.
# unzip linux.x64_11gR2_grid.zip
<<2>>安装cvuadisk包
在Grid的安装包grid/rpm/cvuqdisk-1.0.9-1.rpm,以root用户安装
# export CVUQDISK_GRP=oinstall
# rpm -ivh cvuqdisk-1.0.9-1.rpm
<<3>>首先修改目录权限
# chown -R root:oinstall /u01/app/grid
# chmod -R 775 /u01/app/grid
# chown -R oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/app/oracle
<<4>>配置grid用户环境变量.
# su - grid
$ vi .bash_profile
添加以下内容
# For Oracle
export DISPLAY=:0.0
export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_BASE=/u01/app/grid;
export ORACLE_HOME=/u01/app/11.2.0/grid;
export ORACLE_TERM=xterm;
export PATH=/usr/sbin:$PATH;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
<<5>>以grid用户执行目录grid下的runInstaller命令:
$ ./runInstaller
执行runInstaller,启动安装图形界面.
1>设置网格基础结构
安装选项: 安装和配置集群的网格基础结构.
安装类型: 高级安装
语言: 简体中文
网格即插即用: 集群名称: rac-cluster
SCAN名称: rac-scan
SCAN端口: 1521
不配置GNS,如果需要自动生成虚拟IP,需配置GNS
GNS子域: racgrid
GNS VIP地址: 192.168.89.91
集群节点信息: 编辑和添加主机和虚拟IP名称
主机名 虚拟IP名
rac01 rac01v
rac02 rac02v
点ssh按钮配置节点ssh互信(需要输入grid用户密码)
网络接口使用情况: 接口名称 子网 接口类型
PublicNet 192.168.89.0 公共
PrivateNet 192.168.234.0 专用
存储选项: 自动存储管理(ASM)
创建ASM磁盘组: 当选择存储选项:自动存储管理(ASM)后,需要创建ASM磁盘.
设置ASM磁盘搜索路径/dev/oracleasm/disks/DISK*,出现开始用asmlib创建的磁盘.
/dev/asmdisk*,出现udev配置的磁盘.
设置磁盘组名,使用外部冗余,勾选出现的磁盘
ASM口令: 设置SYS和ASMSNMP的口令,是用相同口令
故障隔离: 不使用智能平台管理接口(IPMI).
安装位置: 设置安装位置默认:Oracle基目录/u01/app/grid,软件位置/u01/app/11.2.0/grid
先决条件检查: 自动检查先决条件
安装
按提示在各节点上以root用户执行脚本.
# /u01/app/oraInventory/orainstRoot.sh
# /u01/app/11.2.0/grid/root.sh
如果执行出错,须检查各节点的磁盘权限,之前需要配置磁盘权限.
# chown grid:dba /dev/oracleasm/disks/DISK1
或
# chown grid:dba /dev/asmdisk1
执行完脚本,点ok后继续配置
最后验证时出现错误[INS-20802]Oracle Cluster Verification Utility failed.
是因为在Hosts配置文件里配置了SCAN,未启用DNS解析,不影响RAC正常运行
点ok后完成安装.
<<6>>执行完后检查CRS是否成功
[grid@rac01 grid]$ olsnodes
rac01
rac02
[grid@rac01 grid]$ 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
[grid@rac01 grid]$ crs_stat -t -v
Name Type R/RA F/FT Target State Host
----------------------------------------------------------------------
ora....ER.lsnr ora....er.type 0/5 0/ ONLINE ONLINE rac01
ora....N1.lsnr ora....er.type 0/5 0/0 ONLINE ONLINE rac01
ora.VOTE.dg ora....up.type 0/5 0/ ONLINE ONLINE rac01
ora.asm ora.asm.type 0/5 0/ ONLINE ONLINE rac01
ora.eons ora.eons.type 0/3 0/ ONLINE ONLINE rac01
ora.gsd ora.gsd.type 0/5 0/ OFFLINE OFFLINE
ora....network ora....rk.type 0/5 0/ ONLINE ONLINE rac01
ora.oc4j ora.oc4j.type 0/5 0/0 OFFLINE OFFLINE
ora.ons ora.ons.type 0/3 0/ ONLINE ONLINE rac01
ora....SM1.asm application 0/5 0/0 ONLINE ONLINE rac01
ora....01.lsnr application 0/5 0/0 ONLINE ONLINE rac01
ora.rac01.gsd application 0/5 0/0 OFFLINE OFFLINE
ora.rac01.ons application 0/3 0/0 ONLINE ONLINE rac01
ora.rac01.vip ora....t1.type 0/0 0/0 ONLINE ONLINE rac01
ora....SM2.asm application 0/5 0/0 ONLINE ONLINE rac02
ora....02.lsnr application 0/5 0/0 ONLINE ONLINE rac02
ora.rac02.gsd application 0/5 0/0 OFFLINE OFFLINE
ora.rac02.ons application 0/3 0/0 ONLINE ONLINE rac02
ora.rac02.vip ora....t1.type 0/0 0/0 ONLINE ONLINE rac02
ora....ry.acfs ora....fs.type 0/5 0/ ONLINE ONLINE rac01
ora.scan1.vip ora....ip.type 0/0 0/0 ONLINE ONLINE rac01
[grid@rac01 ~]$ srvctl status listener
监听程序 LISTENER 已启用
监听程序 LISTENER 正在节点上运行: rac01,rac02
表示CRS已成功.
重新启动节点后,如果集群服务不能启动.
# ./crsctl check crs
Failure 1 contacting CSS daemon
Cannot communicate with CRS
Cannot communicate with EVM
需要检查设备权限的问题,如果没有使用udev的rules文件配置设备文件权限,重启后磁盘设备owner会被修改为root.
或者没有设置crs随系统启动.
# /u01/app/11.2.0/grid/bin/crsctl stop crs # 停止CRS服务
# /u01/app/11.2.0/grid/bin/crsctl start crs # 启动CRS服务
# /u01/app/11.2.0/grid/bin/crsctl disable crs # 禁止随系统启动
# /u01/app/11.2.0/grid/bin/crsctl enable crs # 允许随系统启动
# /u01/app/11.2.0/grid/bin/crsctl stop cluster -all # 停止所有节点上运行的全部集群资源
# /u01/app/11.2.0/grid/bin/crsctl start cluster -all # 启动所有节点上运行的全部集群资源
2.安装Oracle数据库软件.
<<1>>.编辑Oracle用户环境,编辑.bash_profile文件
# su - oracle
$ vi .bash_profile
添加以下内容
# For Oracle
export DISPLAY=:0.0
export TMP=/tmp;
export TMPDIR=$TMP;
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1;
export ORACLE_UNQNAME=astt;
export ORACLE_SID=astt1; # 在节点rac02上 export ORACLE_SID=astt2
export ORACLE_TERM=xterm;
export PATH=/usr/sbin:$PATH;
export PATH=$ORACLE_HOME/bin:$PATH;
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
<<2>>.将oracle数据库软件解压到节点rac01.
# unzip linux.x64_11gR2_database_1of2.zip
# unzip linux.x64_11gR2_database_2of2.zip
<<3>>.修改目录权限。
# chown -R oracle:oinstall /u01/app/oracle
# chmod -R 775 /u01/app/oracle
<<4>>.以oracle登入系统,运行database下的runInstaller文件。
$ ./runInstaller
配置安全更新 不需要接收更新
安装选项 选择仅安装数据库软件,后续再通过dbca创建数据库.
网格选项 Real Application Clusters数据库安装
节点全选
点按钮SSH Connectivity.配置oracle下ssh互信.
此时好像有bug,无法输入oracle用户密码,先选单实例,下一步直到输入路径,然后后退,再选择集群数据库可以解决.
产品语言 根据需要选择:英语、简体中文
数据库版本 企业版
安装位置 默认(根据.bash_profile中的全局变量设置)
Oracle基目录: /u01/app/oracle
软件位置: /u01/app/oracle/product/11.2.0/db_1
操作系统组 oinstall
先决条件检查 忽略警告
安装
按提示在每个节点上执行脚本/u01/app/oracle/product/11.2.0/db_1/root.sh
点OK完成安装
3.配置ASM磁盘添加磁盘组
以grid用户运行asmca.
设置ASM磁盘搜索路径/dev/oracleasm/disks/DISK*,出现开始用asmlib创建的磁盘.
或者 /dev/asmdisk,出现udev配置的磁盘.
设置磁盘组名,勾选出现的磁盘
装载磁盘到各节点.
4.创建数据库.
首先更改目录权限,不然后面可能会出错.
# chown -R oracle:oinstall /u01/app/oracle
# chown -R grid:oinstall /u01/app/grid
# chmod -R 755 /u01/app/oracle
# chmod -R 755 /u01/app/grid
以oracle用户运行dbca.
操作 创建数据库
数据库模板 一般用途
数据库标识 设置全局数据库名和SID前缀,节点全选
管理选项 默认
数据库身份 设置密码
数据库文件位置 存储类型:自动存储管理,使用Oracle-Managed files,数据库区:设置之前创建的磁盘组+DATA
字符集
安装
出现提示在节点rac02上启动database control出错,在节点rac02执行以下命令:
[oracle@rac02 ~]$ export ORACLE_UNQNAME=astt
[oracle@rac02 ~]$ /u01/app/oracle/product/11.2.0/db_1/bin/emctl start dbconsole
点OK安装完成.
安装后可能不能连接
如果出现错误ORA-12537: TNS:connection closed,可能是权限的问题,执行以下可以解决:
# chown -R oracle:oinstall /u01/app/oracle
# chown -R grid:oinstall /u01/app/grid
# chmod -R 755 /u01/app/oracle
# chmod -R 755 /u01/app/grid
5.测试数据库
运行sqlplus,以dba权限登录Oracle系统后执行以下语句查询集群节点状态:
$ ./crs_stat -t -v
$ sqlplus system/password@astt;
SQL> select instance_name,host_name,status from v$instance;
SQL> select instance_name,host_name,status from gv$instance;
$ srvctl stop database -d astt -o immediate;
$ srvctl start database -d astt;