基於iSCSI與Openfiler構建自己的Oracle RAC(二)

jinqibingl發表於2012-10-04

基於iSCSI與Openfiler構建自己的Oracle RAC(二)  

 

基於iSCSI與Openfiler構建自己的Oracle RAC(二)

2010-06-30 17:45:00|  分類: 預設分類 |  標籤:無 |字號大中小 訂閱

基於iSCSI與Openfiler構建自己的Oracle RAC(二)(轉載)

在 Oracle Enterprise Linux 和 iSCSI 上構建您自己的 Oracle RAC 叢集(續)

本指南中的資訊未經 Oracle 驗證,且不受 Oracle 支援,您在使用時只能風險自負;本指南僅供教學使用。

12. 建立“oracle”使用者和目錄

在本節中,我們將建立 oracle UNIX 使用者帳戶、推薦的 O/S 組以及所有必需的目錄。待建立的 O/S 組如下:


描述Oracle 許可權Oracle 組名UNIX 組名


我們將使用 Oracle 叢集檔案系統第 2 版 (OCFS2) 儲存需要 Oracle 叢集件軟體共享的檔案。在使用 OCFS2 時,叢集中的兩個 Oracle RAC 節點上的 UNIX 使用者 oracle 的 UID 和 UNIX 組“oracle”的 GID 必須相同。如果 UID 或 GID 不同,則 OCFS2 檔案系統中的檔案將顯示為“unowned”,甚至可能被其他使用者所擁有。對於本文而言,oracle UID 使用 501,“oracle”GID 使用 501。

注意,UNIX 組 oinstall 的成員被視為 Oracle 軟體的“所有者”。dba 組的成員可以管理 Oracle 資料庫,例如,啟動和關閉資料庫。可選組 oper 的成員擁有一組有限的資料庫管理許可權,如管理和執行備份。該組的預設名稱為 oper。要使用該組,選擇“Custom”安裝型別來安裝 Oracle 資料庫軟體。在本文中,我們將建立 oracle 使用者帳戶以承擔全部責任!

建立 Oracle 的組和使用者

首先,建立 UNIX oinstall 和 dba 組以及 oracle 使用者帳戶:

# groupadd -g 501 oinstall # groupadd -g 502 dba # groupadd -g 503 oper # useradd -m -u 501 -g oinstall -G dba,oper -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle # id oracle uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper)

設定 oracle 帳戶的口令:

# passwd oracle Changing password for user oracle. New UNIX password: xxxxxxxxxxx Retype new UNIX password: xxxxxxxxxxx passwd: all authentication tokens updated successfully.

安裝 Oracle 軟體之前,執行以下過程,以驗證使用者 nobody 存在於系統中:

要確定該使用者是否存在,輸入以下命令: # id nobody uid=99(nobody) gid=99(nobody) groups=99(nobody)

如果該命令顯示了 nobody 使用者的資訊,則無需建立該使用者。

如果使用者 nobody 不存在,則輸入以下命令進行建立: # /usr/sbin/useradd nobody在叢集中的所有其他 Oracle RAC 節點上重複此過程。

下一步是建立一個新目錄,用於儲存 Oracle 資料庫軟體。在配置 oracle 使用者的環境時(本節後面的內容),我們將把該目錄的位置指定給 $ORACLE_BASE 環境變數。

以下內容假設在根檔案系統中建立目錄。請注意,這樣做是為了簡便起見,不建議將其作為通用做法。通常,這些目錄將在單獨的檔案系統中建立。

建立目錄之後,您必須為其指定正確的擁有者、組和許可權。在兩個 Oracle RAC 節點上執行以下命令:

# mkdir -p /u01/app/oracle # chown -R oracle:oinstall /u01/app/oracle # chmod -R 775 /u01/app/oracle

在過程結束時,您將看到以下內容:

/u01/app/oracle 由具有 775 許可權的 oracle:oinstall 擁有。該所有權和許可權允許 OUI 在 /u01/app/oracle/oraInventory 路徑下建立 oraInventory 目錄。

接下來,建立一個新目錄,用於儲存 Oracle 叢集件軟體。在配置 oracle 使用者的環境時(本節後面的內容),我們將把該目錄的位置指定給 $ORA_CRS_HOME 環境變數。

如上一節所述,以下內容假設目錄將在根檔案系統中建立。這樣做是為了簡便起見,不建議將其作為通用做法。通常,這些目錄將在單獨的檔案系統中建立。

建立目錄之後,您必須為其指定正確的擁有者、組和許可權。在兩個 Oracle RAC 節點上執行以下命令:

# mkdir -p /u01/app/crs # chown -R oracle:oinstall /u01/app/crs # chmod -R 775 /u01/app/crs

在過程結束時,您將看到以下內容:

現在,讓我們為 Oracle 叢集檔案系統第 2 版 (OCFS2) 建立掛載點,它將用於儲存兩個 Oracle 叢集件共享檔案。

在兩個 Oracle RAC 節點上執行以下命令:

# mkdir -p /u02 # chown -R oracle:oinstall /u02 # chmod -R 775 /u02

要確保為兩個 Oracle RAC 節點上的“oracle”UNIX 使用者 id 正確設定環境,請使用以下 .bash_profile:

當您為每個 Oracle RAC 節點設定 Oracle 環境變數時,請確保為每個 RAC 節點分配唯一的 Oracle SID!對於此示例,我使用:

以 oracle 使用者帳戶登入到每個節點:

# su - oracle

# .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi alias ls="ls -FA" export JAVA_HOME=/usr/local/java # User specific environment and startup programs export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORA_CRS_HOME=/u01/app/crs export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin export CV_JDKHOME=/usr/local/java # Each RAC node must have a unique ORACLE_SID. (i.e. racdb1, racdb2,...) export ORACLE_SID=racdb1 export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin export ORACLE_TERM=xterm export TNS_ADMIN=$ORACLE_HOME/network/admin export ORA_NLS10=$ORACLE_HOME/nls/data export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS" export LD_LIBRARY_PATH=$ORACLE_HOME/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib export CLASSPATH=$ORACLE_HOME/JRE export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib export THREADS_FLAG=native export TEMP=/tmp export TMPDIR=/tmp

13. 為 Oracle 配置 Linux 伺服器

在叢集中的兩個 Oracle RAC 節點上執行以下配置過程!

每次引導計算機時,都需要在叢集中的兩個 Oracle RAC 節點上定義本節討論的核心引數和 shell 限制。本節提供了設定 Oracle 必需的那些核心引數的詳細資訊。第 16 節(“用於每個 RAC 節點的所有啟動命令”)中包含有關如何將這些命令置於啟動指令碼 (/etc/sysctl.conf) 中的說明。

本節將集中討論針對 Oracle RAC 10g 的安裝配置兩臺 Oracle RAC Linux 伺服器的步驟。這包括驗證足夠的交換空間、設定共享記憶體和訊號、設定檔案控制程式碼的最大數量、設定 IP 本地埠範圍、設定對 oracle 使用者的 shell 限制、啟用系統的所有核心引數,以及如何驗證兩個叢集節點的日期和時間是否正確。

有多種方法來配置這些引數。就本文而言,我將透過把所有命令置於 /etc/sysctl.conf 檔案中使所有更改永久有效(透過重新引導)。

要檢查您已經具有的記憶體容量,鍵入: # cat /proc/meminfo | grep MemTotal MemTotal: 2074084 kB要檢查您已經分配的交換容量,鍵入: # cat /proc/meminfo | grep SwapTotal SwapTotal: 4128760 kB如果您的記憶體少於 2,048MB(介於 RAM 與 SWAP 之間),您可以透過建立臨時交換檔案新增臨時交換空間。這樣,您就不必使用原始裝置甚至更徹底地重建系統了。

以 root 身份建立一個用作額外交換空間的檔案,假設大小為 500MB:

# dd if=/dev/zero f=tempswap bs=1k count=500000

現在我們應該更改檔案的許可權:

# chmod 600 tempswap

最後我們將該“分割槽”格式化為交換分割槽,並將其新增到交換空間:

RHEL/OEL 5 上的 Oracle 資料庫 10g 第 2 版需要以下所示的核心引數設定。給出的值都是最小值,因此如果您的系統使用一個更大的值,則不要進行更改:

kernel.shmmax = 4294967295 kernel.shmall = 268435456 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=1048576 net.core.rmem_max=1048576 net.core.wmem_default=262144 net.core.wmem_max=262144

RHEL/OEL 5 已經配置了為以下核心引數定義的預設值:

kernel.shmall kernel.shmmax net.core.rmem_default net.core.rmem_max net.core.wmem_default net.core.wmem_max

如果這些預設值等於或大於必需值,則使用這些預設值。

本文假定採用 Oracle Enterprise Linux 5 的全新安裝,則已經設定了許多必需的核心引數(見上面)。如果是這樣,您以 root 使用者身份登入後,只需將以下內容命令複製/貼上到兩個 Oracle RAC 節點中:

# cat >> /etc/sysctl.conf <

上述命令將所需的核心引數插入到 /etc/sysctl.conf 啟動檔案中,這樣每次系統重啟時這些引數保持不變。Linux 允許在系統當前已啟動並執行時修改這些核心引數,所以無需在更改核心引數後重啟系統。要在當前執行的系統中啟用新的核心引數值,在叢集中的兩個 Oracle RAC 節點上,以 root 使用者身份執行以下命令:

# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 kernel.shmmax = 4294967295 kernel.shmall = 268435456 net.core.rmem_default = 1048576 net.core.rmem_max = 1048576 net.core.wmem_default = 262144 net.core.wmem_max = 262144 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000

透過在叢集中的兩個 Oracle RAC 節點上執行以下命令來驗證新的核心引數值:

# /sbin/sysctl -a | grep shm vm.hugetlb_shm_group = 0 kernel.shmmni = 4096 kernel.shmall = 268435456 kernel.shmmax = 4294967295 # /sbin/sysctl -a | grep sem kernel.sem = 250 32000 100 128 # /sbin/sysctl -a | grep file-max fs.file-max = 65536 # /sbin/sysctl -a | grep ip_local_port_range net.ipv4.ip_local_port_range = 1024 65000 # /sbin/sysctl -a | grep 'core\.[rw]mem' net.core.rmem_default = 1048576 net.core.wmem_default = 262144 net.core.rmem_max = 1048576 net.core.wmem_max = 262144

為 Oracle 使用者設定 Shell 限制

要改善 Linux 系統上的軟體效能,Oracle 建議您提高 oracle 使用者的 shell 限制:

要進行這些更改,以 root 使用者身份執行以下命令:

cat >> /etc/security/limits.conf <> /etc/pam.d/login <

為“oracle”UNIX 帳戶更新預設的 shell 啟動檔案。

對於 Bourne、Bash 或 Korn shell,透過執行以下命令將以下行新增到 /etc/profile 檔案: cat >> /etc/profile <> /etc/csh.login <

在所有的叢集節點上設定正確的日期和時間

在安裝 Oracle 叢集件、資料庫以及隨附 CD 期間,Oracle Universal Installer (OUI) 首先將軟體安裝到執行該安裝程式的本地節點(即 linux1)。然後,將該軟體以遠端方式複製到叢集中的其餘節點(即 linux2)。在遠端複製過程中,OUI 將在每個遠端節點上執行 UNIX“tar”命令,以提取進行了存檔和複製的檔案。如果執行安裝的節點上的日期和時間大於其要進行復制的節點上的日期和時間,那麼 OUI 將在“tar”中引發一個錯誤,以指示其在試圖提取帶有時間戳的檔案時失敗。

Error while copying directory /u01/app/crs with exclude file list 'null' to nodes 'linux2'. [PRKC-1002 : All the submitted commands did not execute successfully] --------------------------------------------- linux2: /bin/tar: ./bin/lsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future /bin/tar: ./bin/olsnodes: time stamp 2009-07-28 09:21:34 is 735 s in the future ...(more errors on this node)

請注意,儘管這看起來像 OUI 中一個嚴重的錯誤,但您完全可以將其看作是一個警告而忽略。“tar”命令 DOES 確實提取了檔案;然而,當您在遠端節點上執行檔案列表時(使用 ls -l),它們將缺少時間欄位,直到伺服器上的時間大於該檔案的時間戳。

啟動以上所述任一安裝之前,確保儘可能將叢集的每個成員節點設定為相同的時間和日期。由於兩個 Oracle RAC 節點使用相同的參考 Network Time Protocol 伺服器,因此 Oracle 強烈建議使用多數作業系統的 Network Time Protocol 功能來執行該操作。

然而,訪問 Network Time Protocol 伺服器並非始終可用。在這種情況下,為叢集中的節點手動設定日期和時間,確保要從其中執行軟體安裝的節點 (linux1) 的時間和日期小於叢集中所有其他節點 (linux2)。我一般使二者之間相差 20 秒,如以下示例所示:

設定 linux1 的日期和時間:

# date -s "7/28/2009 23:00:00"

設定 linux2 的日期和時間:

# date -s "7/28/2009 23:00:20"

本文中所述的雙節點 RAC 配置沒有使用 Network Time Protocol 伺服器。

14. 配置 hangcheck-timer 核心模組

Oracle9i 第 1 版 (9.0.1) 和 Oracle9i 第 2 版 (9.2.0.1) 使用一個稱為 watchdogd 的使用者空間監視後臺程式 監視叢集的執行狀況,並在出現故障時重新啟動 RAC 節點。從 Oracle9i 第 2 版 (9.2.0.2) 開始(在 Oracle 10g 第 2 版中仍然存在),一個稱為 hangcheck-timer 的 Linux 核心模組取代了監視後臺程式,該模組更好地解決了可用性和可靠性問題。它將 hang-check 計時器載入到 Linux 核心中並檢查系統是否掛起。它將設定一個計時器,並在特定的時間量之後檢查該計時器。有一個用於檢查掛起情況的可配置閾值,如果超過該閾值,計算機將重新引導。儘管 Oracle 叢集件(叢集管理器)操作不需要 hangcheck-timer 模組,但 Oracle 強烈建議使用它。

hangcheck-timer.ko 模組

hangcheck-timer 模組使用了一個基於核心的計時器,該計時器週期性地檢查系統任務排程程式來捕獲延遲,從而確定系統的執行狀況。如果系統掛起或暫停,則計時器重置該節點。hangcheck-timer 模組使用時間戳計數器 (TSC) CPU 暫存器,該暫存器每接收到一個時鐘訊號就將計數加一。由於此暫存器由硬體自動更新,因此 TCS 提供了更精確的時間度量。

關於 hangcheck-timer 專案的更多資訊可在此處找到。

安裝 hangcheck-timer.ko 模組

hangcheck-timer 通常僅與 Oracle 一同提供,但是,現在從核心版本 2.4.9-e.12 起,該模組與 Red Hat Linux AS 包含在一起。hangcheck-timer 應當已包含在內。使用以下命令來確認您已經包含了該模組:

# find /lib/modules -name "hangcheck-timer.ko" /lib/modules/2.6.18-128.el5/kernel/drivers/char/hangcheck-timer.ko在以上輸出中,我們關注的是 /lib/modules/2.6.18-128.el5/kernel/drivers/char 目錄中的 hangcheck 計時器物件 (hangcheck-timer.ko),因為這是我們執行的核心。

hangcheck-timer 模組有兩個關鍵的引數:

hangcheck-tick:此引數定義了系統執行狀況檢查的間隔時間。預設值為 60 秒;Oracle 建議將它設定為 30 秒。 hangcheck-margin:此引數定義了 hangcheck-timer 在重置 RAC 節點前所容許的最大掛起延遲。它定義了以秒為單位的誤差幅度。預設值為 180 秒;Oracle 建議將它設定為 180 秒。 這兩個 hangcheck-timer 模組參數列示在該模組重置系統前 RAC 節點必須掛起的時長。當以下條件為真時將會重置節點: system hang time > (hangcheck_tick + hangcheck_margin)

配置 Hangcheck 核心模組引數

每次載入 hangcheck-timer 核心模組(手動載入或由 Oracle 載入)時,它都需要知道對我們剛剛討論的兩個引數 (hangcheck-tick 和 hangcheck-margin)所使用的值。這些值需要在每次重新引導 Linux 伺服器後可用。為此,在 /etc/modprobe.conf 檔案中建立一個具有正確值的條目,如下所示:

# su - # echo "options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180" >> /etc/modprobe.conf每次載入 hangcheck-timer 核心模組時,它將使用由我在 /etc/modprobe.conf 檔案中建立的條目定義的值。

手動載入 Hangcheck 核心模組以進行測試

Oracle 負責在需要時載入 hangcheck-timer 核心模組。因此,不必在任何啟動檔案(如 /etc/rc.local)中執行 hangcheck-timer 核心模組的 modprobe 或 insmod。

我繼續在 /etc/rc.local 檔案中包含 hangcheck-timer 核心模組的 modprobe 完全只是出於個人習慣。有朝一日我將戒掉這個習慣,但請注意,啟動過程中包含 hangcheck-timer 核心模組的 modprobe 並無害處。

為了使自己保持清醒並能夠在夜晚安睡,我始終按如下所示在每次啟動時配置 hangcheck-timer 核心的載入:

# echo "/sbin/modprobe hangcheck-timer" >> /etc/rc.local

您不必在每次重新引導後使用 modprobe 或 insmod 手動載入 hangcheck-timer 核心模組。Oracle 會在需要時自動載入 hangcheck-timer 模組。

現在,為了測試 hangcheck-timer 核心模組以驗證它是否選取我們在 /etc/modprobe.conf 檔案中定義的正確引數,使用 modprobe 命令。儘管可以透過向其傳遞相應的引數(如 insmod hangcheck-timer hangcheck_tick=30 hangcheck_margin=180)載入 hangcheck-timer 核心模組,但我們需要驗證它是否選取了我們在 /etc/modprobe.conf 檔案中設定的選項。

要手動載入 hangcheck-timer 核心模組並驗證它是否使用在 /etc/modprobe.conf 檔案中定義的正確值,執行以下命令:

# su - # modprobe hangcheck-timer # grep Hangcheck /var/log/messages | tail -2 Jul 30 17:50:43 linux1 kernel: Hangcheck: starting hangcheck timer 0.9.0 (tick is 30 seconds, margin is 180 seconds). Jul 30 17:50:43 linux1 kernel: Hangcheck: Using get_cycles().15. 使用 SSH 為遠端訪問配置 RAC 節點

在安裝 Oracle RAC 10g 之前,您必須為 UNIX 使用者帳戶配置安全 shell (SSH),該帳戶將用於安裝 Oracle 叢集件 10g 和 Oracle 資料庫 10g 軟體。本節中所述的安裝和配置任務需要在兩個 Oracle RAC 節點上執行。如本文前面所配置的那樣,Oracle 叢集件 10g 和 Oracle 資料庫 10g 軟體的所有者將是“oracle”。

此處的目的是為 oracle UNIX 使用者帳戶設定使用者等效性。利用使用者等效性 (User equivalence),oracle UNIX 使用者帳戶無需口令就可訪問叢集中的所有其他節點(執行命令和複製檔案)。Oracle 在 10g 第 1 版中增加了將 SSH 工具套件用於設定使用者等效項的支援。在 Oracle 資料庫 10g 之前,使用者等效性必須使用遠端 shell (RSH) 進行配置。

本文中所述的 SSH 配置採用 SSH1。如果 SSH 不可用,則 OUI 將轉而嘗試使用 rsh 和 rcp。不過,在大多數 Linux 系統上,這些服務在預設情況下處於禁用狀態。本文不討論 RSH 的使用。

您需要 SSH 協議所需的 RSA 或 DSA 金鑰。RSA 用於 SSH 1.5 協議,而 DSA 則預設用於 SSH 2.0 協議。利用 OpenSSH,您既可以使用 RSA,也可以使用 DSA。針對本文,我們將使用 SSH1 來配置 SSH。

如果您安裝了 SSH2,但不能使用 SSH1,那麼請參考 SSH 分發文件來配置 SSH1 相容性或使用 DSA 配置 SSH2。此類配置超出了本文的範圍,因而將不會就其進行論述。

那麼,我們為什麼必須設定使用者等效性?安裝 Oracle 叢集件和 Oracle 資料庫軟體只在 RAC 叢集中的一個節點上進行。在特定節點上執行 Oracle Universal Installer (OUI) 時,它將使用 ssh 和 scp 命令在叢集內的所有其他節點上執行遠端命令,並向這些節點複製檔案(Oracle 軟體)。執行 OUI (runInstaller) 的節點上的 oracle UNIX 使用者帳戶必須受到您的 RAC 叢集中其他所有節點的信任。這意味著,相對於叢集中的所有其他 Linux 伺服器,您必須能夠在將要執行 OUI 的 Linux 伺服器上執行安全 shell 命令(ssh 或 scp),而不會收到輸入口令的提示。

注意,普通 RAC 操作無需使用安全 shell。然而,對於 RAC 和補丁集安裝以及建立叢集資料庫時,必須啟用該配置。

下面章節將介紹配置 SSH1、RSA 金鑰和使用者等效性所需的方法。

要確定是否 SSH 已安裝並執行,可輸入以下命令:

# pgrep sshd 2400

如果 SSH 正在執行,那麼該命令的響應將是一個程式 ID 編號(一個或多個)列表。在叢集中的兩個 Oracle RAC 節點上執行該命令,以驗證 SSH 後臺程式已安裝並正在執行!

要了解更多有關 SSH 的資訊,請參閱以下 man 頁:

在兩個 Oracle RAC 節點上建立 RSA 金鑰

配置 SSH 的第一步是在叢集中的兩個 Oracle RAC 節點上建立 RSA 公鑰/私鑰對。執行該操作的命令將為 RSA 建立一個公共金鑰和一個私有金鑰(每個節點總共 2 個金鑰)。然後,需要將 RSA 公共金鑰的內容複製到一個授權金鑰檔案 中,之後將該檔案分發到叢集中的兩個 Oracle RAC 節點。

使用以下步驟建立 RSA 金鑰對。請注意,叢集中的兩個 Oracle RAC 節點上均需要完成這些步驟:

以 oracle UNIX 使用者帳戶進行登入。 # su - oracle如果必要,在 oracle 使用者的主目錄下建立 .ssh 目錄,並設定正確的許可權,以確保僅 oracle 使用者具有讀寫許可權: $ mkdir -p ~/.ssh $ chmod 700 ~/.ssh輸入以下命令,為 SSH 協議生成 RSA 金鑰對(公共金鑰和私有金鑰): $ /usr/bin/ssh-keygen -t rsa

在提示符下:

該命令會將公共金鑰寫入 ~/.ssh/id_rsa.pub 檔案,將私有金鑰寫入 ~/.ssh/id_rsa 檔案。注意,始終不要將金鑰分發給任何人!

為叢集中的兩個 Oracle RAC 節點重複以上步驟。

現在,每個 Oracle RAC 節點都包含用於 RSA 的公共和私有金鑰,您需要在其中一個節點上建立一個授權金鑰檔案。授權金鑰檔案只是一個包含每個人(每個節點)的 RSA 公共金鑰的檔案。在授權金鑰檔案包含了所有公共金鑰後,將其分發至叢集中的所有其他節點。

在叢集中的其中一個節點上完成以下步驟,然後分發授權金鑰檔案。考慮到本文的目的,我將使用 linux1:

首先,確定該節點上是否已經存在授權金鑰檔案 (~/.ssh/authorized_keys)。在多數情況下,該檔案是不存在的,因為本文假設您使用的是新安裝。如果該檔案不存在,那麼現在開始建立: $ touch ~/.ssh/authorized_keys $ cd ~/.ssh $ ls -l *.pub -rw-r--r-- 1 oracle oinstall 395 Jul 30 18:51 id_rsa.pub

以上清單應當顯示上一節中建立的 id_rsa.pub 公共金鑰。

在該步驟中,使用 SCP(安全複製)或 SFTP(安全 FTP)將 ~/.ssh/id_rsa.pub 公共金鑰的內容從叢集中的兩個 Oracle RAC 節點複製到剛才建立的授權金鑰檔案中 (~/.ssh/authorized_keys)。同樣,我將透過 linux1 進行操作。系統將提示您為每個訪問的 Oracle RAC 節點輸入 oracle UNIX 使用者帳戶口令。

以下示例將從 linux1 執行,假設這是個雙節點叢集,即節點 linux1 和 linux2:

$ ssh linux1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'linux1 (192.168.1.100)' can't be established. RSA key fingerprint is 46:0f:1b:ac:a6:9d:86:4d:38:45:85:76:ad:3b:e7:c9. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'linux1,192.168.1.100' (RSA) to the list of known hosts. oracle@linux1's password: xxxxx $ ssh linux2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys The authenticity of host 'linux2 (192.168.1.101)' can't be established. RSA key fingerprint is eb:39:98:a7:d9:61:02:a2:80:3b:75:71:70:42:d0:07. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'linux2,192.168.1.101' (RSA) to the list of known hosts. oracle@linux2's password: xxxxx

第一次使用 SSH 從特定系統連線到節點時,您可能會看見一條類似如下所示的訊息:

The authenticity of host 'linux1 (192.168.1.100)' can't be established. RSA key fingerprint is 46:0f:1b:ac:a6:9d:86:4d:38:45:85:76:ad:3b:e7:c9. Are you sure you want to continue connecting (yes/no)? yes

在提示符下輸入 yes 進行確認。如果從該系統連線到相同的節點,您將不會再次看到該訊息。

此時,在 linux1 上,我們在授權金鑰檔案 (~/.ssh/authorized_keys) 中獲得了來自叢集中各個節點的 RSA 公共金鑰內容。我們現在將其複製到叢集中的其餘節點。在這個雙節點叢集示例中,唯一剩下的節點就是 linux2。使用 scp 命令將授權金鑰檔案複製到叢集中的其餘所有節點: $ scp ~/.ssh/authorized_keys linux2:.ssh/authorized_keys oracle@linux2's password: xxxxx authorized_keys 100% 790 0.8KB/s 00:00透過登入到節點並執行以下命令,為叢集中的兩個 Oracle RAC 節點更改授權金鑰檔案的許可權: $ chmod 600 ~/.ssh/authorized_keys此時,如果在另一個節點上使用 ssh 登入或執行命令,則會提示您輸入在建立 RSA 金鑰時指定的口令短語。例如,在 linux1 中測試以下內容: $ ssh linux1 hostname Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx linux1 $ ssh linux2 hostname Enter passphrase for key '/home/oracle/.ssh/id_rsa': xxxxx linux2如果除主機名外,您還看到任何其他訊息或文字,則 Oracle 安裝可能失敗了。進行必要的更改,以確保您在輸入這些命令時只有主機名顯示。您應當確保修改生成任何輸出或詢問任何問題的登入指令碼的任何部分,以便它們僅當 shell 是互動式 shell 時才會生效。 16. 適用於這兩個 Oracle RAC 節點的所有啟動命令

至此,我們已經詳細介紹了配置 Oracle 10g RAC 時需要在兩個節點上配置的引數和資源。在本節中,我們將簡要回顧這些引數、命令和條目(在本文前幾節中提到過),當兩個 Oracle RAC 節點引導時需要執行它們。

對於以下的每個啟動檔案,都應將灰色的條目包含在每個啟動檔案中。

/etc/modprobe.conf

................................................................. alias eth0 r8169 alias eth1 e1000 alias scsi_hostadapter ata_piix alias snd-card-0 snd-intel8x0 options snd-card-0 index=0 options snd-intel8x0 index=0 remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0 options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180 .................................................................

/etc/sysctl.conf

................................................................. # Kernel sysctl configuration file for Oracle Enterprise Linux # # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and # sysctl.conf(5) for more details. # Controls IP packet forwarding net.ipv4.ip_forward = 0 # Controls source route verification net.ipv4.conf.default.rp_filter = 1 # Do not accept source routing net.ipv4.conf.default.accept_source_route = 0 # Controls the System Request debugging functionality of the kernel kernel.sysrq = 0 # Controls whether core dumps will append the PID to the core filename # Useful for debugging multi-threaded applications kernel.core_uses_pid = 1 # Controls the use of TCP syncookies net.ipv4.tcp_syncookies = 1 # Controls the maximum size of a message, in bytes kernel.msgmnb = 65536 # Controls the default maxmimum size of a mesage queue kernel.msgmax = 65536 # +---------------------------------------------------------+ # | ADJUSTING NETWORK SETTINGS | # +---------------------------------------------------------+ # | With Oracle 9.2.0.1 and onwards, Oracle now makes use | # | of UDP as the default protocol on Linux for | # | inter-process communication (IPC), such as Cache Fusion | # | and Cluster Manager buffer transfers between instances | # | within the RAC cluster. Oracle strongly suggests to | # | adjust the default and maximum receive buffer size | # | (SO_RCVBUF socket option) to 1024 MB, and the default | # | and maximum send buffer size (SO_SNDBUF socket option) | # | to 256 KB. The receive buffers are used by TCP and UDP | # | to hold received data until it is read by the | # | application. The receive buffer cannot overflow because | # | the peer is not allowed to send data beyond the buffer | # | size window. This means that datagrams will be | # | discarded if they don't fit in the socket receive | # | buffer. This could cause the sender to overwhelm the | # | receiver. | # +---------------------------------------------------------+ # +---------------------------------------------------------+ # | Default setting in bytes of the socket "receive" buffer | # | which may be set by using the SO_RCVBUF socket option. | # +---------------------------------------------------------+ net.core.rmem_default=1048576 # +---------------------------------------------------------+ # | Maximum setting in bytes of the socket "receive" buffer | # | which may be set by using the SO_RCVBUF socket option. | # +---------------------------------------------------------+ net.core.rmem_max=1048576 # +---------------------------------------------------------+ # | Default setting in bytes of the socket "send" buffer | # | which may be set by using the SO_SNDBUF socket option. | # +---------------------------------------------------------+ net.core.wmem_default=262144 # +---------------------------------------------------------+ # | Maximum setting in bytes of the socket "send" buffer | # | which may be set by using the SO_SNDBUF socket option. | # +---------------------------------------------------------+ net.core.wmem_max=262144 # +---------------------------------------------------------+ # | ADJUSTING ADDITIONAL KERNEL PARAMETERS FOR ORACLE | # +---------------------------------------------------------+ # | Configure the kernel parameters for all Oracle Linux | # | servers by setting shared memory and semaphores, | # | setting the maximum amount of file handles, and setting | # | the IP local port range. | # +---------------------------------------------------------+ # +---------------------------------------------------------+ # | SHARED MEMORY | # +---------------------------------------------------------+ # Controls the maximum shared segment size, in bytes kernel.shmmax = 4294967295 # Controls the maximum number of shared memory segments, in pages kernel.shmall = 268435456 # Controls the maximum number of shared memory segments system wide kernel.shmmni = 4096 # +---------------------------------------------------------+ # | SEMAPHORES | # | ---------- | # | | # | SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value | # | | # +---------------------------------------------------------+ kernel.sem=250 32000 100 128 # +---------------------------------------------------------+ # | FILE HANDLES | # ----------------------------------------------------------+ fs.file-max=65536 # +---------------------------------------------------------+ # | LOCAL IP RANGE | # ----------------------------------------------------------+ net.ipv4.ip_local_port_range=1024 65000 .................................................................

驗證 /etc/sysctl.conf 檔案中配置了各個所需的核心引數(前面已述)。然後,在叢集的兩個 Oracle RAC 節點上執行以下命令,以確保每個引數真正生效:

# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 net.ipv4.tcp_syncookies = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 net.core.rmem_default = 1048576 net.core.rmem_max = 1048576 net.core.wmem_default = 262144 net.core.wmem_max = 262144 kernel.shmmax = 4294967295 kernel.shmall = 268435456 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 fs.file-max = 65536 net.ipv4.ip_local_port_range = 1024 65000

/etc/hosts

................................................................. # Do not remove the following line, or various programs # that require network functionality will fail. 127.0.0.1 localhost.localdomain localhost # Public Network - (eth0) 192.168.1.100 linux1 192.168.1.101 linux2 # Private Interconnect - (eth1) 192.168.2.100 linux1-priv 192.168.2.101 linux2-priv # Public Virtual IP (VIP) addresses - (eth0:1) 192.168.1.200 linux1-vip 192.168.1.201 linux2-vip # Private Storage Network for Openfiler - (eth1) 192.168.1.195 openfiler1 192.168.2.195 openfiler1-priv # Miscellaneous Nodes 192.168.1.1 router 192.168.1.102 alex 192.168.1.103 nascar 192.168.1.105 packmule 192.168.1.106 melody 192.168.1.120 cartman 192.168.1.121 domo 192.168.1.122 switch1 192.168.1.190 george 192.168.1.245 accesspoint .................................................................

................................................................. # /etc/udev/rules.d/55-openiscsi.rules KERNEL=="sd*", BUS=="scsi", PROGRAM="/etc/udev/scripts/iscsidev.sh %b",SYMLINK+="iscsi/%c/part%n" .................................................................

................................................................. #!/bin/sh # FILE: /etc/udev/scripts/iscsidev.sh BUS=${1} HOST=${BUS%%:*} [ -e /sys/class/iscsi_host ] || exit 1 file="/sys/class/iscsi_host/host${HOST}/device/session*/iscsi_session*/targetname" target_name=$(cat ${file}) # This is not an open-scsi drive if [ -z "${target_name}" ]; then exit 1 fi echo "${target_name##*.}" .................................................................

/etc/rc.local

(載入 hangcheck-timer 核心模組。)

................................................................. #!/bin/sh # # This script. will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style. init stuff. touch /var/lock/subsys/local # +---------------------------------------------------------+ # | HANGCHECK TIMER | # | (I do not believe this is required, but doesn't hurt) | # +---------------------------------------------------------+ /sbin/modprobe hangcheck-timer .................................................................17. 安裝和配置 Oracle 叢集檔案系統 (OCFS2)

現在,開始安裝和配置 Oracle 叢集檔案系統第 2 版 (OCFS2) 軟體。由 Oracle Corporation 開發的 OCFS2 是一個叢集檔案系統,它允許叢集中的所有節點透過標準檔案系統介面併發訪問一個裝置。這樣便可以對需要在叢集中執行的應用程式進行輕鬆地管理。

OCFS(第 1 版)於 2002 年 12 月釋出,使 Oracle 真正應用叢集 (RAC) 使用者可以執行叢集化資料庫而不必處理原始裝置。檔案系統是為儲存資料庫相關檔案(如資料檔案、控制檔案、重做日誌、存檔日誌等)設計的。OCFS2 是下一代 Oracle 叢集檔案系統。它是作為一個通用叢集檔案系統而設計的。使用它,使用者不但可以在共享磁碟上儲存與資料庫相關的檔案,而且還可以儲存 Oracle 二進位制檔案和配置檔案(如共享的 Oracle Home),從而使 RAC 的管理變得更簡單。

在本指南中,您將使用 Oracle Enterprise Linux 5.3 版中包含的 OCFS2(OCFS2 版本 1.2.9-1)來儲存 Oracle 叢集件軟體所需共享的這兩個檔案。除了這兩個檔案以外,您還將使用此空間儲存所有 Oracle ASM 例項的共享 SPFILE。

有關適用於 Linux 的 OCFS2 的更多資訊(包括安裝說明),請參見本頁面。

在本文的前面幾個版本中,現在您應該需要從 下載 OCFS2 軟體。由於 Oracle Enterprise Linux 中包含了 OCFS2,我們不再需要進行這一操作。OCFS2 軟體堆疊包含以下軟體包:

32 位 (x86) 安裝

OCFS2 核心驅動程式 ocfs2-x.x.x-x.el5-x.x.x-x.el5.i686.rpm —(用於預設核心) ocfs2-x.x.x-x.el5PAE-x.x.x-x.el5.i686.rpm —(用於 PAE 核心) ocfs2-x.x.x-x.el5xen-x.x.x-x.el5.i686.rpm —(用於 xen 核心)

64 位 (x86_64) 安裝

OCFS2 核心驅動程式 ocfs2-x.x.x-x.el5-x.x.x-x.el5.x86_64.rpm —(用於預設核心) ocfs2-x.x.x-x.el5PAE-x.x.x-x.el5.x86_64.rpm —(用於 PAE 核心) ocfs2-x.x.x-x.el5xen-x.x.x-x.el5.x86_64.rpm —(用於 xen 核心)

就 Oracle Enterprise Linux 5.3 來說,預設情況下不會安裝 OCFS2 軟體包。CD #3 包含 OCFS2 軟體包。要確定 OCFS2 軟體包是否已安裝(多數情況下沒有),在兩個 Oracle RAC 節點上執行以下命令:

# rpm -qa | grep ocfs2 | sort

如果未安裝 OCFS2 軟體包,請將 Oracle Enterprise Linux 3 號 CD 載入到每個 Oracle RAC 節點,然後執行以下命令:

From Oracle Enterprise Linux 5 - [CD #3] # mount -r /dev/cdrom /media/cdrom # cd /media/cdrom/Server # rpm -Uvh ocfs2-tools-1.2.7-1.el5.i386.rpm # rpm -Uvh ocfs2-2.6.18-128.el5-1.2.9-1.el5.i686.rpm # rpm -Uvh ocfs2console-1.2.7-1.el5.i386.rpm # cd / # eject

安裝完 OCFS2 軟體包後,在兩個 Oracle RAC 節點上驗證已安裝該軟體:

# rpm -qa | grep ocfs2 | sort ocfs2-2.6.18-128.el5-1.2.9-1.el5 ocfs2console-1.2.7-1.el5 ocfs2-tools-1.2.7-1.el5

禁用 SELinux(RHEL4 U2 以及更高版本)

對於使用 RHEL4 U2 及更高版本(Oracle Enterprise Linux 5.3 基於 RHEL 5.3)的使用者,我們建議 OCFS2 當前不要在啟用 SELinux 的情況下執行。如果您現在使用的是 RHEL4 U2 或更高版本(由於我們用的是 Oracle Enterprise Linux 5.3,這部分使用者也包括我們),您需要確認已禁用 SELinux,以便執行 O2CB 服務。

在安裝 Oracle Enterprise Linux 時,我們在 SELinux 螢幕上禁用 了 SELinux。不過,如果您在安裝過程中沒有禁用 SELinux,可以使用工具 system-config-securitylevel 來禁用 SELinux。

要禁用 SELinux(或驗證它已禁用),執行“Security Level Configuration”GUI 實用程式:

# /usr/bin/system-config-securitylevel &

這將顯示以下螢幕:

圖 16:Security Level Configuration 開啟螢幕/防火牆禁用

現在,單擊 SELinux 選項卡,並選擇“Disabled”選項。單擊 [OK] 後,將顯示一個警告對話方塊。只需單擊“Yes”確認該警告。禁用 SELinux 選項後,螢幕現在應如下所示:

圖 17:禁用了 SELinux

如果此處您需要在任一節點上禁用 SELinux,這些節點將需要重新引導以實施更改。在繼續配置 OCFS2 之前,必須禁用 SELinux!

按照 Oracle 的建議,我們將 OCFS2 配置為使用專用 網路 (192.168.2.0) 來進行其所有的網路通訊。儘管 OCFS2 使用的頻寬並不富裕,但它確實需要各節點在網路上保持活動狀態並定期傳送 keepalive 資料包以確保它們在網路上的存在。為了避免因網路延遲而誤認為節點從網路上消失(這可導致節點自我隔離),建議使用專用互連。對 Oracle RAC 和 OCFS2 使用相同的專用互連是安全的。

一個常見的問題是,應該使用哪種節點名稱,該節點名稱是否應與 IP 地址相關聯?節點名稱需要與計算機的主機名相匹配。而 IP 地址不需要與該主機名相關聯。換言之,可以使用該節點上任意有效的 IP 地址。OCFS2 不會嘗試將節點名(主機名)與指定的 IP 地址相匹配。

下一步是在叢集中的兩個 Oracle RAC 節點上生成和配置 /etc/ocfs2/cluster.conf 檔案。完成此操作最簡單的方法是執行 GUI 工具 ocfs2console。在本節中,我們不但使用 ocfs2console 建立和配置 /etc/ocfs2/cluster.conf 檔案,而且還建立和啟動叢集堆疊 O2CB。如果 /etc/ocfs2/cluster.conf 檔案不存在(本示例中便是這種情況),ocfs2console 工具將建立該檔案以及一個預設叢集名為 ocfs2 的新叢集堆疊服務 (O2CB)。您將需要以 root 使用者帳戶在叢集中的兩個 Oracle RAC 節點上執行該操作:

$ su -

# ocfs2console &

這將顯示如下所示的 GUI:

圖 18:ocfs2console GUI

使用 ocfs2console GUI 工具執行以下步驟:

在“Node Configuration”對話方塊上,單擊 [Add] 按鈕。 這將顯示“Add Node”對話方塊。 在“Add Node”對話方塊中,輸入叢集中第一個節點的 Host name 和 IP address。保留 IP Port 的預設值 7777。在我的示例中,我新增了兩個節點,即用 linux1 / 192.168.2.100 表示第一個節點,用 linux2 / 192.168.2.101 表示第二個節點。

輸入的節點名“必須”與計算機的主機名相匹配,IP 地址將使用專用 互連。 單擊“Node Configuration”對話方塊上的 [Close]。

以下對話方塊顯示了節點 linux1 和 linux2 使用的 OCFS2 設定:

圖 20:為 OCFS2 配置節點

如果發生錯誤,請參考故障診斷一節:

o2cb_ctl: Unable to access cluster service while creating node

退出 ocfs2console 後,將獲得一個類似如下所示的 /etc/ocfs2/cluster.conf。需要在叢集中的兩個 Oracle RAC 節點上完成該過程,並且所有節點的 OCFS2 配置檔案必須完全相同:

node: ip_port = 7777 ip_address = 192.168.2.100 number = 0 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.2.101 number = 1 cluster = ocfs2 cluster: node_count = 2 >在使用 OCFS2 執行任何操作(如格式化或掛載檔案系統)之前,我們需要先執行 OCFS2 的叢集堆疊 O2CB(它將是以上執行的配置過程的結果)。此堆疊包含以下服務:

已將以上所有叢集服務打包到 o2cb 系統服務 (/etc/init.d/o2cb) 中。以下是 o2cb 系統服務的某些更有用的命令和選項的簡要列表。

以下命令僅用於進行說明,在安裝和配置本文所述的 OCFS2 時無需執行!

/etc/init.d/o2cb status Module "configfs": Loaded Filesystem "configfs": Mounted Module "ocfs2_nodemanager": Loaded Module "ocfs2_dlm": Loaded Module "ocfs2_dlmfs": Loaded Filesystem "ocfs2_dlmfs": Mounted Checking O2CB cluster ocfs2: Online Heartbeat dead threshold: 31 Network idle timeout: 30000 Network keepalive delay: 2000 Network reconnect delay: 2000 Checking O2CB heartbeat: Not active/etc/init.d/o2cb offline ocfs2 Stopping O2CB cluster ocfs2: OK以上命令將使我們建立的叢集 ocfs2 處於離線狀態。 /etc/init.d/o2cb unload Unmounting ocfs2_dlmfs filesystem: OK Unloading module "ocfs2_dlmfs": OK Unmounting configfs filesystem: OK Unloading module "configfs": OK以上命令將解除安裝所有 OCFS2 模組。 /etc/init.d/o2cb load Loading module "configfs": OK Mounting configfs filesystem at /sys/kernel/config: OK Loading module "ocfs2_nodemanager": OK Loading module "ocfs2_dlm": OK Loading module "ocfs2_dlmfs": OK Mounting ocfs2_dlmfs filesystem at /dlm: OK載入所有 OCFS2 模組。 /etc/init.d/o2cb online ocfs2 Starting O2CB cluster ocfs2: OK以上命令將使我們建立的叢集 ocfs2 處於聯機狀態。

配置 O2CB 在引導時啟動並調整 O2CB 心跳閾值

您現在需要配置 OC2B 驅動程式的引導屬性,以便在每次引導時將啟動叢集堆疊服務。您還需要將 OCFS2 心跳閾值的預設設定從 31 修改為 61。在叢集的兩個 Oracle RAC 節點上執行以下命令:

# /etc/init.d/o2cb offline ocfs2 # /etc/init.d/o2cb unload # /etc/init.d/o2cb configure Configuring the O2CB driver. This will configure the on-boot properties of the O2CB driver. The following questions will determine whether the driver is loaded on boot. The current values will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort. Load O2CB driver on boot (y/n) [n]: y Cluster to start on boot (Enter "none" to clear) [ocfs2]: ocfs2 Specify heartbeat dead threshold (>=7) [31]: 61 Specify network idle timeout in ms (>=5000) [30000]: 30000 Specify network keepalive delay in ms (>=1000) [2000]: 2000 Specify network reconnect delay in ms (>=2000) [2000]: 2000 Writing O2CB configuration: OK Loading module "configfs": OK Mounting configfs filesystem at /sys/kernel/config: OK Loading module "ocfs2_nodemanager": OK Loading module "ocfs2_dlm": OK Loading module "ocfs2_dlmfs": OK Mounting ocfs2_dlmfs filesystem at /dlm: OK Starting O2CB cluster ocfs2: OK

與本節中其他任務不同,只能在 RAC 叢集中的一個節點上建立 OCFS2 檔案系統。我將只從 linux1 執行本節中的所有命令。

現在,我們開始使用“在 iSCSI 捲上建立分割槽”節中針對 OCFS2 分割槽的 iSCSI 卷。

如果 O2CB 叢集處於離線狀態,則啟動它。格式化操作要求叢集處於聯機狀態,這是因為它需要確保在叢集的另一個節點上未掛載該卷。

在本文的前面章節中,我們在為 OCFS2/叢集件建立掛載點一節中建立了目錄 /u02,它將用作 OCFS2 叢集檔案系統的掛載點。本節包含建立和安裝檔案系統所使用的命令,該檔案系統將用於叢集管理器。

注意,可以使用 GUI 工具 ocfs2console 或命令列工具 mkfs.ocfs2 建立和安裝 OCFS2 檔案系統。在 ocfs2console 實用程式中,使用選單 [Tasks] - [Format]。

下面的內容演示瞭如何使用命令列工具 mkfs.ocfs2 建立 OCFS2 檔案系統。

為建立檔案系統,我們使用 Oracle 可執行檔案 mkfs.ocfs2。考慮到本示例的目的,我使用對映到 crs 的 iSCSI 卷 /dev/iscsi/crs/part1 的本地 SCSI 裝置名,以 root 使用者帳戶僅從 linux1 執行以下命令。另請注意,我還指定了一個名為“oracrsfiles”的標籤,可在掛載或取消掛載卷時引用:

$ su - # mkfs.ocfs2 -b 4K -C 32K -N 4 -L oracrsfiles /dev/iscsi/crs/part1 mkfs.ocfs2 1.2.7 Filesystem label=oracrsfiles Block size=4096 (bits=12) Cluster size=32768 (bits=15) Volume size=2145943552 (65489 clusters) (523912 blocks) 3 cluster groups (tail covers 977 clusters, rest cover 32256 clusters) Journal size=67108864 Initial number of node slots: 4 Creating bitmaps: done Initializing superblock: done Writing system files: done Writing superblock: done Writing backup superblock: 1 block(s) Formatting Journals: done Writing lost+found: done mkfs.ocfs2 successful

掛載 OCFS2 檔案系統

現在已經建立了此檔案系統,接下來我們便可以載入它了。首先,使用命令列進行掛載,然後我將介紹如何將它包含在 /etc/fstab 中以在每次引導時掛載它。

需要使用 OCFS2 標籤 oracrsfiles 以 root 使用者帳戶在兩個 Oracle RAC 節點上執行叢集檔案系統掛載!

首先,此處介紹瞭如何從命令列手動掛載 OCFS2 檔案。注意,需要以 root 使用者帳戶執行該操作:

$ su - # mount -t ocfs2 -o datavolume,nointr -L "oracrsfiles" /u02

如果掛載成功,您將只是獲得提示。但我們應執行以下檢查來確保檔案系統掛載正確。

首先,使用 mount 命令確保成功掛載了新檔案系統。應在 RAC 叢集的兩個節點上執行該操作:

# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) domo:Public on /domo type nfs (rw,addr=192.168.1.121) configfs on /sys/kernel/config type configfs (rw) ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw) /dev/sde1 on /u02 type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)請記下我掛載新檔案系統所使用的 datavolume 選項。Oracle 資料庫使用者必須使用 datavolume 掛載選項安裝任何將包含表決磁碟檔案、叢集登錄檔 (OCR)、資料檔案、重做日誌、存檔日誌以及控制檔案的卷,以確保 Oracle 程式開啟包含 O_DIRECT 標誌的檔案。nointr 選項確保 I/O 不會由於訊號而中斷。

不應使用該掛載選項掛載任何其他型別的卷,其中包括 Oracle 主目錄(本指南未使用它)。

為什麼掛載卷需要花費這麼長的時間?掛載一個卷大約需要 5 秒鐘。它這樣做是為了使心跳執行緒保持穩定。在以後的版本中,Oracle 計劃增加對全域性心跳(這將使大多數掛載瞬間完成)的支援。

讓我們瞭解一下到目前為止已經執行的操作。您安裝了 OCFS2 軟體程式包,它將用於儲存叢集管理器 所需的共享檔案。安裝後,您將 OCFS2 模組載入到核心中,然後對叢集檔案系統進行了格式化。最後,您使用 OCFS2 標籤“oracrsfiles”掛載了新建的檔案系統。本節將逐步完成在每次使用 OCFS2 標籤引導計算機時負責掛載新 OCFS2 檔案系統的步驟。

首先將以下行新增到叢集中兩個 Oracle RAC 節點的 /etc/fstab 檔案中:

LABEL=oracrsfiles /u02 ocfs2 _netdev,datavolume,nointr 0 0

注意用於掛載此檔案系統的“_netdev”選項。OCFS2 卷必須使用 _netdev 掛載選項。該掛載選項指示將在網路啟動後掛載該卷,在關閉網路前解除安裝該卷。

現在,讓我們確保已經載入了 ocfs2.ko 核心模組,並確保將在引導過程中安裝檔案系統。

如果您遵循了本指南中的示例,則應已經啟用了用於載入核心模組並安裝 OCFS2 檔案系統的操作。但您將仍以 root 使用者帳戶在叢集的兩個 Oracle RAC 節點上執行以下命令來檢查這些選項:

$ su - # chkconfig --list o2cb o2cb 0:off 1:off 2:on 3:on 4:on 5:on 6:off應把我以粗體標記的標誌設定為“on”。

檢查新 OCFS2 檔案系統的許可權

使用 ls 命令檢查所有權。應把許可權設定為 0775,且將所有者設定為“oracle”,將組設定為“oinstall”。

只需在 RAC 叢集中的一個節點上執行以下任務。我將只從 linux1 執行本節中的所有命令。

我們來先檢查許可權:

# ls -ld /u02 drwxr-xr-x 3 root root 4096 Jul 31 17:21 /u02正如在以上列表中所看到的,oracle 使用者帳戶(以及 oinstall 組)將無法寫入此目錄。我們來解決此問題: # chown oracle:oinstall /u02 # chmod 775 /u02我們回過頭來再次檢查叢集中兩個 Oracle RAC 節點的許可權是否正確: # ls -ld /u02 drwxrwxr-x 3 oracle oinstall 4096 Jul 31 17:21 /u02

建立 Oracle 叢集件檔案目錄

最後一個必需的任務是,在新的 OCFS2 檔案系統上建立一個用於儲存 Oracle 叢集件共享檔案的相應目錄。我們還將修改這個新目錄的許可權,以允許“oracle”所有者和“oinstall”組讀/寫該目錄。

只需在 RAC 叢集中的一個節點上執行以下任務。我將只從 linux1 執行本節中的所有命令。

# mkdir -p /u02/oradata/racdb # chown -R oracle:oinstall /u02/oradata # chmod -R 775 /u02/oradata # ls -l /u02/oradata total 4 drwxrwxr-x 2 oracle oinstall 4096 Jul 31 17:31 racdb

重新引導兩個節點

開始介紹下一節之前,最好在此時重新引導 RAC 叢集的兩個節點。當計算機啟動時,確保載入了叢集堆疊服務並安裝了新的 OCFS2 檔案系統:

# mount /dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw) proc on /proc type proc (rw) sysfs on /sys type sysfs (rw) devpts on /dev/pts type devpts (rw,gid=5,mode=620) /dev/hda1 on /boot type ext3 (rw) tmpfs on /dev/shm type tmpfs (rw) none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw) sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw) configfs on /sys/kernel/config type configfs (rw) ocfs2_dlmfs on /dlm type ocfs2_dlmfs (rw) cartman:SHARE2 on /cartman type nfs (rw,addr=192.168.1.120) /dev/sdc1 on /u02 type ocfs2 (rw,_netdev,datavolume,nointr,heartbeat=local)

如果修改了 O2CB 心跳閾值,則應驗證其是否設定正確:

# cat /proc/fs/ocfs2_nodemanager/hb_dead_threshold 61

如何確定 OCFS2 版本

要確定正在執行的 OCFS2 版本,使用:

# cat /proc/fs/ocfs2/version OCFS2 1.2.9 Wed Jan 21 21:32:59 EST 2009 (build 5e8325ec7f66b5189c65c7a8710fe8cb)18. 安裝和配置自動儲存管理 (ASMLib 2.0)

應在叢集中的這兩個 Oracle RAC 節點上執行本節中的大多數安裝和配置過程!但建立 ASM 磁碟將只需在叢集中的單個節點上執行。

在本節中,我們將安裝和配置 ASMLib 2.0,它用於自動儲存管理 (ASM)。在本節中,我們將使用 ASM 作為所有 Oracle 物理資料庫檔案(資料、聯機重做日誌、控制檔案、存檔重做日誌)以及閃回恢復區的共享檔案系統/卷管理器。

Oracle 10g 第 1 版中引入了 ASM,用於使管理員不必再管理單個檔案和驅動器。ASM 內建在 Oracle 核心中。透過它,DBA 可以全天候管理 Oracle 叢集例項的單個例項以叢集例項的數千個磁碟驅動器。將把所有要用於 Oracle 的檔案和目錄包含在磁碟組 中。ASM 跨所有可用磁碟驅動器並行執行負載平衡,以防止熱點並最大限度地提高效能(甚至對於快速更改資料使用模式也是如此)。

有兩個不同方法可在 Linux 上配置 ASM:

使用 ASMLib I/O 的 ASM:此方法使用 ASMLib 呼叫在由 ASM 管理的原始塊裝置 上建立所有 Oracle 資料庫檔案。由於 ASMLib 使用塊裝置,因此該方法不需要原始裝置。 使用標準 Linux I/O 的 ASM:此方法使用標準 Linux I/O 系統呼叫在 ASM 管理的原始字元裝置 上建立所有 Oracle 資料庫檔案。您將需要為 ASM 使用的所有磁碟分割槽建立原始裝置。

在本文中,我將使用“使用 ASMLib I/O 的 ASM”方法。Oracle 在 Metalink Note 275315.1 中說明,“所提供的 ASMLib 用於支援對 Linux 磁碟的 ASM I/O,同時不受標準 UNIX I/O API 的限制”。我計劃將來執行幾個測試以確定使用 ASMLib 會獲得的效能增益。這些效能度量和測試細節超出了本文的範圍,因此將不予討論。

如果要了解有關 Oracle ASMLib 2.0 的詳細資訊,請訪問

在本文的前幾個版本中,現在您需要從處下載 ASMLib 2.0 軟體。由於 Oracle Enterprise Linux 中包含了 ASMLib 軟體,此處不再需要這一操作(但使用者空間庫除外,它需要單獨下載)。ASMLib 2.0 軟體堆疊包含下面的軟體包:

32 位 (x86) 安裝

ASMLib 核心驅動程式 oracleasm-x.x.x-x.el5-x.x.x-x.el5.i686.rpm —(用於預設核心) oracleasm-x.x.x-x.el5PAE-x.x.x-x.el5.i686.rpm —(用於 PAE 核心) oracleasm-x.x.x-x.el5xen-x.x.x-x.el5.i686.rpm —(用於 xen 核心)

64 位 (x86_64) 安裝

ASMLib 核心驅動程式 oracleasm-x.x.x-x.el5-x.x.x-x.el5.x86_64.rpm —(用於預設核心) oracleasm-x.x.x-x.el5PAE-x.x.x-x.el5.x86_64.rpm —(用於 PAE 核心) oracleasm-x.x.x-x.el5xen-x.x.x-x.el5.x86_64.rpm —(用於 xen 核心)

就 Oracle Enterprise Linux 5.3 來說,預設情況下不安裝 ASMLib 2.0 軟體包。3 號 CD 中包含了 ASMLib 2.0 核心驅動程式和驅動程式支援檔案。使用者空間庫需單獨下載,因為 Oracle Enterprise Linux 中不包含該庫。要確定 Oracle ASMLib 軟體包是否已安裝(多數情況下沒有),在兩個 Oracle RAC 節點上執行下述操作:

# rpm -qa | grep oracleasm | sort

如果未安裝 Oracle ASMLib 2.0 軟體包,請將 Oracle Enterprise Linux 3 號 CD 載入到每個 Oracle RAC 節點,然後執行以下命令:

From Oracle Enterprise Linux 5 - [CD #3] # mount -r /dev/cdrom /media/cdrom # cd /media/cdrom/Server # rpm -Uvh oracleasm-support-2.1.2-1.el5.i386.rpm # rpm -Uvh oracleasm-2.6.18-128.el5-2.0.5-1.el5.i686.rpm # cd / # eject

安裝完 ASMLib 軟體包後,在兩個 Oracle RAC 節點上驗證已安裝該軟體:

# rpm -qa | grep oracleasm | sort oracleasm-2.6.18-128.el5-2.0.5-1.el5 oracleasm-support-2.1.2-1.el5

如前所述,在 Oracle Enterprise Linux 中包含了 ASMLib 2.0 軟體,但不包含使用者空間庫(也稱作 ASMLib 支援庫)。使用者空間庫是必需的,您可以在此處下載:

在將使用者空間庫下載到叢集中的兩個 Oracle RAC 節點後,使用下面的命令進行安裝:

# rpm -Uvh oracleasmlib-2.0.4-1.el5.i386.rpm Preparing... ########################################### [100%] 1:oracleasmlib ########################################### [100%]

有關透過堅不可摧的 Linux 網路(並非本文的必需)獲取 ASMLib 支援庫的資訊,請訪問。

配置和載入 ASMLib 2.0 程式包

現在,您下載並安裝了用於 Linux 的 ASMLib 程式包,接下來您需要配置並載入 ASM 核心模組。需要在兩個 Oracle RAC 節點上作為 root 使用者帳戶執行該任務:

$ su - # /etc/init.d/oracleasm configure Configuring the Oracle ASM library driver. This will configure the on-boot properties of the Oracle ASM library driver. The following questions will determine whether the driver is loaded on boot and what permissions it will have. The current values will be shown in brackets ('[]'). Hitting without typing an answer will keep that current value. Ctrl-C will abort. Default user to own the driver interface []: oracle Default group to own the driver interface []: oinstall Start Oracle ASM library driver on boot (y/n) [n]: y Scan for Oracle ASM disks on boot (y/n) [y]: y Writing Oracle ASM library driver configuration: done Initializing the Oracle ASMLib driver: [ OK ] Scanning the system for Oracle ASMLib disks: [ OK ]

建立 ASM 磁碟只需要在 RAC 叢集中的一個節點上以 root 使用者帳戶執行。我將在 linux1 上執行這些命令。在另一個 Oracle RAC 節點上,您將需要執行 scandisk 以識別新卷。該操作完成時,應在兩個 Oracle RAC 節點上執行 oracleasm listdisks 命令以驗證是否建立了所有 ASM 磁碟以及它們是否可用。

在“在 iSCSI 捲上建立分割槽”一節中,我們對 ASM 要使用的四個 iSCSI 捲進行了配置(分割槽)。ASM 將用於儲存 Oracle 資料庫檔案,如聯機重做日誌、資料庫檔案、控制檔案、存檔重做日誌以及閃回恢復區。在配置 ASM 卷時,使用 udev 建立的本地裝置名。

如果使用相同硬體(實際上是相同的共享邏輯驅動器)重複本文,則在嘗試建立 ASM 磁碟時可能會出現故障。如果確實遇到故障,則嘗試使用以下命令列出上述安裝使用過的所有 ASM 磁碟: # /etc/init.d/oracleasm listdisks

VOL1

VOL2

VOL3

VOL4

您可以看到,結果表明我定義了四個 ASM 卷。如果您在之前的執行中已經定義了四個卷,那麼使用以下命令將其刪除。刪除之前建立的卷後,使用“oracleasm createdisk”命令(如下所示)建立新卷。 # /etc/init.d/oracleasm deletedisk VOL1 Removing ASM disk "VOL1" [ OK ] # /etc/init.d/oracleasm deletedisk VOL2 Removing ASM disk "VOL2" [ OK ] # /etc/init.d/oracleasm deletedisk VOL3 Removing ASM disk "VOL3" [ OK ] # /etc/init.d/oracleasm deletedisk VOL4 Removing ASM disk "VOL4" [ OK ]

要使用 iSCSI 目標名到本地裝置名對映建立 ASM 磁碟,鍵入以下內容:

$ su - # /etc/init.d/oracleasm createdisk VOL1 /dev/iscsi/asm1/part1 Marking disk "/dev/iscsi/asm1/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL2 /dev/iscsi/asm2/part1 Marking disk "/dev/iscsi/asm2/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL3 /dev/iscsi/asm3/part1 Marking disk "/dev/iscsi/asm3/part1" as an ASM disk [ OK ] # /etc/init.d/oracleasm createdisk VOL4 /dev/iscsi/asm4/part1 Marking disk "/dev/iscsi/asm4/part1" as an ASM disk [ OK ]

在 RAC 叢集中的所有其他節點上,您必須執行磁碟掃描程式 以識別新卷:

# /etc/init.d/oracleasm scandisks Scanning system for ASM disks [ OK ]

現在,我們可以使用以下命令在 RAC 叢集中的兩個節點上以 root 使用者帳戶測試是否成功建立了 ASM 磁碟:

# /etc/init.d/oracleasm listdisks VOL1 VOL2 VOL3 VOL4

下一步是從 Oracle 技術網 (OTN) 下載並提取所需的 Oracle 軟體包:

如果您目前沒有 OTN 帳戶,那麼您需要建立一個。這是免費帳戶!

Oracle 提供了一個免費的開發和測試許可。但不提供支援,且該許可不允許用於生產目的。OTN 提供了完整的許可協議。

32 位 (x86) 安裝

64 位 (x86_64) 安裝

您將從 Oracle 下載所需的軟體並將其提取到叢集中的一個 Linux 節點上,即 linux1。您將從此計算機執行所有的 Oracle 軟體安裝。Oracle 安裝程式將使用遠端訪問方法將所需的軟體程式包複製到我們在第 15 節(使用 SSH 為遠端訪問配置 RAC 節點)中設定的 RAC 配置中的所有其他節點上。

登入到您將從其中以“oracle”使用者帳戶執行所有 Oracle 安裝的節點 (linux1)。在該示例中,您將把所需的 Oracle 軟體下載到 linux1 並將其儲存到 /home/oracle/orainstall。

下載並提取軟體

首先,下載適用於 Linux x86 或 Linux x86-64 的 Oracle 叢集件第 2 版 (10.2.0.1.0)、Oracle 資料庫 10g 第 2 版 (10.2.0.1.0) 以及 Oracle 資料庫 10g 隨附 CD 第 2 版 (10.2.0.1.0) 軟體。所有下載均在同一頁面中提供。

以 oracle 使用者帳戶將下載的三個程式包提取到臨時目錄。在該示例中,我將使用 /home/oracle/orainstall。

按如下所示提取 Oracle 叢集件程式包:

# su - oracle $ mkdir -p /home/oracle/orainstall $ cd /home/oracle/orainstall $ unzip 10201_clusterware_linux32.zip 然後提取 Oracle 資料庫軟體: $ cd /home/oracle/orainstall $ unzip 10201_database_linux32.zip 最後,提取(可選的)Oracle 隨附 CD 軟體: $ cd /home/oracle/orainstall $ unzip 10201_companion_linux32.zip

在安裝 Oracle 叢集件和 Oracle RAC 軟體之前,強烈建議執行叢集驗證實用程式 (CVU) 以驗證硬體和軟體配置。CVU 是 Oracle 叢集件安裝介質上提供的一個命令列實用程式。它負責執行各種系統檢查,以協助您確認 Oracle RAC 節點針對 Oracle 叢集件和 Oracle 真正應用叢集安裝進行了正確的配置。CVU 只需從您將從其中執行 Oracle 安裝的節點(本文中為 linux1)執行即可。注意,在 Oracle 叢集件安裝結束後,CVU 還會作為配置助手程式的一部分自動執行。

使用叢集驗證實用程式的先決條件

安裝 cvuqdisk RPM(僅適用於 Oracle Enterprise Linux 和 RHEL 使用者)

執行 CVU 的第一個前提條件針對執行 Oracle Enterprise Linux、Red Hat Linux 和 SuSE 的使用者。如果使用上面列出的任一作業系統,則必須下載程式包 cvuqdisk,並將其安裝到叢集中的兩個 Oracle RAC 節點上。這意味著您將需要在 linux1 和 linux2 上安裝 cvuqdisk RPM。如果沒有 cvuqdisk,CVU 將無法發現共享磁碟,您在執行 CVU 時會收到錯誤訊息“Package cvuqdisk not installed”(程式包 cvuqdisk 未安裝)。

cvuqdisk RPM 可在 rpm 目錄中的 Oracle 叢集件安裝介質中找到。考慮到本文的目的,將 Oracle 叢集件介質解壓縮到 linux1 上的 /home/oracle/orainstall/clusterware 目錄。注意,在安裝 cvuqdisk RPM 之前,我們需要設定名為 CVUQDISK_GRP 的環境變數,使其指向將要擁有 cvuqdisk 實用程式的組。預設的組是 oinstall,這正是本文中我們用於 oracle UNIX 使用者帳戶的組。

找到 cvuqdisk RPM,並以“oracle”使用者帳戶將其從 linux1 複製到 linux2:

$ ssh linux2 "mkdir -p /home/oracle/orainstall/clusterware/rpm" $ scp /home/oracle/orainstall/clusterware/rpm/cvuqdisk-1.0.1-1.rpm linux2:/home/oracle/orainstall/clusterware/rpm

在兩個 Oracle RAC 節點上,以“root”使用者帳戶執行以下步驟來安裝 cvuqdisk RPM:

$ su - # cd /home/oracle/orainstall/clusterware/rpm # CVUQDISK_GRP=oinstall; export CVUQDISK_GRP # rpm -iv cvuqdisk-1.0.1-1.rpm Preparing packages for installation... cvuqdisk-1.0.1-1 # ls -l /usr/sbin/cvuqdisk -rwsr-x--- 1 root oinstall 4168 Jun 2 2005 /usr/sbin/cvuqdisk驗證遠端訪問/使用者等效性

應該從 linux1(我們將在該節點執行所有的 Oracle 安裝)執行 CVU。執行 CVU 之前,以 oracle 使用者帳戶登入並驗證已針對叢集中的所有節點配置了遠端訪問/使用者等效性。使用安全 shell 方法時,需要首先在終端 shell 會話上啟用使用者等效性,然後再嘗試執行 CVU。要為當前的終端 shell 會話啟用使用者等效性,請執行以下步驟(記住為每個鍵輸入在提示時生成的通行短語):

# su - oracle $ exec /usr/bin/ssh-agent $SHELL $ /usr/bin/ssh-add Enter passphrase for /home/oracle/.ssh/id_rsa: xxxxx Identity added: /home/oracle/.ssh/id_rsa (/home/oracle/.ssh/id_rsa)

使用 CVU 驗證 Oracle 叢集件要求

滿足執行 CVU 實用程式的所有前提條件後,我們現在以“oracle”UNIX 使用者帳戶從 linux1 執行以下命令,以檢查 Oracle 叢集件的所有安裝前任務是否完成:

$ cd /home/oracle/orainstall/clusterware/cluvfy $ mkdir -p jdk14 $ unzip jrepack.zip -d jdk14 $ CV_HOME=/home/oracle/orainstall/clusterware/cluvfy; export CV_HOME $ CV_JDKHOME=/home/oracle/orainstall/clusterware/cluvfy/jdk14; export CV_JDKHOME $ ./runcluvfy.sh stage -pre crsinst -n linux1,linux2 -verbose

檢視 CVU 報表。注意,報告中幾個可以忽略的錯誤。

如果您的系統只有 1GB 的 RAM 記憶體,在進行“總記憶體”檢查時可能會收到錯誤:

Check: Total memory Node Name Available Required Comment ------------ ------------------------ ------------------------ ---------- linux2 1009.65MB (1033880KB) 1GB (1048576KB) failed linux1 1009.65MB (1033880KB) 1GB (1048576KB) failed Result: Total memory check failed.

如上述輸出所示,記憶體要求為 1GB (1048576 KB)。儘管您的系統可能在每個 Oracle RAC 節點上都安裝了 1GB 的記憶體,但 Linux 核心會將其計算為 1033880 KB,這比要求的大小少了 14696 KB。可以認為這一數值非常接近要求,可以繼續進行安裝。正如本文前面所述,我強烈建議兩個 Oracle RAC 節點分別具有 2GB 或以上的 RAM 記憶體,以滿足效能要求。

第一個錯誤與為 VIP 查詢一組適合的介面有關,可以忽略,沒什麼問題。這是 Metalink 說明 338924.1 中的一個錯誤檔案:

Suitable interfaces for the private interconnect on subnet "192.168.2.0": linux2 eth1:192.168.2.101 linux1 eth1:192.168.2.100 ERROR: Could not find a suitable set of interfaces for VIPs. Result: Node connectivity check failed.

如說明中所述,可以忽略該錯誤,沒什麼問題。

最後一組可忽略的錯誤涉及 Oracle Enterprise Linux 5 中不需要的特定 RPM 程式包版本。例如:

compat-db-4.00.14-5 compat-gcc-7.3-2.96.128 compat-gcc-c++-7.3-2.96.128 compat-libstdc++-7.3-2.960.128 compat-libstdc++-devel-7.3-2.96.128 compat-libstdc++-devel-7.3-2.96.128

這些特定的程式包在 CVU 報告中列為缺少,請確保在叢集中的兩個 Oracle RAC 節點上安裝了正確版本的 compat-* 程式包。例如,在 Oracle Enterprise Linux 4 Update 5 中,這些程式包應為:

compat-gcc-32-3.2.3-47.3 compat-gcc-32-c++-3.2.3-47.3 compat-libstdc++-33-3.2.3-47.3

利用 CVU 檢查硬體和作業系統設定

接下來要執行的 CVU 檢查將驗證硬體和作業系統設定。同樣,從 linux1 以“oracle”UNIX 使用者帳戶執行以下命令:

$ cd /home/oracle/orainstall/clusterware/cluvfy $ ./runcluvfy.sh stage -post hwos -n linux1,linux2 -verbose

檢視 CVU 報表。與之前的檢查(CRS 的安裝前任務)一樣,為 VIP 查詢一組合適的介面將失敗,可將其忽略,沒什麼問題。

另請注意,您可能在報告的“Checking shared storage accessibility...”部分收到警告資訊:

Checking shared storage accessibility... WARNING: Unable to determine the sharedness of /dev/sde on nodes: linux2,linux2,linux2,linux2,linux2,linux1,linux1,linux1,linux1,linux1 Shared storage check failed on nodes "linux2,linux1".

出現這種情況時,該警告也可忽略,沒什麼問題。雖然我們知道這些磁碟可見並在叢集中的兩個 Oracle RAC 節點中共享,但檢查本身可能會失敗。導致該錯誤的若干原因已得到證明。第一個原因來自 Metalink,指出 cluvfy 當前沒有使用 SCSI 裝置之外的其他裝置。這將包括裝置(如 EMC PowerPath)和卷組(如 Openfiler 中的卷組)。截至本文撰寫之日,除了使用手動方法檢測共享裝置外沒有其他解決方法。Oracle 的 Bane Radulovic 記錄下了該錯誤的另一個原因。他的研究表明,CVU 在 Linux 上呼叫 smartclt 時,smartclt 不會從 iSCSI 裝置返回序列號。例如,針對 /dev/sde 進行的檢查顯示:

截至本文撰寫之日,我們還不知道 Openfiler 開發人員是否打算對此進行修復。

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

相關文章