RHEL6 Oracle11G RAC部署
Oracle11g RAC部署文档
一、RAC简介
RAC 是 Oracle 数据库的一个群集解决方案,是有着两个或者两个以上的数据库节点协调运作能力的。
Oracle Real Application Cluster :在服务器集群上运行,可调整集群中所有应用程序的工作量,同时还提供以下功能:
• 集成式集群件:其中包括用于进行集群连接、消息传送和锁定、集群控制与恢复的功能。在 Oracle Database 10g 或更高版本支持的所有平台上均可使用这些功能。
• 自动工作量管理:可以定义一些规则,以便在正常操作和对故障作出响应期间将处理资源自动分配给每个服务。用户可以动态地修改这些规则,以满足不断变化的业务需求。这种在数据库网格中动态分配资源的功能是 Oracle RAC 特有的功能。
• 向中间层自动发送事件通知:集群配置发生更改后,中间层可以立即适应实例故障转移或可用的新实例。这样,最终用户在发生实例故障转移时可继续工作,不存在通常由网络超时引起的延迟。有新实例可用时,中间层可以立即开始与该实例建立负载平衡连接。Oracle Database 10g 或更高版本中的 Java 数据库连接 (JDBC) 驱动程序拥有“快速连接故障转移”功能,该功能可以自动启用以处理以上事件。
RAC的特点
1、集群内多台服务器节点(m个)上存在多个实例(n个);
2、一个数据库(database)文件系统存储在共享存储设备上,比如NAS、SAN;
3、实例之间通过内联网络及集成式集群件互相通讯、交换数据。
4、每一个节点的实例都有自己的SGA、后台进程、Redo Logs、Undo Tablespace及参数配置文件(也可使用同一套公共的参数文件)。
RAC的缺陷
RAC并不能解决物理读写、数据安全等问题,因为不管多少个实例,数据都是存储在一个共享存储设备上。
尽管RAC可以通过多实例冗余实现高可用性,但终究脱离不了集中式数据库的本质,其与分布式系统相比,硬盘读写速度、网络带宽及质量仍然是其瓶颈所在。因为它使用一套共享存储系统,在多实例同时读写时,在网络中传输大容量的数据显然不如传输分发的数据处理任务访问需要的数据分片方便快捷,而且分布式集群中大部分任务都是使用局部本地数据库,访问速度效率更高。
后台进程
LMSn 全局缓存服务进程GCS
LMD 全局查询服务守护进程
LMON 全局查询服务监视进程
LCK0 实例查询进程
DIAG 诊断守护进程
服务进程
CRS 集群资源服务
CSS 集群同步服务
EVMD 事件管理服务
ONS 事件的发布及订阅服务
Cache Fusion机制
前映像 past image
VIP 虚拟IP地址,ORC 集群注册文件,Voting Disk 表决磁盘
二、环境说明
Vmware ESXI 5.1
系统:Red Hat Enterprise Linux Server release 6.3
安装包:linux.x64_11gR2_database_2of2.zip,linux.x64_11gR2_database_1of2.zip,linux.x64_11gR2_grid
硬件:内存至少2G,Swap至少3G
node1 eth0 192.168.24.95 192.168.24.71(VIP) rac1
eth1 10.0.24.1
node2 eth0 192.168.24.96 192.168.24.72(VIP) rac2
eth1 10.0.24.2
两块网卡:VMware virtual Ethernet adapter 1 192.168.24网段
VMware virtual Ethernet adapter 2 10.0.24网段
三、vmware中硬盘网络部署
Vmware存储器中增加rac文件夹放置共享存储文件
Rac1
1.添加硬盘。选择创建新的虚拟磁盘。
2.选择厚置备置零的置备模式,否则虚机开机会报错。
3.节点1选择scsi(1:0),模式-独立-持久
4.SCSI总线共享选择虚拟
Rac2
1.添加硬盘,使用节点1的硬盘2文件
2.选择与节点1相同的SCSI(1:0)
3.SCSI总线共享选择虚拟,模式-独立-持久
3.1 IP规划
Rac1:ifconfig eth0:1 192.168.24.71 netmask 255.255.255.0 up
ifconfig eth1 10.0.24.1 netmask 255.255.255.0 up
Rac2:ifconfig eth0:1 192.168.24.72 netmask 255.255.255.0 up
ifconfig eth1 10.0.24.2 netmask 255.255.255.0 up
删除IP:ip addr del 192.168.24.72 dev eth0:1
Rac安装前VIP不需要配置
/etc/hosts
###eth0 public ip
192.168.24.95 rac1
192.168.24.96 rac2
###etc1 private ip
10.0.24.1 rac1-priv
10.0.24.2 rac2-priv
###virtual ip
192.168.24.71 rac1-vip
192.168.24.72 rac2-vip
###scan ip
192.168.24.70 rac-scan
注:scan ip 和virtual ip 无需设置IP,为空IP
rac1
vi /etc/sysconfig/network
HOSTNAME=rac1
rac2
vi /etc/sysconfig/network
HOSTNAME=rac2
3.2 关闭服务,两节点操作
chkconfig ip6tables off
chkconfig postfix off
mv /etc/ntp.conf /etc/ntp.confbak
reboot
3.3 软件包检查,两节点操作
rpm -q --qf '%{NAME}-%{VERSION}-%{RELEASE}(%{ARCH})\n' binutils \
compat-libstdc++-33 \
elfutils-libelf- \
elfutils-libelf-devel \
gcc \
gcc-c++ \
glibc \
glibc-common \
glibc-devel \
glibc-devel \
glibc-headers \
ksh \
libaio \
libaio-devel \
libgcc \
libstdc++ \
libstdc++-devel \
make \
numactl-devel \
sysstat
3.4 安装not installed,两节点操作
yum install -y compat-libstdc++-33 elfutils-libelf-devel gcc gcc-c++ glibc-devel glibc-headers ksh libaio-devel libstdc++-devel numactl-devel compat-libcap1
3.5 创建用户,组,两节点操作
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmdba
groupadd asmoper
useradd -g oinstall -G dba,asmdba,asmadmin,asmoper grid
useradd -g oinstall -G dba,oper,asmdba oracle
echo -n oracle|passwd --stdin grid
echo -n oracle|passwd --stdin oracle
3.6 创建软件安装目录并赋予权限,两节点操作
目录规划:
Oracle Base 目录 :/oracle/db
Grid Base 目录:/oracle/grid
Grid Home 目录:/oracle/asm
创建目录
mkdir -p /oracle
mkdir -p /oracle/db
mkdir -p /oracle/grid
mkdir -p /oracle/asm
赋予权限
chown -R grid.dba /oracle
chown -R grid.dba /oracle/asm
chown -R grid.dba /oracle/grid
chown -R oracle.dba /oracle/db
chmod -R 775 /oracle
3.7 修改系统内核参数,两节点操作
3.7.1 编辑/etc/sysctl.conf文件中加入下列参数
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 5368709120
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
sysctl -p 运行使其生效
3.7.2 设置Shell Limits(系统资源限制)
在/etc/security/limits.conf文件中加入下面行
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
3.7.3 修改安全限制
编辑/etc/pam.d/login文件,添加下列行
session required pam_limits.so
3.7.4 修改/etc/profile
添加下列为文件
if [ $USER = "oracle" ] || [ $USER = "grid" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
umask 022
fi
# source /etc/profile 运行使其生效
四、修改用户环境变量
4.1 Grid 用户
修改rac1环境变量
# su - grid
$ vi .bash_profile
export ORACLE_BASE=/oracle/grid
export ORACLE_HOME=/oracle/asm
export ORACLE_SID=+ASM1
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
修改rac2环境变量
# su - grid
$ vi .bash_profile
export ORACLE_BASE=/oracle/grid
export ORACLE_HOME=/oracle/asm
export ORACLE_SID=+ASM2
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
4.2 Oracle 用户
修改rac1环境变量
# su - oracle
$ vi .bash_profile
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_SID=racdb1
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
修改rac2环境变量
# su - oracle
$ vi .bash_profile
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=$ORACLE_BASE/product/11.2
export ORACLE_SID=racdb2
export PATH=$PATH:$ORACLE_HOME/bin:$HOME/bin
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/Apache/Apache/bin:$PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib:/usr/local/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
CLASSPATH=$CLASSPATH:$ORACLE_HOME/network/jlib
export CLASSPATH
$ source .bash_profile 使其生效
五、配置互信
5.1 Grid用户互信配置
Rac1
[root@rac1 ~]# su – grid
[grid@rac1 ~]$ ssh-keygen -t rsa
[grid@rac1 ~]$ ssh-keygen -t dsa
Rac2
[root@rac2 ~]# su – grid
[grid@rac2 ~]$ ssh-keygen -t rsa
[grid@rac1 ~]$ ssh-keygen -t dsa
Rac1
[grid@rac1 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@rac1 ~]$ ssh grid@rac2 cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
Rac2
[grid@rac2 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[grid@rac2 ~]$ ssh grid@rac1 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
检验 在rac1、rac2同时执行以下操作
$ssh rac1 date
$ssh rac1-priv date
$ssh rac2 date
$ssh rac2-priv date
5.2 oracle用户互信配置
Rac1
[root@rac1 ~]# su - oracle
[oracle@rac1 ~]$ ssh-keygen -t rsa
[oracle@rac1 ~]$ ssh-keygen -t dsa
Rac2
[root@rac2 ~]# su - oracle
[oracle@rac2 ~]$ ssh-keygen -t rsa
[oracle@rac2 ~]$ ssh-keygen -t dsa
Rac1
[oracle@rac1 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@rac1 ~]$ ssh oracle@rac2 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
Rac2
[oracle@rac2 ~]$ cat ~/.ssh/*.pub >> ~/.ssh/authorized_keys
[oracle@rac2 ~]$ ssh oracle@rac1 cat ~/.ssh/*.pub >>~/.ssh/authorized_keys
检验在rac1、rac2同时执行以下操作
$ssh rac1 date
$ssh rac1-priv date
$ssh rac2 date
$ssh rac2-priv date
六、创建共享磁盘
确保两台机器均是以下状态,打开虚拟机进行磁盘的格式化等操作
查看两个节点中服务器识别状态
[root@rac1 ~]# fdisk /dev/sdb
[root@rac1 ~]# fdisk -l /dev/sdb
[root@rac1 ~]# partprobe /dev/sdb
Rac2
[root@rac2 ~]# fdisk -l /dev/sdb
两个节点均要操作
映射到裸设备
修改/etc/udev/rules.d/60-raw.rules文件,添加以下内容
ACTION=="add",KERNEL=="sdb1",RUN+="/bin/raw /dev/raw/raw1 %N"
KERNEL=="raw*",OWNER="grid",GROUP="dba",MODE="660"
两个节点均要操作
[root@rac1 ~]# partprobe
[root@rac1 ~]# start_udev
[root@rac1 ~]# ls -l /dev/raw/
七、介质上传
[root@rac1 ~]# mkdir /soft
[root@rac1 ~]# mv grid /soft
[root@rac1 ~]# chown -R grid.dba /soft/
使用grid用户上传
cluster安装
[root@rac1 ~]# cd /soft/grid/rpm
[root@rac1 rpm]# rpm -ivh cvuqdisk-1.0.7-1.rpm
[root@rac1 rpm]# scp cvuqdisk-1.0.7-1.rpm rac2:/tmp
[root@rac2 ~]# rpm -ivh /tmp/cvuqdisk-1.0.7-1.rpm
[grid@rac1 grid]$ ./runInstaller
7.1 选择要安装的软件类型
选择Install and Configure GridInfrastructure for a Cluster,点击“Next”
7.2 选择安装类型
选择Advanced Installation,点击“Next”
7.3 选择产品语言
添加简体中文,Simplified Chinese,点击“Next”
7.4 设置集群名称和scan名字
7.5 配置集群节点信息
添加节点2的信息,名字和虚拟ip都是在hosts中配置的
此处就不需要再配置ssh互信了,之前已经做过配置,如果前面没有配置,此处可以进行配置,10G之前没有此选项
7.6 配置网络接口
查看是否正常
7.7 指定OCR和vote的存储位置
7.8 定义DG名字,选择所存储的盘
7.9 指定asm的密码
可能会提示密码强度不够,点击yes即可,next
7.10 系统组设置选择用户组
选择dba组,出现提示,忽略即可
7.11指定安装目录
查看是否是环境变量中设置的路径
7.12 建立产品清单目录
7.13安装前检查,勾选以下警告
不影响安装,点击next
7.14 总体信息检查
检查相关配置信息是否正确
7.15 执行配置脚本
使用root用户执行以下两个脚本
Rac1
/oracle/oraInventory/orainstRoot.sh
Rac2
/oracle/oraInventory/orainstRoot.sh
Rac1
/oracle/asm/root.sh
Rac2
/oracle/asm/root.sh
报错
11.2.0.1 BUG
监控/var/tmp/.oracle/npohasd,有内容时运行
/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1消除BUG
碰到问题回滚
/oracle/asm/crs/install/rootcrs.pl -deconfig -verbose -force
7.16 安装完成
遇见以下错误,是正常的,是因为在hosts文件中存在有scan ip,只要两个节点可以ping同scan的ip即可
安装完成,查看集群状态
crs_stat -t
八、安装数据库软件
rdbms的安装
[oracle@rac1 ~]$ cd database/
[oracle@rac1 database]$ ./runInstaller
8.1 选择安装类型
8.2 安装选项选择
选择Oracle Real Application Clusters database installation
8.3 选择产品语言
8.4 选择安装数据库类型,选择企业版
8.5 安装目录选择
查看是否和oracle用户环境变量中配置的相同
8.6 设置系统组
均选择dba组
8.7 安装前检查
8.8 执行配置脚本
安装完成
[root@rac2 ~]#/oracle/oraInventory/orainstRoot.sh
[root@rac1 ~]#/oracle/db/product/11.2/root.sh
[root@rac2 ~]#/oracle/db/product/11.2/root.sh
九、数据库创建
9.1 使用oracle用户创建数据库
[oracle@rac1 ~]$ dbca
9.2创建一个数据库
9.3自定义数据库
9.4指定数据库名和实例名
9.5选择不安装EM
9.6设置数据库管理密码
可能会提示强度不够,忽略即可
9.7选择数据文件存储方式
9.8不指定闪回区
9.9选择数据库组件,根据需要选择
9.10配置数据库相关参数
9.11字符集选择
9.12数据库文件定义
9.13正式安装
9.14完成安装
9.15检查集群状态
[grid@rac1 ~]$ crs_stat –t
数据库连接
[oracle@rac1 ~]$ sqlplus system/oracle@racdb
[oracle@rac2 ~]$ sqlplus system/oracle@racdb
十、日常管理
RAC所有资源信息
crs_stat –t
show parameter instance
查看RAC环境
列出配置的所有数据库
srvctl config database
所有实例和服务状态
srvctl status database -d 实例名
ASM实例状态
srvctl status asm -n SID名
显示RAC数据库配置
srvctl config database -d 实例名
查询集群中所有正在运行的实例
SELECT
inst_id
, instance_number inst_no
, instance_name inst_name
, parallel
, status
, database_status db_status
, active_state state
, host_name host
FROM gv$instance
ORDER BY inst_id;
select name from v$datafile
union
select member from v$logfile
union
select name from v$controlfile
union
select name from v$tempfile;
十一、RAC关闭顺序
11.1 关闭数据库,oracle用户执行srvctl命令
停止所有节点上的实例
[oracle@node1 ~]$srvctl stop database -d 实例名
查看节点状态
[oracle@node1 ~]$srvctl status database -d 实例名
SQL>shutdown immediate;
11.2 停止集群服务,必须以root用户运行
停止所有节点服务
[root@node1 ~]/oracle/asm/bin/crsctl stop cluster -all
查看节点状态
[grid@node1 ~]crs_stat -t -v
11.3 停止HAS(High Availability Services),必须以root用户运行,所有节点都要执行
[root@node1 ~]/oracle/asm/bin/crsctl stop has
十二、RAC启动顺序
12.1 启动HAS(High Availability Services),必须以root用户 ,所有节点都要执行
[root@node1 ~]/oracle/asm/bin/crsctl start has
查看节点状态
[grid@node1 ~]crs_stat -t -v
12.2 启动集群(cluster)
[root@node1 ~]/oracle/asm/bin/crsctl start cluster -all
12.3 启动数据库,oracl用户执行srvctl命令
[oracle@node1 ~]$ srvctl start database -d 实例名
检查节点状态
[grid@node1 ~]crs_stat -t -v
检查数据库状态
[grid@node1 ~]$ srvctl status database -d 实例名
检查ASM状态
[grid@node1 ~]$srvctl status asm
故障恢复需要运行/bin/dd if=/var/tmp/.oracle/npohasd of=/dev/null bs=1024 count=1消除BUG