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數據庫安裝”,點擊“下一步”,接下來就不截圖了,點擊下一步繼續安裝。