Redhat AS4 for x86_64上安裝Oracle 9204 RAC概述

okzhixiang發表於2007-10-18

轉自:http://yangtingkun.itpub.net

Oracle的官方文件Oracle9i Real Application Clusters Setup and Configuration很早前就看過了,但是從來沒有親手安裝過RAC環境。這次安裝過程中,碰到了無數的問題,曾經幾次都想要放棄,不過還是堅持了下來,最後僥倖成功了。

感謝biti_rainy幫我指出了兩個重大的問題,沒有他的幫助,可能我已經放棄了。

[@more@]

由於時間等多種因素,這裡不會給出所有步驟的具體指令碼。對於大部分步驟,可能僅僅透過“口述”的方式進行。

如果以後有機會的話,希望能將指令碼補全,不過目前只能給出一個大致執行步驟:

首先是檢查作業系統和硬體是否滿足安裝ORACLE RAC的需求,安裝ORACLE 9204 RAC的需求和安裝ORACLE 9204的要求基本一致,這裡就不重複了,在這篇文章裡面有詳細的描述:http://yangtingkun.itpub.net/post/468/211768

下一步使用ROOT帳號對系統進行一些設定,對於安裝ORACLE本身也需要的設定,這裡就不重複了,在上面給出的連結中也可以找到:

在兩臺伺服器的/etc/hosts檔案中新增下列內容:

172.25.198.245 GPOLNX2

172.25.198.244 GPOLNX

10.1.1.1 inter-gpo1

10.1.1.2 inter-gpo2

其中GPOLNXGPOLNX2分別是兩臺伺服器的名稱的外網IP地址。而inter-gpo1inter-gpo2是兩個節點內部連線使用的IP和名稱。這個內網使用的名稱可以任取。

在兩個節點的/etc/sysctl.conf檔案中新增:

kernel.shmall = 2097152

kernel.shmmax = 8589934592

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 65536

net.ipv4.ip_local_port_range = 1024 65000

net.core.rmem_default = 262144

net.core.rmem_max= 262144

net.core.wmem_default = 262144

net.core.wmem_max= 262144

前面6行是安裝9i必須的引數,後面4行是安裝RAC所必須的引數。

下面建立oracle使用者和oinstalldba組,和建立Oracle9i的差別在於,最後在根目錄下,建立一個需要oracle使用者的目錄,並把ORACLE_BASEORACLE_HOME等都建立在這個目錄上。

# mkdir -p /u1/oracle/product/9.2

# chown -R oracle.dba /u1

# chmod -R ug=rwx,o=rx /u1

檢查兩個伺服器上安裝的包是否完成,除了9i所必須的包之外,還需要rsh-server包。另外,檢查/etc/xinetd.d目錄下的telnetftpshellloginrsh等服務處於enable的狀態:檢查檔案中disable = no的設定。

在每個節點的/etc/hosts.equiv檔案或oracle使用者目錄的.rhosts檔案中新增節點名稱:

GPOLNX2

GPOLNX

inter-gpo1

inter-gpo2

分別在兩個節點測試rcp命令,是否可以在不輸入密碼的情況下複製成功:

[oracle@GPOLNX ~]$ rcp ./test.txt GPOLNX2:/home/oracle/connect to address 172.25.198.245: Connection refused
Trying krb4 rcp...
connect to address 172.25.198.245: Connection refused
trying normal rcp (/usr/bin/rcp)

下面設定oracle使用者的環境變數,在兩個節點的初始化shell檔案上新增下列內容:

if [ $USER = "oracle" ]; then
ulimit -u 16384 -n 65536
fi

export ORACLE_BASE=/u1/oracle
export ORACLE_HOME=/u1/oracle/product/9.2
export ORACLE_SID=rac1
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
export PATH=$ORACLE_HOME/bin:$PATH
export DISPLAY=172.25.6.201:0

export LD_ASSUME_KERNEL=2.4.1

export DBCA_RAW_CONFIG=/home/oracle/mapfile
export SRVM_SHARED_CONFIG=/dev/rac/srvcfg

對於節點1可以設定ORACLE_SID=rac1,節點2設定ORACLE_SID=rac2。其他引數可以完全一致。其中DISPLAYDBCA_RAW_CONFIGSRVM_SHARED_CONFIG只需要在Oracle的安裝節點上設定,對於非安裝節點不是必須的。

下面需要建立裸裝置或配置CFS,這個測試採用的是裸裝置安裝。首先是配置共享儲存,建立physical volumn,然後建立logic volumn

利用pvcreatevgcreate命令建立所需的邏輯卷組datavg,然後利用lvcreate命令為每個資料檔案、日誌檔案、控制檔案和SPFILE檔案建立邏輯卷,對於預設情況,需要建立類似下列的邏輯卷:

lvcreate -n /dev/datavg/testrac_raw_system_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_undotbs1_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_undotbs2_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_temp_4g -L 4g datavg

lvcreate -n /dev/datavg/testrac_raw_xdb_1g -L 1g datavg

lvcreate -n /dev/datavg/testrac_raw_example_1g -L 1g datavg

lvcreate -n /dev/datavg/testrac_raw_cwmlite_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_drsys_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_odm_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_1_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_2_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_1_3_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_1_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_2_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_redo_2_3_500m -L 500m datavg

lvcreate -n /dev/datavg/testrac_raw_indx_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_tools_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_users_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control1_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control2_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_control3_100m -L 100m datavg

lvcreate -n /dev/datavg/testrac_raw_spfile_100m -L 100m datavg

lvcreate -n /dev/datavg/srvcfg -L 100m datavg

lvcreate -n /dev/datavg/quorum -L 100m datavg

上述操作只需要在一個節點上完成。

由於Oracle不能直接使用這種邏輯卷,必須將邏輯卷繫結到裸裝置上。

在兩個節點上對上面所有的邏輯卷執行裸裝置的繫結工作,類似語法如下:

/usr/bin/raw /dev/raw/raw2 /dev/datavg/quorum

/usr/bin/raw /dev/raw/raw3 /dev/datavg/testrac_raw_system_4g

/usr/bin/raw /dev/raw/raw4 /dev/datavg/testrac_raw_undotbs1_4g

.

.

.

並將裸裝置屬主修改為oracle

chown oracle.dba /dev/raw/raw2

chown oracle.dba /dev/raw/raw3

chown oracle.dba /dev/raw/raw4

.

.

.

由於raw2之類的名稱很難記憶,可以使用下列命令建立有意義的連結:

ln -s -f /dev/raw/raw2 /dev/rac/quorum

ln -s -f /dev/raw/raw3 /dev/rac/testrac_raw_system_4g

ln -s -f /dev/raw/raw4 /dev/rac/testrac_raw_undotbs1_4g

.

.

.

上面的/dev/raw目錄或/dev/rac目錄如果不存在可以透過mkdir自己建立。

為了保證裸裝置在重啟後仍然生效,將下列內容新增到每個節點的/etc/sysconfig/rawdevices檔案中:

/dev/raw/raw2 /dev/datavg/quorum

/dev/raw/raw3 /dev/datavg/testrac_raw_system_4g

/dev/raw/raw4 /dev/datavg/testrac_raw_undotbs1_4g

.

.

.

另外編輯/home/oracle/mapfile檔案,內容如下:

system=/dev/rac/testrac_raw_system_4g

undotbs1=/dev/rac/testrac_raw_undotbs1_4g

undotbs2=/dev/rac/testrac_raw_undotbs2_4g

temp=/dev/rac/testrac_raw_temp_4g

xdb=/dev/rac/testrac_raw_xdb_1g

example=/dev/rac/testrac_raw_example_1g

cwmlite=/dev/rac/testrac_raw_cwmlite_500m

drsys=/dev/rac/testrac_raw_drsys_500m

odm=/dev/rac/testrac_raw_odm_500m

redo1_1=/dev/rac/testrac_raw_redo_1_1_500m

redo1_2=/dev/rac/testrac_raw_redo_1_2_500m

redo1_3=/dev/rac/testrac_raw_redo_1_3_500m

redo2_1=/dev/rac/testrac_raw_redo_2_1_500m

redo2_2=/dev/rac/testrac_raw_redo_2_2_500m

redo2_3=/dev/rac/testrac_raw_redo_2_3_500m

indx=/dev/rac/testrac_raw_indx_100m

tools=/dev/rac/testrac_raw_tools_100m

users=/dev/rac/testrac_raw_users_100m

control1=/dev/rac/testrac_raw_control1_100m

control2=/dev/rac/testrac_raw_control2_100m

control3=/dev/rac/testrac_raw_control3_100m

spfile=/dev/rac/testrac_raw_spfile_100m

這裡面的配置是為了DBCA可以為對應的資料檔案設定相應的裸裝置。這個檔案可以只存在於安裝Oracle的節點上。

至此,準備工作基本完成,準備開始安裝。

前面說明了安裝的前期準備工作,下面開始正式安裝。首先需要安裝的是Oracle Cluster Manager軟體,PUBLIC NODE 12分別填入兩個伺服器的主機名GPOLNXGPOLNX2,在PRIVATE NODE 12分別填入inter-gpo1inter-gpo2,在QUORUM DISK的地方填入已經配置好的裸裝置:/dev/datavg/quorum

安裝完成以後,需要在每個節點配置hangtimer-check模組:REDHAT AS4 FOR X86_64中已經包含了這個模組,檢查hangtimer-check是否被載入,如果沒有需要將其載入:

# lsmod
Module Size Used by
hangcheck_timer 5337 0

.

.

.

如果在Module模組中沒有看到,需要使用下面的方法將其載入:

# modprobe hangcheck-timer

並修改/etc/rc.local檔案新增上述的命令,確保重啟後也可以載入該模組

修改每個節點的$ORACLE_HOME/oracm/admin/cmcfg.ora檔案,包含內容類似於:

ClusterName=Oracle Cluster Manager, version 9i

MissCount=210

PrivateNodeNames=inter-gpo1 inter-gpo2

PublicNodeNames=GPOLNX GPOLNX2

ServicePort=9998

CmDiskFile=/dev/rac/quorum

HostName=GPOLNX

KernelModuleName=hangcheck-timer

其中大部分內容在ORACM安裝的過程中已經配置好了,主要修改的地方包括新增KernelModuleName模組和修改MissCount的值。

然後進入$ORACLE_HOME/oracm/bin目錄,並切換為root許可權執行:

$ su root

# ./ocmstart.sh

注意,是su root而不是su – root

啟動oracm之後,可以透過ps –ef|grep oracm來檢查啟動是否成功。注意,多檢查幾次,很可能oracm啟動後幾秒中內發現錯誤並退出。如果發現oracm退出,可以檢查$ORACLE_HOME/oracm/log/cm.log檔案。裡面會有詳細的日誌。

啟動好ORACM後,就可以安裝ORACLE RAC軟體了,整個安裝過程除了比9I的安裝多了一個選擇CLUSTER NODE的介面,其他幾乎完全一致。

安裝顯示WELCOME介面,點選NEXT,就會出現節點選擇介面,如果這個節點選擇介面沒有出現的話,說明前面的配置出現了問題。這時可以使用lsnodes命令進行檢查。

RAC的安裝和9i的安裝一樣,也會出現LD_ASSUME_KERNEL設定過高導致檔案複製時沒有響應,以及isqlplusrdbms的編譯出錯問題。其解決方法在Redhat AS4上安裝64Oracle9204這篇文章中,這裡不在重複描述了,需要注意的是,對於最後的修改gccg++以及重新make失敗的物件等操作,必須在兩個節點上都執行。

安裝完成之後,需要在兩個節點上全都啟動gsd,命令如下:

% gsdctl start

透過圖形化介面的netca配置好監聽和服務名,並在兩個節點上分別檢查,listener是否已經啟動,如果沒有啟動,手工將其啟動。然後就開始利用dbca來建立資料庫。

如果前面初始化shell中的DBCA_RAW_CONFIGSRVM_SHARED_CONFIG 設定正確,且mapfile檔案的內容也正確,那麼dbca建庫不會有多大的問題,Oracle會自動為每個相應的檔案指定裸裝置。

總結一下在安裝過程中碰到的幾個問題:

第一個碰到的問題是oracm無法啟動,在cm.log中發現下列的錯誤:

>ERROR: OemInit2: Attempting to open the CMDiskFile for a multi-node RAC on a non-NFS, non-OCFS, or non-raw device cluster, tid = main:1120480 file = oem.c, line = 494 {Wed Jul 27 15:59:55 2005 }
>ERROR: OemInit2: If the CMDiskFile is supposed to be an NFS or OCFS file, please make sure that the relevant shared file system is mounted properly, tid = main:1120480 file = oem.c, line = 495 {Wed Jul 27 15:59:55 2005 }
>ERROR: OemInit2: If the CMDiskFile is supposed to be a raw device, please make sure that it has been created properly, tid = main:1120480 file = oem.c, line = 496 {Wed Jul 27 15:59:55 20 05 }

這是由於CMDiskFile引數設定的檔案格式有問題。開始的時候,只建立了邏輯卷,沒有繫結到裸裝置,因此Oracle在檢測檔案型別時報錯。

第二個碰到的問題是hangcheck-timer無法啟動的問題:

根據Oracle文件給出的方法:

# /sbin/insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180

得到下面的錯誤資訊:

insmod: can't read 'hangcheck-timer': No such file or directory

必須透過modprobe hangcheck-timer方式才能載入成功。

第三個問題是在第二個節點上啟動gsdctl start時碰到的。

出現的錯誤資訊為:

PRKC-1021 : Problem in the clusterware Failed to get list of active nodes from clusterware

metalink相關的資訊都看了一遍,沒有發現和當前現象比較一致的。但是其中有一個文件建議用lsnodes檢查節點的狀態。

在節點一上執行lsnodes結果如下:

$ lsnodes
GPOLNX
GPOLNX2

而節點二上執行lsnodes則報錯:

lsnodes.bin: cannot initialize cluster interface

又在metalink上查詢了半天的相關錯誤,但是發現都不對症,結果最後發現問題居然是oracm沒有啟動。

這個問題前面也提到了,當時啟動了oracm後,還透過ps –ef|grep oracm檢查了一下,沒想到,oracm的檢查狀態需要一些時間,在檢查的時候程式還存在,隨後就退出了。導致我在檢查gsdlsnodes上花費了大量的時間。

cm.log中發現錯誤的資訊是:

>TRACE: CheckDskInfo(): node(0) mode(3) ALIVE, tid = PollingThread:81926 file = oem.c, line = 1160 {Tue Sep 26 09:39:06 2006 }
>ERROR: DoSyncUpdate(): OEM check signaled shutdown, tid = PollingThread:81926 file = nmmember.c, line = 1559 {Tue Sep 26 09:39:06 2006 }

而現象就比較奇怪了。不管節點是NODE1還是NODE2,只要這個節點先啟動oracm程式,那麼另一個節點在啟動程式的時候就會報錯。

在網上搜尋了很久,也嘗試了裡面給出的一些解決方案,比如:關閉iptables服務等,但是並沒有什麼效果。

最後還是biti幫我指出了問題,在最開始配置的時候,我想取巧,沒有為兩個節點設定單獨的內網地址和名稱,在PUBLIC NODEPRIVATE NODE的地方填入的都是GPOLNXGPOLNX2

按照第一篇文章中給出的配置進行修改後,問題解決。

第四個問題是在DBCA時碰到的PRKR-1064 error in a RAC environment錯誤

Metalink上有一篇文章專門介紹這個錯誤的解決方法:Doc ID: Note:178435.1。安裝裡面的步驟一步步的檢查,結果發現/var/opt/oracle/srvConfig.loc檔案和$ORACLE_HOME/srvm/config/srvConfig.loc檔案中srvconfig_loc的設定有問題,應該設定為srvconfig_loc=/dev/rac/srvcfg

將檔案修改正確後,執行gsdctl stop命令,然後使用命令srvconfig -init –f重新初始化SRVM檔案。

使用gsdctl start命令啟動GSD,然後重新建庫,問題解決。

另外在建立資料庫之前,如果沒有保證節點二上的listener啟動的話,Oracle會報錯,說明node2上的監聽沒有啟動。並且,一些最後的修改可能無法在instance2上進行,比如修改sys使用者的密碼的操作。

最後總結一下這次安裝的幾點心得:

1.Oracleotn上的官方文件基本上沒有多大的作用,尤其是針對LINUX平臺的安裝。如果想要找參考資料,一定要在metalink上去找對應平臺的安裝手冊。

對於一個沒有裝過RAC的新手,只參考otn上的安裝文件,估計這輩子也安裝不上。

2.作業系統的知識很重要。

作業系統相關的知識一直是我的弱項,而安裝過程可以說是和作業系統打交道最多的過程,我在安裝過程中碰到的很多的棘手問題對於一個作業系統熟悉的人來說並不算是問題。這也是一些對作業系統很熟但對Oracle並不很瞭解的系統管理員可以輕鬆的完成Oracle RAC的安裝的原因。

3.無論幹什麼不要輕易放棄,碰到挫折就放棄是不會有提高的。

前面提到了,我有幾次都打算放棄,其實我說的放棄是有原因的。目前測試的裝置我只能使用兩天,兩天之後就要拿走挪做它用。而且我手裡還有比較重要的事情的工作必須在短期內完成。如果沒有在兩天之內完成RAC的安裝測試,那麼這個測試就意義不大了,而且這兩天的時間還是從其他工作中擠出來的。所以有幾次碰到了一些難以解決的問題時,我不止一次的想要放棄。不過,所幸最終堅持了下來,並且安裝測試也成功了。什麼事情不到最後關頭都不要輕易放棄。

4.資源很重要

無論是網路上的資源,還是你的同行朋友。有時候一個有經驗的人的一句話可以解決你困擾已久的問題。

當然,這裡的意思並不是說,碰到不會的問題就去問。其實,要不是時間緊迫,我也不會去輕易請教別人,起碼不會那麼快就去請教別人。有經驗的人告訴你的方法固然管用。但是如果你是透過無數次的碰壁,想盡一切辦法而最終解決了問題,那麼收穫可能不僅僅是知道了一個方法而已,而是加深了對這個問題的總的理解。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7185924/viewspace-977449/,如需轉載,請註明出處,否則將追究法律責任。

相關文章