1.
Oracle RAC,全称real application clusters,译为“实时应用集群”, 是Oracle新版数据库中采用的一项新技术,是高可用性的一种,也是Oracle数据库支持网格计算环境的核心技术。Oracle RAC主要支持Oracle9i、10g、11g版本,可以支持24 x 7 有效的数据库应用系统,在低成本服务器上构建高可用性数据库系统,并且自由部署应用,无需修改代码。在Oracle RAC环境下,Oracle集成提供了集群软件和存储管理软件,为用户降低了应用成本。当应用规模需要扩充时,用户可以按需扩展系统,以保证系统的性能。本文档主要描述Oracle 11gR2 RAC上中标麒麟安全操作系统5U6版本上的安装以及配置。
2. 准备工作
硬件方面:
至少两台服务器,服务器至少有两块网卡,其中一块网卡用于对外提供服务,别一块网卡用于oracle rac节点之间通信。
一台存储,oracle rac需要使用共享磁盘,仲裁磁盘等。 存储可以是专业的光纤存储设备,也可以是NAS存储,如iscsi,nfs等。
软件方面:
中标麒麟安全操作系统光盘,用于在服务器上安装操作系统,以及安装好系统后,使用光盘安装oracle 11gR2 依赖的包。
Oracle 11gR2 安装软件包:
其中linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip是oracle 11gR2数据库安装包,linux.x64_11gR2_grid.zip是oracle网格基础结构,是oracle rac中非常重要的组件。
以上软件包从oracle官网下载
检测操作系统依赖包:
在两台服务器上分别执行
#rpm -q binutils compat-db control-center gcc gcc-c++ glibc glibc-common
gnome-libs libstdc++ libstdc++-devel make pdksh sysstat xscreensaver libaio openmotif21
查看上述软件包是否都安装,如果没有安装的,把操作系统安装光盘挂载到服务器上,安装缺失的包。
安装操作系统时,两台服务器的主机名分别为rac1和rac2
操作系统设置
设置操作系统IP地址和修改/etc/hosts文件
这样,在两台主机之间可以直接通过主机名进行访问
[root@rac1 ~]# vi /etc/hosts
#Public 对外提供服务的IP
192.168.1.171 rac1 rac1.localdomain
192.168.1.173 rac2 rac2.localdomain
#Private 私有IP地址,用于RAC节点间通讯
172.168.1.191 rac1-priv rac1-priv.localdomain
172.168.1.192 rac2-priv rac2-priv.localdomain
#Virtual 虚拟IP地址
192.168.1.172 rac1-vip rac1-vip.localdomain
192.168.1.174 rac2-vip rac2-vip.localdomain
#SCAN
192.168.1.176 rac-cluster rac-cluster-scan
创建oracle用户和grid用户
在两台服务器上分别执行下列操作
[root@rac1 ~]# groupadd -g 5000 asmadmin
[root@rac1 ~]# groupadd -g 5001 asmdba
[root@rac1 ~]# groupadd -g 5002 asmoper
[root@rac1 ~]# groupadd -g 6000 oinstall
[root@rac1 ~]# groupadd -g 6001 dba
[root@rac1 ~]# groupadd -g 6002 oper
[root@rac1 ~]# useradd -m -u 1100 -g oinstall -G asmadmin,asmdba,asmoper -d /home/grid -s /bin/bash grid
#创建grid用户,这个用户属于oinstall组,附加组有asmadmin,asmdba,asmoper
[root@rac1 ~]# useradd -m -u 1101 -g oinstall -G dba,oper,asmdba -d /home/oracle -s /bin/bash oracle
#创建oracle用户,这个用户属于oinstall组,附加组有asmadmin,asmdba,asmoper
[root@rac1 ~]# mkdir -p /oracle/app/grid
[root@rac1 ~]# mkdir -p /oracle/app/11.2.0/grid
[root@rac1 ~]# mkdir -p /oracle/app/oracle
[root@rac1 ~]# passwd oracle
[root@rac1 ~]# passwd grid
[root@rac1 ~]# chown -R grid:oinstall /oracle/app/grid
[root@rac1 ~]# chmod -R 775 /oracle/app/grid
[root@rac1 ~]# chown -R grid:oinstall /oracle/app/11.2.0/grid
[root@rac1 ~]# chmod -R 775 /oracle/app/11.2.0/grid
[root@rac1 ~]# chown -R oracle:oinstall /oracle/app/oracle
[root@rac1 ~]# chmod -R 775 /oracle/app/oracle
设置oracle用户和grid用户的环境变量
设置oracle用户环境变量,在两个节点上执行下列操作,注意两节点的ORACLE_SID是不同的
[oracle@rac1 ~]# vim .bash_profile
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_HOSTNAME=rac1.localdomain; export ORACLE_HOSTNAME
ORACLE_UNQNAME=RAC; export ORACLE_UNQNAME
ORACLE_BASE=/oracle/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1; export ORACLE_HOME
ORACLE_SID=RAC1; export ORACLE_SID #注意这里,在主机rac1上,它的实例名为RAC1
而在rac2主机,它的实例名RAC2
ORACLE_TERM=xterm; export ORACLE_TERM
BASE_PATH=/usr/sbin:$PATH; export BASE_PATH
PATH=$ORACLE_HOME/bin:$BASE_PATH; export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
export CLASSPATH
设置grid用户的环境变量,两个节点都要执行下列操作,但ORACLE_SID是不同的
[grid@rac1 ~]# vim .bash_profile
#Grid Settings
CRS_HOME=/oracle/app/11.2.0/grid
ORACLE_BASE=/oracle/app/grid ORACLE_SID=+ASM1 #注意在rac2中,将ORACLE_SID=+ASM2
PATH=$CRS_HOME/bin:$PATH:$Home/bin
export PATH CRS_HOME ORACLE_BASE ORACLE_SID
调整操作系统内核参数
参数的大小,请根据服务器硬件配置,应用程序访问具体情况进行调整。以下参数仅做参考,分别在两台机器执行。
编辑/etc/sysctl.conf文件
[root@rac1 ~]# vim /etc/sysctl.conf
fs.file-max = 6815744
kernel.msgmni = 2878
kernel.msgmax = 8192
kernel.msgmnb = 65536
kernel.sem = 250 32000 100 142
kernel.shmmni = 4096
物理内存除以pagesize
kernel.shmall = 1073741824
物理内存的一半
kernel.shmmax = 4294967295
kernel.sysrq = 1
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
fs.aio-max-nr = 3145728
net.ipv4.ip_local_port_range = 9000 65500
vm.min_free_kbytes = 51200
编辑/etc/security/limits.conf
[root@rac1 ~]# vi /etc/security/limits.conf
#oracle数据库用户使用资源限制
oracle soft nofile 131072
oracle hard nofile 131072
oracle soft nproc 131072
oracle hard nproc 131072
oracle soft core unlimited
oracle hard core unlimited
oracle soft memlock 3500000
oracle hard memlock 3500000
#grid数据库用户使用资源限制
grid soft nofile 131072
grid hard nofile 131072
grid soft nproc 131072
grid hard nproc 131072
grid soft core unlimited
grid hard core unlimited
grid soft memlock 3500000
grid hard memlock 3500000
设置ntp服务器,确保两个节点的时间一致
登录节点rac1,备份系统原来的ntp.conf配置文件
编辑/etc/ntp.conf配置文件
再登录节点rac2,
编辑/etc/ntp.conf配置文件
配置存储
设置一个iscsi或是光纤存储磁盘,确保这个磁盘可以被rac1和rac2两个节点都发现。
在rac1上执行fdisk命令,对存储磁盘进行分区,注意只分区不进行格式化的操作。
至少划分三个分区,分区只需要在一台机器上操作即可
由于oracle rac 不支持在2.6.32上的内核直接使用ASM,因此,在这里,将磁盘设置为裸设备。
编辑/etc/sysconfig/rawdevices,加入如下内容.两个节点上都做相同的操作
在中标麒麟安全操作系统5U8版本上,没有raw设备的启动脚本,因此需要创建一个raw设备的启动脚本,
[root@host02 ~]# vim /etc/init.d/rawdevices
#!/bin/bash
#
# rawdevices This shell script assignes rawdevices to block devices
#
# chkconfig: 345 56 44
# description: This scripts assignes raw devices to block devices \
# (such as hard drive partitions). This is for the use \
# of applications such as Oracle. You can set up the \
# raw device to block device mapping by editing \
# the file /etc/sysconfig/rawdevices.
# config: /etc/sysconfig/rawdevices
[ -f /bin/raw ] || exit 0
[ -f /etc/sysconfig/rawdevices ] || exit 0
# Exit if the file just has the default comments.
LC_ALL=C
/bin/egrep -q -v "^ *#" /etc/sysconfig/rawdevices 2>/dev/null || exit 0
. /etc/init.d/functions
function assign_raw()
{
LC_ALL=C egrep -v '^ *#' /etc/sysconfig/rawdevices |
while read RAW BLOCK; do
if [ -n "$RAW" -a -n "$BLOCK" ]; then
rawdirname=${RAW%/*}
if [ "$rawdirname" = "/dev" -a -d /dev/raw ]; then
echo $" Please correct your /etc/sysconfig/rawdevices:"
echo $" rawdevices are now located in the directory /dev/raw/ "
echo $" If the command 'raw' still refers to /dev/raw as a file."
echo $" you'll have to upgrade your util-linux package"
exit 0
fi
if [ "$rawdirname" = "/dev/raw" -a -f /dev/raw ]; then
echo $" Please correct your /etc/sysconfig/rawdevices:"
echo $" rawdevices are now located in the directory /dev/raw/ "
echo $" If the command 'raw' still refers to /dev/raw as a file."
echo $" you'll have to upgrade your util-linux package"
exit 0
fi
echo " $RAW --> $BLOCK";
raw $RAW $BLOCK
fi
done
}
# See how we were called.
case "$1" in
start)
# Assign devices
echo $"Assigning devices: "
assign_raw
#添加以下两行(默认不存在),即默认情况下生成的裸设备为root所有,
#所以必须修改属主,否则oracle用户无法使用裸设备
sleep 5
#chown -R oracle:oinstall /dev/raw/
chown -R oracle /dev/raw/
echo $"done"
;;
stop)
# No action to be taken here
;;
status)
ID=`id -u`
if [ $ID -eq 0 ]; then
raw -qa
else
echo $"You need to be root to use this command ! "
fi
;;
restart|reload)
$0 start
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 1
esac
exit 0
把rawdevices服务加入系统启动项,确保每次开机都自动启动rawdevices服务
#chkconfig rawdevices on
修改raw设备的udev规则
把两个节点的rawdevices服务启动,查看两节点是否都已经识别了raw设备。
设置libcap.so.1的软链接:
cd /lib64 && ln -s libcap.so.2.16 libpcap.so.1
3. 安装oracle 11g grid
将oracle 11g grid压缩包解压到/tmp目录,解决完,需要在其安装文件中的all.jdk中加入中文字体,目录是为了解决安装过程乱码的问题
桌面上新建一个文件夹,fallback,将/usr/share/fonts/zh_CN/TrueType/下面的
zysong.ttf 复制到 fallback 目录里.进入 oracle 的安装源目录,
database/stage/Components/oracle.jdk/1.5.0.17.0/1/DataFiles/,右击 all.jar, 用归档管理器打开,进入 jdk/jre/lib/fonts/,桌面上的 fallback 文件夹拖到进去,最终目录为jdk/jre/lib/fonts/fallback/zysong.ttf
加好中文字体,all.jar包如下
安装cvuqdisk-1.0.7-1.rpm
在root用户下,执行xhost + ,重新开启一个终端,执行su - grid,运行grid的安装文件,
[grid@host01 grid]$ ./runInstaller
点击“下一步”
选择“典型安装”,点击“下一步”
填写SCAN的名称,添加两个节点的主机名与虚拟IP地址,配置SSH免密码登录,点击“下一步”,
安装程序正在验证两节点是否准备好,验证完毕,点击“下一步”,
集群注册表存储类型,选择“自动存储管理”,设置SYSASM用户口令,点击“下一步”
设置磁盘组名,添加磁盘,点击“下一步”,
选中要添加的磁盘,点击“下一步”
正在检查系统安装配置环境,请等待
开始安装
在第二个节点上执行第一条脚本,两个节点都执行第二条脚本
4. Oracle 11gR2 数据库的安装
把oracle 11gR2 两个安装文件解压到/tmp目录,在root用户下打开终端,执行xhost +命令,再su - oracle用户,进行oracle 11gR2 安装文档的解压目录,运行./runInstaller
点击“下一步”
点击“下一步”
选择“创建和配置数据库”,点击“下一步”
选择“服务器类”,点击“下一步”
选择“Real Application Clusters数据库安装”,点击“下一步”,接下来就不截图了,点击下一步继续安装。